哨兵模式介绍
- 哨兵模式是redis自带提供的一种高可用方案。
- 客户端不再直连redis服务端。而是连接哨兵,哨兵再连接redis服务的。
- 客户端虽然连接的是哨兵,但是通信是和server,所以哨兵挂掉后没任何影响,只有是server挂掉以后client才会去找哨兵给我连新的server。
- 哨兵和redis-server一样,也是集群部署的。都建议3个节点以上。
动手搭建哨兵模式
光说不练假把式
安装redis
略
准备redis服务配置文件
# 配置文件进行了精简,完整配置可自行和官方提供的完整conf文件进行对照。端口号自行对应修改
#后台启动的意思
daemonize yes
#端口号(如果同一台服务器上启动,注意要修改为不同的端口)
port 6380
# IP绑定,redis不建议对公网开放,直接绑定0.0.0.0没毛病
bind 0.0.0.0
# 这个文件会自动生成(如果同一台服务器上启动,注意要修改为不同的端口)
pidfile /var/run/redis_6380.pid
启动三个redis服务
这里就在同一台机器上演示,开三个进程。
-
启动三个Redis
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6380.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6381.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis-6382.conf
-
配置为 1主2从
/usr/local/redis/bin/redis-cli -p 6381 slaveof 192.168.100.241 6380
/usr/local/redis/bin/redis-cli -p 6382 slaveof 192.168.100.241 6380
-
检查集群
/usr/local/redis/bin/redis-cli -p 6380 info Replication
准备哨兵配置文件
哨兵跟redis服务一样启动时也需要指定配置文件
# 配置文件:sentinel.conf,在sentinel运行期间是会被动态修改的
# sentinel如果重启时,根据这个配置来恢复其之前所监控的redis集群的状态
# 绑定IP
bind 0.0.0.0
# 后台运行
daemonize yes
# 默认yes,没指定密码或者指定IP的情况下,外网无法访问
protected-mode no
# 哨兵的端口,客户端通过这个端口来发现redis
port 26380
# 哨兵自己的IP,手动设定也可自动发现,用于与其他哨兵通信
# sentinel announce-ip
# 临时文件夹
dir /tmp
# 日志
logfile "/usr/local/redis/logs/sentinel-26380.log"
# sentinel监控的master的名字叫做mymaster,初始地址为 192.168.100.241 6380,2代表两个及以上哨兵认定为死亡,才认为是真的死亡
sentinel monitor mymaster 192.168.100.241 6380 2
# 发送心跳PING来确认master是否存活
# 如果master在“一定时间范围”内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了
sentinel down-after-milliseconds mymaster 1000
# 如果在该时间(ms)内未能完成failover操作,则认为该failover失败
sentinel failover-timeout mymaster 3000
# 指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
sentinel parallel-syncs mymaster 1
启动三个redis哨兵
/usr/local/redis/bin/redis-server /usr/local/redis/conf/sentinel-26380.conf --sentinel
/usr/local/redis/bin/redis-server /usr/local/redis/conf/sentinel-26381.conf --sentinel
/usr/local/redis/bin/redis-server /usr/local/redis/conf/sentinel-26382.conf --sentinel
测试验证
未完待续。。