本次主要搭建redis复制模式,这里共两台虚拟机,搭建一主二从复制模式。上一篇redis在CentOS安装已经介绍过redis如何安装的,这里不再赘述。注意:本文并没有加入哨兵
节点安排:
(1)master1:192.168.121.140:6381
(2)master2:192.168.121.140:6382(备用)
(2)slave1:192.168.121.139:6379
(3)slave2:192.168.121.139:6380
本文主要研究以下问题:
(1)当salve没有和master建立关系之前,master首先set部分数据,再其建立关系后,master之前set的数据会不会同步到两个slave节点?
(2)当两个slave节点之一挂掉,然后再次重启,查看redis节点的role是什么?
(3)当master节点挂掉,查看两个slave的role是什么?
(4)验证能不能再slave节点set数据?
(5)当重新启动一个master2之后,将slave1与其建立主从关系,那么slave1和master1的关系还保留吗?
为了探究上面的答案,下面我们一步步动手验证起来把
第一步:首先介绍下服务器上的目录结构
192.168.121.139节点:
文章图片
我们需要新建两个文件夹并命名为6379和6380,redis目录为redis相关的源码和配置,如下图:
文章图片
192.168.121.140节点:
文章图片
第二步:拷贝并修改配置文件
首先我们将139节点的redis目录下的redis.conf文件拷贝到文件夹6379下,然后进入到6379文件夹下。我们接下来需要修改配置文件夹的以下配置:
(1)daemonize:是否开启守护线程,默认no,修改为yes
文章图片
(2)port:监听端口,修改为6379
文章图片
(3)pidfile:进程号,修改值为/data/redis/6379/6379.pid
文章图片
(4)logfile:日志文件目录,修改为/data/redis/6379/6379.log
文章图片
(5)dir:工作目录,这里应该为文件夹,修改为/data/redis/6379
文章图片
(6)bind:修改为机器真实ip地址,记住一定不要配置127.0.0.1,否则slave连接不上master。当然如果是slave可以不用修改。
按照上述步骤修改完后,启动redis-server后,在6379文件夹下就会自动生成配置的文件
文章图片
其他的节点配置都是一样的,可以按照上面的步骤修改为对应的值。
第三步:启动三个节点
首先在139节点,进入到/data/redis/redis/src文件夹下,执行下面命令启动6379和6380redis
./redis-server /data/redis/6379/6379.conf
./redis-server /data/redis/6380/6380.conf
同样140节点,进入到到/data/redis/redis/src文件夹下,执行下面命令启动6381redis
./redis-server /data/redis/6381/6381.conf
第四步:使用redis提供的客户端连接redis,探究我们最初的5个问题
分别在139和140节点,进入到/data/redis/redis/src文件夹下,执行下面命令连接redis服务
./redis-cli -p 6379
./redis-cli -p 6380
./redis-cli -p 6381
通过命令info replication查看各节点的主从信息
文章图片
刚开始各节点的role都是master。
下面我们验证第一个问题:
(1)当salve没有和master建立关系之前,master首先set部分数据,再其建立关系后,master之前set的数据会不会同步到两个slave节点?
首先我们在140的6381set一个数据set k2 v2
文章图片
然后查看139节点上6379和6380上有没有k2
文章图片
文章图片
我们可以知道这两个redis并没有 k2的值
下面我们,将6379和6380设置为slave,执行下面命令,ip地址是master的ip地址,端口号是master监听端口
SLAVEOF 192.168.121.140 6380
SLAVEOF 192.168.121.140 6381
我们再次执行info replication命令,我们看到6379和6380的role是slave
文章图片
文章图片
这是我们再次查看是否存在 k2时,结果为:
文章图片
文章图片
结论:当salve没有和master建立关系之前,master首先set部分数据,再其建立关系后,master之前set的数据会同步到两个slave节点
(2)当两个slave节点之一挂掉,然后再次重启,查看redis节点的role是什么?
首先我们停掉6379节点,执行shutdown命令,然后重启查看role
文章图片
结论:当两个slave节点之一挂掉,然后再次重启,查看redis节点的role还是master。这里需要注意的是如果我们把slaveof配置在conf文件中,则重启会加载配置文件,最终还是slave。
(3)当master节点挂掉,查看两个slave的role是什么?
我们执行shutdown命令停掉master,查看两个slave的role
文章图片
文章图片
结论:当master关掉后,两个slave还是的role还是slave,只是master_link_status是down,标识和master断开连接了。
(4)验证能不能再slave节点set数据?
随便在任意slave节点set值,查看情况
文章图片
结论:slave节点不能set数据,只能读数据,但是在master节点可以读写数据。
(5)当重新启动一个master2之后,将slave1与其建立主从关系,那么slave1和master1的关系还保留吗?
按照第二步重新启动一个master节点6382,在6379执行slaveof 192.168.121.140 6382后,查看role和缓存的数据
、
文章图片
文章图片
可以看到之前master1同步的数据没有了,并且其主节点已经换成master2了,说明一个slave只能和一个master建立关系。
【redis|redis简单搭建主从复制】总结:本文主要研究redis在主从复制模式下,研究了主和从的关系。一点一滴进步。
推荐阅读
- Linux|109 个实用 shell 脚本
- linux笔记|linux 常用命令汇总(面向面试)
- Linux|Linux--网络基础
- linux|apt update和apt upgrade命令 - 有什么区别()
- linux|2022年云原生趋势
- Redis|redis原理之布隆过滤器(Bloom Filter)
- Go|Docker后端部署详解(Go+Nginx)
- 开源生态|GPL、MIT、Apache...开发者如何选择开源协议(一文讲清根本区别)
- redis安装与基本使用