一、实验目的
Redis数据库的主从复制原理及实现
二、主从复制
1、什么是主从复制
将多台数据库服务器分为主节点和从节点,主节点数据更新后会根据配置和策略,自动同步到从节点上,从而保证主从节点中存有相
同的数据。
2、主从复制的作用
- 数据可以有多份副本
- 提升数据库系统的请求处理能力
- 实现读写分离机制(主节点以写为主;从节点以读为主)
- 容灾快速恢复(主节点shutdow,可以将从节点提升为主节点)
3、Redis主从复制原理
全量数据同步
主节点发送快照RDB文件给从节点
增量同步(命令传播)
全量数据同步完成后,主节点将执行过的写命令发送给从节点
三、代码实现
1、配置文件
主节点(master):端口号为 6379 完整 IP:127.0.0.1 6379
从节点 1(slave1):端口号为 6380 完整 IP:127.0.0.1 6380
从节点 2(slave2):端口号为 6381 完整 IP:127.0.0.1 6381
配置文件
指定master的节点
启动三台服务器
查看服务器信息
info replication
得到master信息:
得到slave信息:
主从节点数据同步实验
在master中写入数据,可以在slave中读取
从节点不能写数据实验
2、主从复制的容灾处理(手动版)
在 Redis 主从结构中,当 master 服务出现故障时,可手动将其中一个 slave 节点提升为 master 节点,然后将剩下的 slave 节点重新设置为新的 master 节点的从节点,从而继续进行用户请求处理。
将master主节点停止,模拟故障
shutdown
6380端口提升为master
slaveof no one
将6381端口挂在新的master上
== 可以看到,现在的主从(Master/Slave)关系为:Master 是 6380 服务器,Slave 是6381 服务器,可以继续处理用户的请求。==
故障机6379重启,虽然是主节点,但是没有从节点
6379变从
6379它虽然是主节点,但是没有从节点,因此需要把它添加到现有的Master/Slave 结构中,让它变成 6380 机的从节点。
info sentinel
info replication
现在的 Master/Slaver 结构是:
- Master: 6381 服务器
- Slave: 6380 和 6379 服务器
四、主从同步优化
主从同步可以保证主从数据的一致性,非常重要。可以从以下几个方面来优化 Redis主从集群:
- 在 master 中配置 repl-diskless-sync yes 启用无磁盘复制,避免全量同步时的磁盘 IO
- Redis 单节点上的内存占用不要太大,减少 RDB 导致的过多磁盘 IO
- 适当提高 repl_baklog 的大小,发现 slave 宕机时尽快实现故障恢复,尽可能避免全量同步
- 限制一个 master 上的 slave 节点数量,如果实在是太多 slave,则可以采用主- 从-从链式结构,减少 master 压力
五、总结
- 一个 master 节点可以有多个 slave 节点;
- slave 节点故障,读请求的处理性能下降;
- master 节点故障,写请求无法执行;
- 当 master 发生故障,可手动将其中一台 slave 使用 slaveof no one 命令提升为 master,其它 slave 执行 slaveof 命令指向这个新的 master;
- 主从复制模式的故障转移需要手动操作,要实现自动化处理,这就需要Sentinel 哨兵,实现故障自动转移