Redis主从复制简述
- 为了使集群可以在部分节点故障时仍然可以正常运作, Redis 集群对节点使用了主从复制功能: 集群中的每个节点都有 1 个至 N 个复制品(replication), 其中一个复制品为主节点(master), 而其余的 N-1 个复制品为从节点(slave),主节点(master)用作数据写入,其余N-1个从节点(slave)用于数据读取。
Redis主从复制特点
- 可以用于读写分离和容灾恢复。
- 一个主master可以有多个slave。
- 多个slave除了链接到相同的master之外、slave还可以链接其它slave形成阶梯传递。
- 可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。
Redis主从复制原理
- Slave启动成功连接到master后会发送一个sync命令。
- Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步。
- 全量复制:而slave服务在接收到Master数据库文件数据后,将其存盘并加载到内存中。
- 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步。
- 当lave节点只要是重新连接master,一次完全同步(全量复制)将被自动执行。
Redis主从复制的缺点
- 由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
Redis主从复制的常用的几种方式
- 一主多仆:Master主节点【A】,多个从节点Slave【B、C、D】
- 薪火相传(去中心化):Master主节点【A】、Slave从节点【B、C】、C节点下有slave从节点【D】、则C节点即从又主。
- 反客为主:当主节点Master宕机后、执行slaveof no one手动升级从节点为主节点。
- 哨兵模式(反客为主的自动版):当主节点Master宕机后、自动通过投票的方式选举某个从节点升级为主节点。
Redis集群配置之(一主多仆模式)
- 配从不配主。
- 从库配置 slaveof 主库IP 主库端口,每次与Master断开之后,都需要手动重连,除非配置进redis.conf文件则会自动重连。
- 可使用info replication查看当前主从节点状态。
① 拷贝多个redis.conf文件,分别设置运行模式daemonize启动模式,pid文件名称,端口,Log文件名字,dump.rdb名称。
status | ip | port | daemonize | pidfile | logfile | dbfilename |
---|---|---|---|---|---|---|
Master | 127.0.0.1 | 6379 | yes | /usr/local/bin/redis_6379.pid | redis_6379.log | dump_6379.rdb |
Slave | 127.0.0.1 | 6380 | yes | /usr/local/bin/redis_6380.pid | redis_6380.log | dump_6380.rdb |
Slave | 127.0.0.1 | 6381 | yes | /usr/local/bin/redis_6381.pid | redis_6381.log | dump_6381.rdb |
Slave | 127.0.0.1 | 6382 | yes | /usr/local/bin/redis_6382.pid | redis_6382.log | dump_6382.rdb |
② 分别启动redis-server服务端,redis-cli客户端
#切换目录
cd /usr/local/bin/ && ll
#redis-server端启动
redis-server /opt/module/redis-3.0.4/isRedis/redis_6379.conf
redis-server /opt/module/redis-3.0.4/isRedis/redis_6380.conf
redis-server /opt/module/redis-3.0.4/isRedis/redis_6381.conf
redis-server /opt/module/redis-3.0.4/isRedis/redis_6382.conf
#redis-cli客户端启动
redis-cli -p 6379
redis-cli -p 6380
redis-cli -p 6381
redis-cli -p 6382
③ 查看启动进程
④ 使用 info replication查看每个节点默认主从信息
#查看主从状态
info replication
⑤ 设置6380 6381 6382 以 6379为主库(Master)
#链接Master
SLAVEOF 127.0.0.1 6379
⑥ 测试Master[6379]写入数据、其它Slave节点获取数据
Redis集群配置之(薪火相传模式)
① 薪火相传模式 设置6382 以6381 为master
#链接命令
SLAVEOF 127.0.0.1 6381
② 测试主节点Master【6379】写入数据、其它从节点获取
Redis集群配置之(反客为主模式)
① 重新设置6380 6381 6382以6379为主Master节点、模拟6379主节点宕机、并查看其它从节点信息
② 在6380节点执行slaveof no one手动升级为Master 、并重新设置6381 6382以6380为主Master
③ 反客为主模式测试
Redis集群配置之(哨兵Sentinel模式)
① 重置6380 6381 6382以6379为主Master
② 创建sentinel.conf文件写入Master监控主机
#sentinel内容 【hf6379为哨兵名】
sentinel monitor hs6379 127.0.0.1 6379 1
③ 启动哨兵
redis-sentinel /opt/module/redis-3.0.4/isRedis/sentinel.conf
④ 现在模拟主机Master【6379】宕机、哨兵会通过投票重新选举一个Slave为主Master
⑤ 模拟以前的Master【6379】重新启动