这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情
前言
主机数据更新后根据配置和策略,自动同步到备机的 master/slaver 机制,Master 以写为主,slave 以读为主。可以实现读写分离性能的扩展,以及容灾的快速恢复(从服务器都是多个,即使一个挂了可以根据策略去其他从服务去获取)。
下面我们就一起来配置一下一主二从,创建容器
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
docker run -p 6380:6380 --name redis6380 \
-v /mydata/redis6380/data:/data \
-v /mydata/redis6380/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
docker run -p 6381:6381 --name redis6381 \
-v /mydata/redis6381/data:/data \
-v /mydata/redis6381/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
注意:另外两个从服务器需要在配置文件中指定一下端口
创建完成后可能连接不到redis 先查看一下自己的端口有没有开启出来
firewall-cmd --query-port=666/tcp ##666指的是自己的端口
##提示 yes,表示开启;no表示未开启
添加指定端口,添加完成后需要重新载入一下
firewall-cmd --add-port=123/tcp --permanent
firewall-cmd --reload
还有持久化策略(选做)配置文件中加入
appendonly yes
下面我们查看一下3 台服务的信息 可以看到当前角色
info replication
下面我们将6380和6381 两台作为从服务器配置上去
slaveof 192.168.1.7 6379
再来 执行
info replication查看角色就能看到 是从节点 也能看到主服务的地址
下面我这里踩了一个大坑 因为我主节点设置 了链接密码导致我主节点无法加载到从服务
如果主节点添加了连接密码的话从服务中就必须配置主服务的链接密码
masterauth password
添加完成后重启从节点服务设置为从机就可以在主服务中可以看到了(因为我这三个都是在一个虚拟机中的所以IP都是127.0.0.1)
我们可以直接测试了主节点添加key 从节点也会自动复制。当然从节点是无法写入的
主从复制
- 从服务器连接到主服务器之后,从服务器向主服务器发送消息进行数据同步。
- 主服务器接到从服务器发送过来的同步消息,把主服务器数据进行持久化rdb文件,把rdb文件发送给从服务器,从服务器获取到文件进行读取(注意这里是
全量复制,且从服务器主动发起) - 后面每次主服务器进行写操作之后都会和从服务器进行数据同步(注意此时就是
增量复制)
实践是检验真理的唯一准则,感兴趣的可以去试试呀!明天见咯 😃😃😃😃