主从 + Sentinel
哨兵模式 前言介绍
Redis Sentinel是Redis官方的高可用性解决方案。
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将主从复制组合中的其中一个从服务器升级为新的主服务器, 并让其他从服务器指向新的主服务器; 当客户端试图连接失效的主服务器时, Sentinel也会向客户端返回新主服务器的地址, 使得新主服务器代替失效服务器。
Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。
虽然 Redis 为 Sentinel 生成一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器。
此种模式下,客户端要访问的 服务 IP 不是主节点,而是 sentiner
服务器的 IP。
架构图
Redis Sentinel 故障转移
架构的扩展应用
部署环境
六个容器
三个redis服务器 一个master 两个slave
三个 sentinel
必须在用一个网段内 使得六个容器能够通信
主容器ip 172.17.0.2
从容器1 ip 172.17.0.3
从容器2 ip 172.17.0.4
三个哨兵分别是 172.17.0.5、172.17.0.6、172.17.0.7
进入容器后执行
yum -y install epel-release redis supervisor
我们使用supervisor
来后台运行redis
服务
配置主从服务器的启动文件
详情看 Redis主从复制
启动多个从服务器就只需要将conf文件配置copy进去就好了配置哨兵启动文件
[program:redis-6379]
command=/usr/bin/redis-sentinel /etc/redis/redis-sentinel.conf
autostart=true
autorestart=true
startsecs=10
startretries=3
exitcodes=0,2
stopsignal=QUIT
stopwaitsecs=1
user=root
log_stdout=true
log_stderr=false
logfile=/var/log/redis-6379.log
logfile_maxbytes=1MB
logfile_backups=3
[include]
files = relative/directory/*.ini
配置redis-sentinel.conf
bind 0.0.0.0
port 26379
protected-mode yes #这个置为yes 是让所有的哨兵之间进行通信
// 监控一个 Redis 服务器
// 名称为 mymaster ,IP 为 127.0.0.1 端口为 6380
// 最后的 2 是指最少有 2 给 Sentinel 实例同意一台 redis 服务器宕机,才会认为 客观下线。
// sentinel monitor 自定义的主节点名称 主节点的 IP 主节点端口 票数
sentinel monitor mymaster 172.17.0.2 6379 2
sentinel down-after-milliseconds mymaster 3000
// 180 秒后开始故障自动装换
sentinel failover-timeout mymaster 5000
sentinel parallel-syncs mymaster 1
各个选项的功能如下:
down-after-milliseconds 选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。
如果服务器在给定的毫秒数之内, 没有返回 Sentinel 发送的 PING 命令的回复, 或者返回一个错误, 那么 Sentinel 将这个服务器标记为主观下线(subjectively down,简称 SDOWN )。
不过只有一个 Sentinel 将服务器标记为主观下线并不一定会引起服务器的自动故障迁移: 只有在足够数量的 Sentinel 都将一个服务器标记为主观下线之后, 服务器才会被标记为客观下线(objectively down, 简称 ODOWN ), 这时自动故障迁移才会执行。
将服务器标记为客观下线所需的 Sentinel 数量由对主服务器的配置决定。
parallel-syncs
选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。
先查看一下哨兵监控信息
将master停掉服务
三个哨兵查看信息基本上都一致
查看新的主服务器信息
在次将172.17.0.2的redis服务启动
查看变成主的容器 ip:172.17.0.4
可以看到ip为172.17.0.2 变成从服务器了状态是在线的
再次查看哨兵的信息
会发现是没有改变的