目录
一、集群架构
1、集群部署图
单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。主节点负责写入,从节点只能读
2、节点分配
本次搭建主从同步集群使用了三台Centos系统服务器,共包含三个节点,一个主节点,两个从节点。
角色 | IP地址 | 端口 |
---|---|---|
master | 192.168.0.101 | 6379 |
slave | 192.168.0.102 | 6379 |
slave | 192.168.0.103 | 6379 |
二、准备实例节点和配置
1、修改三台redis.conf文件,将其中的持久化模式改为默认的RDB模式,AOF保持关闭状态
# 开启RDB,注释下面语句
# save ""
# 3600秒内至少有一个改动
save 3600 1
# 300秒内至少有10个改动
save 300 100
# 秒内至少有10000个改动
save 60 10000
...
...
# 关闭AOF
appendonly no
2、修改持久化文件存储位置
如果是在单台机器安装三个redis,需要修改各自端口,各自持久化文件存储位置
# 持久化文件默认存储在redis安装目录下
dir .
3、修改每个实例的声明IP
虚拟机本身有很多个IP,为了避免将来混乱,我们需要在redis.conf文件中指定每一个实例的绑定ip信息,可以加在第一行格式如下:
replica-announce-ip 192.168.0.101
可以通过命令sed来加在第一行
sed -i '1a replica-announce-ip 192.168.0.101' redis.conf
4、启动
分别在三台机器执行如下,启动三个实例
redis-server redis.conf
三、开启主从关系
1、方法一:replicaof
我们分别进入192.168.0.102和192.168.0.103两个机器
# 连接
redis-cli -p 6379
# 执行replicaof
replicaof 192.168.0.101 6379
2、方法二:slaveof
我们分别进入192.168.0.102和192.168.0.103两个机器
# 连接
redis-cli -p 6379
# 执行slaveof
slaveof 192.168.0.101 6379
3、查看集群状态
进入master192.168.0.101
# 连接
redis-cli -p 6379
# 执行
INFO replication
看到类似如下信息:
四、主从同步原理
1、数据同步原理-全量同步
概念
主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。
主从同步第一次同步是全量同步
显示把快照RDB文件发送一次,因为bgsave是异步,所以过程中还会把其他的写入记录融baklog,后面同步baklog。
全量同步流程
- slave节点连接到master节点,并发送SYNC(请求增量同步)命令
- master节点判断replid,发现不一致,拒绝增量同步
- master将完整内存数据生成RDB快照,发送RDB到slave从节点
- slave清空本地数据,加载master发来的RDB
- master将RDB期间的命令记录在repl_baklog,并持续将log中的命令发送给slave
- slave执行接收到的命令,保持与master之间的同步
2、数据同步原理-增量同步
概念
主从第一次同步是全量同步,但如果slave重启后同步,则执行增量同步。而且repl_baklog是环形缓存,有大小上限,写满后会覆盖最早的数据。如果slave断开时间太久,导致数据被覆盖,则无法实现增量同步,只能再次全量同步。
五、优化Redis主从集群
- 在master中配置repl-diskless-sync yes启用无磁盘复制,避免全量同步时的磁盘IO
- Redis单节点上的的内存占用不要太大,减少RDB导致的过多磁盘IO
- 适当提高repl_backlog的大小,发现slave宕机时尽快实现故障恢复,尽可能避免全量同步
- 限制一个master节点上的slave的数量,如果实在太多slave,则采用主-从-从链式结构,减少master压力