Redis高可用之主从复制实践

如果master有密码

masterauth 2021

  • 启动从服务器时开启

redis-server启动命令后加入参数 --slaveof ,如果master有密码,则需要加入密码参数。 --requirepass 最终的启动命令如下:

redis-server.exe ./redis.conf --slaveof 127.0.0.1 6379 --masterauth 2021

  • 客户端处执行命令开启 在Redis客户端如redis-cli 中执行命令 slaveof 来指定主服务器,如果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】 接下来就开始测试:

  1. 在master上执行命令:

set test 123

  1. 到对应的slave去查询这个key

从节点已经有了数据,读取出来数据也是正确的。

  1. 接下来我们在master上删除这个key。

  2. 再到对应的slave上读取这个key,可以发现数据已经没有了。

  3. 我们在master在增加一些数 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 据,然后将slave6381和master断开主从关系,看看有什么现象。

在确保slave6381已经有了上述数据之后,我们执行下面的命令断开主从关系。

slaveof no one

记住我们在前文说到过“Redis主从复制的开启,完全是在从节点发起的;不需要我们在主节点做任何事情”,所以这个命令是在slave6381上执行的,大家千万别搞错了!

slave6381执行命令之后信息如图所示,我们发现断开了关系,但是slave6381上从master上同步过来的数据仍然存在。因为从节点断开复制后,不会删除已有的数据,只是不再同步主节点新的数据变化。

主节点打印的日志如下图所示,显示slave6381已经下线。

读者福利

由于篇幅过长,就不展示所有面试题了,感兴趣的小伙伴

Redis高可用之主从复制实践_第1张图片

Redis高可用之主从复制实践_第2张图片

Redis高可用之主从复制实践_第3张图片

更多笔记分享

Redis高可用之主从复制实践_第4张图片
012657901)]

[外链图片转存中…(img-SiemHhK9-1650012657902)]

[外链图片转存中…(img-adoElbXG-1650012657903)]

更多笔记分享

[外链图片转存中…(img-cSaeulbn-1650012657903)]

你可能感兴趣的:(Java,经验分享,面试)