Redis哨兵和集群操作,都是建立在Redis的主从复制机制之上
Redis主从复制
主从复制命令
#主从复制命令SLAVEOF IP PORT#主动开启主从redis-cli -h 10.0.0.51 -p 6379 SLAVEOF 10.0.0.61 6379#断开主从SLAVEOF no one
Redis主从复制流程
简单流程:
- 从节点发送同步请求到主节点
主节点接收到从节点的请求之后,做了如下操作
- 立即执行bgsave将当前内存里的数据持久化到磁盘上
- 持久化完成之后,将rdb文件发送给从节点
从节点从主节点接收到rdb文件之后,做了如下操作
- 清空自己的数据
- 载入从主节点接收的rdb文件到自己的内存里
建立主从后Redis主从库之间的数据实时同步
主从同步需要注意的点:
- 从节点只读不可写
- 从节点不会自动故障转移,它会一直同步主节点
10.0.0.52:6379> set k1 v1
(error) READONLY You can’t write against a read only slave.
- 主从复制故障转移需要人工介入
- 修改代码指向REDIS的IP地址
- 从节点需要执行SLAVEOF no one
- 从节点会清空自己原有的数据,如果同步的对象写错了,就会导致数据丢失
- 从库和主库后续的同步依靠的是redis的SYNC协议,而不是RDB文件,RDB文件只是第一次建立同步时使用。
- 从库也可以正常的持久化文件
Redis哨兵
优点
- Redis哨兵解决主从复制需要人工干预的问题
- 提供了一个高可用的解决方案
缺点
- 创建Redis进程
- Redis开启主从复制
- 编辑sentinel配置文件
vim /opt/redis_26379/conf/redis_26379.conf
bind 10.0.0.51 #绑定本机IP,不能直接绑定127.0.0.1port 26379daemonize yeslogfile /opt/redis_26379/logs/redis_26379.logdir /data/redis_26379sentinel monitor myredis 10.0.0.51 6379 2sentinel down-after-milliseconds myredis 3000sentinel parallel-syncs myredis 1sentinel failover-timeout myredis 18000
配置文件的解释
sentinel monitor myredis 10.0.0.51 6379 2#mymaster 主节点别名 主节点 ip 和端口,判断主节点失败, 两个 sentinel 节点同意sentinel down-after-milliseconds myredis 3000#选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。sentinel parallel-syncs myredis 1#向新的主节点发起复制操作的从节点个数, 1 轮询发起复制sentinel failover-timeout myredis 180000#故障转移超时时间
- 创建redis-sentinel进程
集群中所有机器,都要创建哨兵进程
- 连接到sentinel中验证
#连接查看redis-cli -h 10.0.0.51 -p 26379 Sentinel get-master-addr-by-name myredis#主动切换sentinel failover myredis
