Redis高可用之主从复制实践,java程序设计基础答案

Redis高可用之主从复制实践,java程序设计基础答案_第1张图片

建立复制的相关命令

=========

需要注意的是,Redis主从复制的开启,完全是在从节点发起的;不需要我们在主节点做任何事情。

从节点开启主从复制,有以下三种方式:

  • 通过配置文件开启

在从服务器的配置文件中指定具体的master的地址,配置格式如下:

slaveof

如果master有密码

masterauth

在配置文件redis.conf中添加以下配置:

slaveof 192.168.1.103 6379

如果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 可以看到下图所示的信息:

Redis高可用之主从复制实践,java程序设计基础答案_第2张图片

在端口号为6381的slave上执行 info replication命令可以看到下面的信息:

Redis高可用之主从复制实践,java程序设计基础答案_第3张图片

由两张图的信息可以看出,端口号为6379的服务器角色是master,端口号6380和6381的服务器角色是slave,那么接下来我们试试到底他们之间能不能同步数据。

从下图可

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

以看出master和slave都是没有数据的(6380的机器也是一样我就没有放上来)

Redis高可用之主从复制实践,java程序设计基础答案_第4张图片

Redis高可用之主从复制实践,java程序设计基础答案_第5张图片

那么我们接下来就开始测试:

  1. 在master上执行命令:

set test 123

Redis高可用之主从复制实践,java程序设计基础答案_第6张图片

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

Redis高可用之主从复制实践,java程序设计基础答案_第7张图片

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

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

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

  3. 我们在master在增加一些数据,然后将slave6381和master断开主从关系,看看有什么现象。

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

slaveof no one

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

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

Redis高可用之主从复制实践,java程序设计基础答案_第8张图片

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

Redis高可用之主从复制实践,java程序设计基础答案_第9张图片

下面是redis主从复制场景的一些可调参数,需要根据实际环境调整

  • slave-serve-stale-data yes : 是否可以把不新鲜的数据服务与客户端

  • slave-read-only yes : 从节点只读,启用slaveof定义后才生效

  • repl-diskless-sync no :是否同时向多个从节点同时发数据

你可能感兴趣的:(程序员,面试,java,后端)