1.前言
使用单台redis主机作为缓存,此台主机要兼并读写操作应对大量的并发,且单节点主机一旦故障服务便不能使用,所以由此引用主从架构来解决单节点redis主机的这些痛点问题,使用一主两从架构可以将读与写操作分离开来,主机分配写请求,从机分配读请求,在实际生产中读操作的需求量远远大于写操作,恰好从机可以扩张为多节点,当从机当前配置不足以应对大规模请求时,可以增加多台从机,以应对大规模的请求
2.主从原理
初始连接时全量数据同步,主机会使用rdb持久化方式生成当前时间点的数据快照,且继续接收客户端的写请求并将写请求写入缓存区中,将数据快照传输到从机上,从机就会把数据快照中的数据导入redis中,当数据快照中的数据完全写入了redis后,会继续将主机中缓存区的数据同步过来写入到redis中,同步完成以后,之后主机将会持续的同步数据到从机此时是增量同步(如果slave node开启了AOF,那么会在全量同步完成后立即执行BGREWRITEAOF,重写AOF)
3.本试验使用了三台centos7主机,配置如下如所示
![](https://i-blog.csdnimg.cn/blog_migrate/72811dd2d226f160d4afbd7f3448c372.png)
主机名称 | ip地址 | 端口 |
master | 10.1.60.80 | 6379 |
slave1 | 10.1.60.114 | 6379 |
slave2 | 10.1.60.115 | 6379 |
4.搭建redis主从
4.1三台主机均安装redis服务并启用redis服务
参考https://blog.csdn.net/ApexPredator/article/details/129402818
4.2三台主机均关闭防火墙
systemctl stop firewalld
4.3三台主机均关闭selinux服务
setenforce 0
4.4在两台slave主机的redis配置文件中增加以下配置
vim /root/redis-6.2.11/redis.conf
#也可以手动在redis-cli里执行以下命令,但是redis重启后需要再次手动执行以下命令
slaveof 10.1.60.80 6379 #配置从机连接master的地址、端口
masterauth 123456 #配置master的redis密码,若是手动执行需要在前面加上config set,即config set masterauth 123456
4.5重启redis服务
systemctl restart redis
4.6查看主从配置是否生效
info replication
![](https://i-blog.csdnimg.cn/blog_migrate/666f8235d490e8d3a13ace5386da6be4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/31ea9a2c03657c569a01a5a447dab4bc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/610e1d1a76f4e185d7bbac48918ec8bf.png)
上图可以看出两台从机的redis服务状态角色均为slave,连接master的状态也为up,主机的redis服务状态角色为master,显示有两台slave连接了,也能看到两台slave的ip和port
5.主从的数据复制
5.1master写入数据slave也会同步生成
![](https://i-blog.csdnimg.cn/blog_migrate/73975783fd2ec1a82d25edebda8ffa54.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3703b6bf27e35b1d5578df5b54eaaf3b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/420bb249249a816129d68bd4c47fe20e.png)
5.2slave不能写入数据,只有读权限(若是写入了数据会导致与主机数据不一致)
![](https://i-blog.csdnimg.cn/blog_migrate/c5931c9986aed699b8a761ffa44374d7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/679e059aa465cfb7ddd277c4b2d4c0bd.png)
5.3从机挂掉重启后会自动连接master主机,且在从机挂掉期间主机写入的数据也会同步到从机上(只有在配置文件中写入主从配置才会自动连接,否则slave需要手动执行主从配置才会重连master主机)
![](https://i-blog.csdnimg.cn/blog_migrate/c3ed4a5ada34044b7b143aca1be04e4b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dde1e54959a7b7723b0b45551c336fe4.png)
5.4master挂掉后slave依然会保持在slave状态,主机连接状态变为down,master重新启动后又会自动连接,且master挂掉后,slave依然不能写入
![](https://i-blog.csdnimg.cn/blog_migrate/282e0da35f15e0feeb8a445ee0a60b71.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b11a80759e38daa943ecfbab8a691bea.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5634fd721a188fc0b07cc11f2b2a5b62.png)
5.5若是slave想改回master状态不作为从机执行以下命令即可(若是主从配置在redis配置文件中,redis重启后又会变为slave状态)
slaveof no one