redis哨兵模式

redis哨兵模式:

  • redis主从虽然解决了单点导致的数据丢失问题,但是还是没有解决无缝的故障转移,也就是说在主库宕机后,从库无法自动切换为主库,需要手工去切换,在这一瞬间会对后端数据库造成极大的负载,可能直接导致后端数据宕机。

1. 哨兵主要作用:

  • 监控:监控redis主库及从库运行状态;
  • 通知:如果redis发生故障转移,可以通过邮件通知管理员;
  • 自动故障转移:一旦发现主库宕机,则在从库中通过选举新的master进行故障转移

2. 工作原理:

  • 哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slav作为新的Master。
  • 每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方宕机了这种宕机称为”主观认为宕机” Subjective Down,简称sdown)。
  • 若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master真正宕机,即客观上认为宕机,Objective Down,简称odown),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置。

3. IP规划:

主机名IP地址角色
redis10192.168.2.10master
redis20192.168.2.20slave1
redis30192.168.2.30slave2

4. 配置redis主从:

//配置master(可选设置密码)[root@redis10 ~]# vim  /etc/redis.conf
bind  0.0.0.0
protected-mode no   ---关闭保护机制
daemonize yes       ----以守护进程开启

//配置slave1,指定master:
bind 0.0.0.0
protected-mode no   ---关闭保护机制
daemonize yes       ----以守护进程开启
replicaof 192.168.2.10 6379

// 配置slave2,指定master:
bind 0.0.0.0
protected-mode no   ---关闭保护机制
daemonize yes       ----以守护进程开启
replicaof 192.168.2.10 6379
//启动master和slave得redis服务:
systemctl restart redis

5. 查看主从状态:

127.0.0.1:6379> ROLE
1) "master"
2) (integer) 36245
3) 1) 1) "192.168.2.20"
      2) "6379"
      3) "36231"
   2) 1) "192.168.2.30"
      2) "6379"
      3) "36245"
  
 或者:
 127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.2.20,port=6379,state=online,offset=36525,lag=1
slave1:ip=192.168.2.30,port=6379,state=online,offset=36525,lag=1
master_replid:9f677f11dbabe073413e0d0c9158b257a0867ee3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:36525
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:36525    

6. 配置哨兵模式

  • 注意:以下的操作2.10、2.20、2.30修改配置文件一样操作。
//查看哨兵的配置文件路径
[root@redis10 ~]# rpm -qc redis
/etc/logrotate.d/redis
/etc/redis-sentinel.conf
/etc/redis.conf
/etc/systemd/system/redis-sentinel.service.d/limit.conf
/etc/systemd/system/redis.service.d/limit.conf
//修改配置文件:
[root@redis10 ~]# vim /etc/redis-sentinel.conf
// 绑定监听IP
bind 0.0.0.0
// 监听端口
port 26379
// 后台运行
daemonize yes
// 哨兵的进程文件路径:
pidfile /var/run/redis-sentinel.pid
// 哨兵的日志文件路径
logfile  /var/log/redis/sentinel.log
// 哨兵sentinel的工作目录
dir /tmp
// 设置初始master以及法定认为下线人数:sentinel monitor <master-name> <master-ip> <redis-port> <quorum>  
sentinel monitor redis10 192.168.2.10 6379 2
// master主观下线时间,默认30秒,30秒内没有回复ping,则认为下线了,这里修改10s
sentinel down-after-milliseconds redis10 10000
// 指定在故障转移期间,多少个slave向新的master同步得数量,如果slave是提供查询服务,则应该设置小一点更好
sentinel parallel-syncs redis10 1
// 指定故障转移超时时间,默认为3分钟
sentinel failover-timeout redis10 180000
// 设置通知脚本,发生故障转移可以向管理员发送通知(可选)
sentinel notification-script redis10 /var/redis/notify.sh
// 禁止修改脚本,避免脚本重置
sentinel deny-scripts-reconfig yes
//创建通知脚本:
[root@redis10 ~]# mkdir -p /var/redis/
[root@redis10 ~]# vim /var/redis/notify.sh 
#!/bin/bash
TO="yangshuang@163.com"
SUBJECT="redis 发生故障转移"
CONTEXT="redis 发生故障转移"
echo -e $CONTEXT | mailx -s $SUBJECT $TO
[root@redis10 ~]# chmod +x /var/redis/notify.sh

7. 重启服务并测试:

//这里是启动哨兵的服务,每台主机都需要操作
[root@redis10 ~]# systemctl start redis-sentinel.service
//把2.10master的redis服务停掉:
[root@redis10 ~]# systemctl stop redis.service 
//在2.20查看redis主从信息:
[root@redis20 ~]# redis-cli 
127.0.0.1:6379> 
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.2.30,port=6379,state=online,offset=315855,lag=1
master_replid:6bea733ea973efe639549adf0c910cb32725be7f
master_replid2:b72e7a9654ca026cd9def1354f7023af1f2a38af
master_repl_offset:315855
second_repl_offset:35225
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:315855
可以看的出来现在2.20变成master了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值