[喵咪Redis]Redis-Sentinel
前言
redis-Sentinel 是我们这次来一同学习 redis 的重点,在我们现在的系统已经离不开 redis 的时候 , redis 挂掉了或者是一些其他问题都是致命的 , 那么怎么做到 redis 的高可用呢 , 官方有提供一个管理 redis 集群自动容灾的一个应用 Redis-Sentinel .那么我们就来一同搭建一个 redis 高可用的 redis 集群.
附上:
喵了个咪的博客:w-blog.cn
Redis官网:http://redis.io/
Redis Sentinel文档:http://redis.io/topics/sentinel
1. 了解Sentinel
Sentinel可以用于管理多个Redis服务,并且会执行三个任务:
- 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
- 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
- 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。
虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器, 你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动 Redis Sentinel 。
2. 准备工作
我们准备2台 Liunx 服务器内网 IP 分别为 192.168.0.20 和 192.168.0.21
然在两台服务器上面各配置好两个 redis 实例为:
- 192.168.0.20:6379
- 192.168.0.20:6380
- 192.168.0.21:6381
- 192.168.0.21:6382
然后我们配置好主从关系把192.168.0.20:6379作为主redis其余作为从Redis
在我们redis编译完成的目录中src目录下有一个 redis-sentinel 的程序,我们把他 cp 到 /usr/local/bin/ 下面就可以直接使用 redis-sentinel 命令了
3. 配置Sentinel
我们分别在2台服务器上创建4个 Sentinel 实例我们先配置 192.168.0.20 这台服务器
cd /etc/redis/
vim sentinel_6379.config
port 26379
sentinel monitor master1 192.168.0.20 6379 2
sentinel down-after-milliseconds master1 60000
sentinel failover-timeout master1 180000
sentinel parallel-syncs master1 1
sentinel auth-pass master1 testpassword
- 第一行 监听的端口号
- 第二行 配置指示 Sentinel 去监视一个名为 mymaster的主服务器,这个主服务器的IP地址为 192.168.0.20,端口号为 6379 , 而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)。
- 第三行 down-after-milliseconds 选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。
- 第四行 failover-timeout 设置故障恢复时间 , 也就是当故障了切换了主了之后多久去检测原来的主服务器是否可以用并且进行处理的毫秒数
- 第五行 parallel-syncs 选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。
- 第六行 配置连接主库的密码,如果主库有密码没有设置此项则会无法联通
然后以同样的配置配置好端口为 192.168.0.20:26380 , 192.168.0.21:26381 和 192.168.0.21:26382
然后我们使用 redis-sentinel 分表在2台服务器上面
redis-sentinel sentinel_6379.config
redis-sentinel sentinel_6380.config
redis-sentinel sentinel_6381.config
redis-sentinel sentinel_6382.config
我们观察终端的语句会出现如下输出
+slave <instance details> :一个新的从服务器已经被 Sentinel 识别并关联。
+sentinel <instance details> :一个监视给定主服务器的新 Sentinel 已经被识别并添加。
看到2个子实例都绑定上了 , 4个 sentinel 也都显示了这个时候就证明已经配置好了 redis-sentinel 然后我们在主服务上面执行如下语句
service redis_6379 stop
这个时候就可以看到在终端中在打印了一些转换的语句,我们在检查主从设置的时候就已经自动转意到了莫一个 redis 子实例上了,当我们重新把主运行起来之后,主实例会自动成为子实例
4. 总结
本节主要介绍了怎么配置一个 redis 集群,以及怎么把 redis-sentinel 跑起来来达到高可用容灾切换的问题,更多的操作可以参考 sentinel 官方文档来了解更多的关于 sentinel 的操作.
注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!
PhalApi官网QQ交流群:421032344 欢迎大家的加入!