Redis哨兵和集群操作,都是建立在Redis的主从复制机制之上

Redis主从复制

主从复制命令

  1. #主从复制命令
  2. SLAVEOF IP PORT
  3. #主动开启主从
  4. redis-cli -h 10.0.0.51 -p 6379 SLAVEOF 10.0.0.61 6379
  5. #断开主从
  6. SLAVEOF no one

Redis主从复制流程

image.png

简单流程:

  1. 从节点发送同步请求到主节点

主节点接收到从节点的请求之后,做了如下操作

  • 立即执行bgsave将当前内存里的数据持久化到磁盘上
  1. 持久化完成之后,将rdb文件发送给从节点

从节点从主节点接收到rdb文件之后,做了如下操作

  • 清空自己的数据
  • 载入从主节点接收的rdb文件到自己的内存里

建立主从后Redis主从库之间的数据实时同步

主从同步需要注意的点:

  1. 从节点只读不可写
  2. 从节点不会自动故障转移,它会一直同步主节点

10.0.0.52:6379> set k1 v1
(error) READONLY You can’t write against a read only slave.

  1. 主从复制故障转移需要人工介入
  • 修改代码指向REDIS的IP地址
    - 从节点需要执行SLAVEOF no one
  1. 从节点会清空自己原有的数据,如果同步的对象写错了,就会导致数据丢失
  2. 从库和主库后续的同步依靠的是redis的SYNC协议,而不是RDB文件,RDB文件只是第一次建立同步时使用。
  3. 从库也可以正常的持久化文件

    Redis哨兵

    优点
  • Redis哨兵解决主从复制需要人工干预的问题
  • 提供了一个高可用的解决方案

缺点

  • 系统资源利用效率很低

    哨兵创建流程

  1. 创建Redis进程
  2. Redis开启主从复制
  3. 编辑sentinel配置文件

vim /opt/redis_26379/conf/redis_26379.conf

  1. bind 10.0.0.51 #绑定本机IP,不能直接绑定127.0.0.1
  2. port 26379
  3. daemonize yes
  4. logfile /opt/redis_26379/logs/redis_26379.log
  5. dir /data/redis_26379
  6. sentinel monitor myredis 10.0.0.51 6379 2
  7. sentinel down-after-milliseconds myredis 3000
  8. sentinel parallel-syncs myredis 1
  9. sentinel failover-timeout myredis 18000

配置文件的解释

  1. sentinel monitor myredis 10.0.0.51 6379 2
  2. #mymaster 主节点别名 主节点 ip 和端口,判断主节点失败, 两个 sentinel 节点同意
  3. sentinel down-after-milliseconds myredis 3000
  4. #选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。
  5. sentinel parallel-syncs myredis 1
  6. #向新的主节点发起复制操作的从节点个数, 1 轮询发起复制
  7. sentinel failover-timeout myredis 180000
  8. #故障转移超时时间
  1. 创建redis-sentinel进程

集群中所有机器,都要创建哨兵进程

  1. 连接到sentinel中验证
  1. #连接查看
  2. redis-cli -h 10.0.0.51 -p 26379 Sentinel get-master-addr-by-name myredis
  3. #主动切换
  4. sentinel failover myredis