redis的哨兵机制

        在"redis的主从配置"这篇文章最后,我这样写道“4.如果主挂掉了,我们知道6380,6381的会以slave的身份静默待命,如果此时我在6380上执行slaveof no one,可以把80变为主,在6381上执行slaveof  192.168.23.112  6380,那么以6381为端口的redis就“改换门庭”了,变成了6380的从,6379再启动的话也只是个独立的redis服务。有点反客为主的意思。”。本篇文章说的是redis的哨兵,哨兵的英文单词是sentinel,那么redis的哨兵机制是什么呢?说白了,就是上面说的“反客为主”的自动化,哨兵帮你做的就是在主挂掉之后,自己选择一台从变为master,唯一不同的是6379再启动后就变为新master的slave了,而不是手动设置时再启动6379是一个独立的redis服务。

        先看一下三个redis服务的状态,可以看到以6379为端口的redis是master,6380和6381是slave:

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.23.112,port=6380,state=online,offset=4187,lag=1
slave1:ip=192.168.23.112,port=6381,state=online,offset=4187,lag=1
master_repl_offset:4187
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:4186

我们来配置redis的哨兵:1.在配置文件所在目录建一个 sentinel.conf(名字不能错),里面的内容是:

#node112是master主redis所在机器的hostname,对应ip为192.168.23.112
#主master redis使用的端口是6379,1的意思是剩下的slave谁的票数大于等于1就被推举为master
sentinel monitor node112  192.168.23.112  6379 1

2.启动哨兵:

./redis-sentinel sentinel.conf

如下:

image.png

哨兵的验证:

在master上执行shutdown关闭服务:

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.23.112,port=6380,state=online,offset=27284,lag=0
slave1:ip=192.168.23.112,port=6381,state=online,offset=27284,lag=0
master_repl_offset:27284
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:27283
127.0.0.1:6379> shutdown
not connected> exit
[root@node112 /usr/local/redis/bin]#

2.观察哨兵的日志变化,可以看到已经切换成功:

image.png

3.在6380的redis和6381的redis客户端分别查看主从状态,可以看到6380由原来是6379的从变成了master,而6381由原来的是6379的从变成了现在是6380的从,这些都是哨兵帮你做的:

6380上的主从状态:

127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.23.112,port=6381,state=online,offset=56836,lag=1
master_repl_offset:56978
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:56977
127.0.0.1:6380>

6381上的主从状态:

127.0.0.1:6381> info replication
# Replication
role:slave
master_host:192.168.23.112
master_port:6380
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:57844
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6381>

4.启动原来的master(以6379为端口的redis),并查看其状态,可以看到自动变成了新master6380的slave:

[root@node112 /usr/local/redis/bin]#./redis-server redis.conf 
[root@node112 /usr/local/redis/bin]#./redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.23.112
master_port:6380
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1
master_link_down_since_seconds:1515056870
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379>

上边我启动哨兵之后,redis的哨兵是默认前台启动的,如下:

image.png

就像默认的redis服务启动的时候一样,这样的话,我不得不再打开一个ssh客户端来进行操作,我怎么让哨兵在后台启动呢?先看一下我们的哨兵配置文件sentinel.conf的内容,只有一句话:

sentinel monitor node112  192.168.23.112  6379 1

只要再加上下面这两句就可以后台启动redis的哨兵了:

daemonize yes
logfile "/var/log/sentinel_log.log"

启动哨兵,可以看到现在已经是正常的后台启动了,在/var/log/目录下也能找到sentinel_log.log日志文件,通过查看该文件内容可知现在哨兵是正常启动的:

image.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值