2

基本知识

Sentinel是Redis的高可用性解决方案。一个或多个Sentinel组成的Sentinel系统可以监控任意多个主服务器从而实现高可用的需求。
例如:
clipboard.png

此时Server 1 掉线:

clipboard.png

Sentinel系统会自动选出某一Server成为主节点:

clipboard.png

官方文档

为什么不问问神奇的海螺呢:https://redis.io/topics/sentinel

环境模拟

这里模拟一个Redis集群。

搭建主节点

先搭建主节点:

$ vim redis-master.conf
...
port 6380   #  修改端口
logfile redis-master.conf
pidfile /var/run/redis_6380.pid    # 修改pidfile
...

然后启动主节点:

$ redis-server redis-master.conf

可以查看下主节点相关信息:

$ redis-cli -p 6380 info Replication

搭建从节点

这里搭建两个从节点:

$ vim redis-slave-1.conf
port 6381
logfile redis-slave-1.conf
pidfile /var/run/redis_6381.pid 
slaveof 127.0.0.1 6380
...
$ vim redis-slave-2.conf
port 6382
logfile redis-slave-2.conf
pidfile /var/run/redis_6382.pid 
slaveof 127.0.0.1 6380
...

运行从节点:

$ redis-server redis-slave-1.conf
$ redis-server redis-slave-2.conf

Sentinel系统配置

单个Sentinel配置

先配置Sentinel:

$ cp sentinel.conf config/Sentinel/sentinel-26379.conf    #  复制模板
$ vim sentinel-26379.conf 
port 26379
daemonize yes   # 以守护进程方式启动
dir ./
# logfile 26379.log
sentinel monitor mymaster 127.0.0.1 6380 2    
sentinel down-after-milliseconds mymaster 30000   # 判断失败时间为30000毫秒
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

这里不需要配置从节点,Sentinel会自动获取从节点信息。
启动:

$ redis-sentinel sentinel-26379.conf
$ redis-cli -p 26379 info 

clipboard.png

可以看到搭建成功了。
这里重新去查看一下配置文件:

$ cat sentinel-26379.conf

clipboard.png

可以看到配置文件重新生成从节点的信息。

集群的配置

$ sed 's/26379/26380/g' sentinel-26379.conf > sentinel-26380.conf
$ sed 's/26379/26381/g' sentinel-26379.conf > sentinel-26381.conf

启动:

$ redis-sentinel sentinel-26380.conf
$ redis-sentinel sentinel-26381.conf

查看一下任意一台的配置信息:

$ redis-cli -p 26379 info

clipboard.png

已经发现了有三台sentinel

故障转移

可以看到现在集群情况:

clipboard.png

假如现在master掉了之后:

$ kill -9 6204

等一段时间再去查看6381的信息:

$ redis-cli -p 6381 info Replication

clipboard.png

此时6381已成为新的主节点了。

运维相关

节点运维

因为某些原因可能要对某一节点进行下线。只要在任意Sentinel上执行即可:

> sentinel failover <masterName>

例如

如果想要对某一节点上线,直接让某一redis执行slaveof后,sentinel会自动进行发现。


BrownFly
18 声望1 粉丝

信息安全协会成员、Vidar-Team成员