redis 哨兵 异步_Redis(6):redis集群之哨兵机制

前言

上节我们讲了Redis的主从复制,但redis的主从复制无法实现master和slave的自动切换,当master出现故障时,redis高可用无法实现自动故障转移,需要手动切换。所以本节我们来学习下redis的哨兵机制,redis哨兵机制可以实现master故障自动切换 。

1.redis哨兵机制

Sentinel进程是用于监控redis集群中Master主服务器工作的状态,在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用,其已经被集成在redis2.6+的版本中,的哨兵模式到了2.8版本之后就稳定了下来。

如上图。 哨兵(Sentinel)是一个分布式系统,可以在一个架构中运行多个哨兵(sentinel)进程,这些进程使用流言协议(gossip protocols)来接收关于Master主服务器是否下线的信息,并使用投票协议(Agreement Protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。每个哨兵(Sentinel)进程会向其它哨兵(Sentinel)、Master、Slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定配置时间(可配置的)内未得到回应,则暂时认为对方已掉线,也就是所谓的”主观认为宕机”,主观是每个成员都具有的独自的而且可能相同也可能不同的意识,英文名称:Subjective Down,简称SDOWN。有主观宕机,肯定就有客观宕机。当“哨兵群”中的多数Sentinel进程在对Master主服务器做出SDOWN的判断,并且通过SENTINEL is-master-down-by-addr命令互相交流之后,得出的Master Server下线判断,这种方式就是“客观宕机”,客观是不依赖于某种意识而已经实际存在的一切事物,英文名称是:ObjectivelyDown, 简称ODOWN。通过一定的vote算法,从剩下的slave从服务器节点中,选一台提升为Master服务器节点,然后自动修改相关配置,并开启故障转移(failover)。

Sentinel机制可以解决master和slave角色的切换问题。

1.1 配置redis哨兵机制

需要手动先指定某一台服务器为master,然后将其他slave服务器使用命令配置为master服务器的slave,哨兵的前提是已经手动实现了一个redis master-slave的运行环境。

#配置redis哨兵机制拓扑图

1.2 三台主机安装redis

#主机node20安装redis服务

[root@node20 ~]# yum -y install gcc gcc-c++

[root@node20 ~]# cd /usr/local/src/

[root@node20 src]# ls

redis-4.0.14.tar.gz

[root@node20 src]# tar -zxvf redis-4.0.14.tar.gz

[root@node20 src]# cd redis-4.0.14

[root@node20 src]# make

[root@node20 redis-4.0.14]# make PREFIX=/apps/redis install

[root@node20 redis-4.0.14]# mkdir /apps/redis/{etc,logs,data,run}

[root@node20 redis-4.0.14]# cp redis.conf /apps/redis/etc/

[root@node20 redis-4.0.14]# vim /apps/redis/etc/redis.conf

bind 0.0.0.0

protected-mode no

requirepass 123456

logfile "/apps/redis/logs/redis.log"

dir /apps/redis/data

[root@node20 redis-4.0.14]# vim /usr/lib/systemd/system/redis.service

[Unit]

Description=Redis persistent key-value database

After=network.target

After=network-online.target

Wants=network-online.target

[Service]

#ExecStart=/usr/bin/redis-server /etc/redis.conf --supervised systemd

ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis.conf --supervised systemd

ExecReload=/bin/kill -s HUP $MAINPID

ExecStop=/bin/kill -s QUIT $MAINPID

Type=notify

User=redis

Group=redis

RuntimeDirectory=redis

RuntimeDirectoryMode=0755

[Install]

WantedBy=multi-user.target

[root@node20 redis-4.0.14]# useradd -s /sbin/nologin -M redis

[root@node20 redis-4.0.14]# chown -R redis.redis /apps/redis/

[root@node20 redis-4.0.14]# systemctl daemon-reload

[root@node20 redis-4.0.14]# systemctl start redis

[root@node20 redis-4.0.14]# systemctl enable redis

Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.

[root@node20 redis-4.0.14]# ss -tnl | grep 6379

LISTEN 0 128 *:6379 *:*

[root@node20 redis-4.0.14]# ln -sv /apps/redis/bin/redis-* /usr/bin/

‘/usr/bin/redis-benchmark’ -> ‘/apps/redis/bin/redis-benchmark’

‘/usr/bin/redis-check-aof’ -> ‘/apps/redis/bin/redis-check-aof’

‘/usr/bin/redis-check-rdb’ -> ‘/apps/redis/bin/redis-check-rdb’

‘/usr/bin/redis-cli’ -> ‘/apps/redis/bin/redis-cli’

‘/usr/bin/redis-sentinel’ -> ‘/apps/redis/bin/redis-sentinel’

‘/usr/bin/redis-server’ -> ‘/apps/redis/bin/redis-server’

#主机node21安装redis服务

[root@node21 ~]# yum -y install gcc gcc-c++

[root@node21 ~]# cd /usr/local/src/

[root@node21 src]# ls

redis-4.0.14.tar.gz

[root@node21 src]# tar -zxvf redis-4.0.14.tar.gz

[root@node21 src]# cd redis-4.0.14

[root@node21 src]# make

[root@node21 redis-4.0.14]# make PREFIX=/apps/redis install

[root@node21 redis-4.0.14]# mkdir /apps/redis/{etc,logs,data,run}

[root@node21 redis-4.0.14]# cp redis.conf /apps/redis/etc/

[root@node21 redis-4.0.14]# vim /apps/redis/etc/redis.conf

bind 0.0.0.0

protected-mode no

requirepass 123456

masterauth 123456

slaveof 10.0.0.20 6379

logfile "/apps/redis/logs/redis.log"

dir /apps/redis/data

[root&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值