Redis 高可用之主从复制实践
如果 master 有密码
masterauth 2021
启动从服务器时开启
redis-server 启动命令后加入参数 --slaveof <masterip> <masterport>,如果 master 有密码,则需要加入密码参数。 --requirepass <password> 最终的启动命令如下:
redis-server.exe ./redis.conf --slaveof 127.0.0.1 6379 --masterauth 2021
客户端处执行命令开启 在 Redis 客户端如 redis-cli 中执行命令 slaveof <masterip> <masterport>来指定主服务器,如果 master 有密码则需要紧接着执行下面的命令: config set masterauth 2021 复制代码
上述 3 种方式最终的效果都是一样的的,大家可以自己试一试。这里以第二种方式为例,看一下当执行了 slaveof 后,Redis 主节点和从节点的变化。
观察效果
====
在 master 的客户端上执行命令 info replication 和 client list 可以看到下图所示的信息:
在端口号为 6381 的 slave 上执行 info replication 命令可以看到下面的信息:
由两张图的信息可以看出,端口号为 6379 的服务器角色是 master,端口号 6380 和 6381 的服务器角色是 slave,那么接下来我们试试到底他们之间能不能同步数据。
从下图可以看出 master 和 slave 都是没有数据的(6380 的机器也是一样我就没有放上来)
那么我们 Java 开源项目【ali1024.coding.net/public/P7/Java/git】 接下来就开始测试:
在 master 上执行命令:
set test 123
到对应的 slave 去查询这个 key
从节点已经有了数据,读取出来数据也是正确的。
接下来我们在 master 上删除这个 key。
再到对应的 slave 上读取这个 key,可以发现数据已经没有了。
我们在 master 在增加一些数 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 据,然后将 slave6381 和 master 断开主从关系,看看有什么现象。
在确保 slave6381 已经有了上述数据之后,我们执行下面的命令断开主从关系。
slaveof no one
记住我们在前文说到过“Redis 主从复制的开启,完全是在从节点发起的;不需要我们在主节点做任何事情”,所以这个命令是在 slave6381 上执行的,大家千万别搞错了!
slave6381 执行命令之后信息如图所示,我们发现断开了关系,但是 slave6381 上从 master 上同步过来的数据仍然存在。因为从节点断开复制后,不会删除已有的数据,只是不再同步主节点新的数据变化。
主节点打印的日志如下图所示,显示 slave6381 已经下线。
读者福利
由于篇幅过长,就不展示所有面试题了,感兴趣的小伙伴
更多笔记分享
评论