redis学习笔记(六) 哨兵

1. 引子

Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。

2. 哨兵

当主节点发生故障时,Redis Sentinel能够自动完成故障发现和故障转移,并通知应用方,实现真正的高可用。示例过程如下:

屏幕快照 2019-04-11 上午10.33.11.png

从上图三个过程可以看出Redis Sentinel具备下面几个功能:

  • 监控:Redis Sentinel节点定期见检测Redis主从数据节点和其他Sentinel节点

  • 通知:Redis Sentinel节点会将故障转移的结果通知给应用方

  • 主节点故障转移:从节点晋升为主节点并维护后续的主从关系

  • 配置提供者:Redis Sentinel结构中客户端连接的是Sentinel节点集合,从中获取主节点信息

3. 安装与部署

3.1 部署主从复制节点

  • 首先部署一个主节点,端口号为6379,使用配置文件如下:

    port 6379
    daemonize yes
    logfile "/Users/yubuyun/tools/redis-4.0.8/6379.log"
    dbfilename "dump-6379.rdb"
    dir "/Users/yubuyun/tools/redis-4.0.8/data/"
    

    然后启动:

    ./redis-server ../redis-6379.conf 
    
  • 接着启动两个从节点,端口号分别为6380,6381,配置文件分别为:

    port 6380
    daemonize yes
    logfile "/Users/yubuyun/tools/redis-4.0.8/6380.log"
    dbfilename "dump-6380.rdb"
    dir "/Users/yubuyun/tools/redis-4.0.8/data/"
    slaveof 127.0.0.1 6379
    
    port 6381
    daemonize yes
    logfile "/Users/yubuyun/tools/redis-4.0.8/6381.log"
    dbfilename "dump-6381.rdb"
    dir "/Users/yubuyun/tools/redis-4.0.8/data/"
    slaveof 127.0.0.1 6379
    

    其中slaveof属性表示他们是6379的从节点。

    分别启动这两个从节点:

    ./redis-server ../redis-6380.conf 
    ./redis-server ../redis-6381.conf 
    
  • 主节点视角查看主从关系

启动一个客户端并查看6379节点相关信息:

./redis-cli -h 127.0.0.1 -p 6379 info replication

打印结果如下:

# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=406,lag=0
slave1:ip=127.0.0.1,port=6381,state=online,offset=406,lag=1
master_replid:7b693bd5ca019687c7a3e97d5bd435bb1b5a353d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:406
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:406

看出它有两个从节点,端口号是为6380和6381。

  • 从节点视角查看主从关系

    启动一个客户端并查看6380节点的相关信息:

    ./redis-cli -h 127.0.0.1 -p 6380 info replication
    

    打印如下:

# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:840
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:7b693bd5ca019687c7a3e97d5bd435bb1b5a353d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:840
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:840

可以看到它的主节点是6379端口。

最终一个主从复制结构就形成了:

  • 屏幕快照 2019-04-11 下午3.05.33.png

3.2 部署sentinel节点

预期想部署三个哨兵节点,先看下第一个哨兵配置如下:

port 26379
daemonize yes
logfile "/Users/yubuyun/tools/redis-4.0.8/26379.log"
dir "/Users/yubuyun/tools/redis-4.0.8/data/"
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

其中:

  • sentinel monitor mymaster 127.0.0.1 6379 2 这句配置表示,此哨兵将监控localhost的6379端口,并且判断主节点失败至少要2个sentinel节点同意才行。另外给这个主节点取了个名为mymaster的别名。
  • down-after-milliseconds:每个sentinel节点定期发送ping命令来判断redis数据节点和其他节点哨兵节点是否可用,如果超过了down-after-milliseconds指定的时间没有响应,认定其不可用。
  • parallel-syncs:该参数的意思是:当主节点故障不可用时,进行故障转移时哨兵节点选举出新的主节点,其他从节点向主节点同时进行复制的个数,如parallel-syncs个数为1,表示一次只能有一个从节点去复制,即轮询,parallel-syncs为3,表示可同时有三个从节点同时进行复制。该值太大的话会给主节点机器的网络和IO造成压力。
  • Failover-timeout:故障转移超时时间

另外两个哨兵配置如下:

port 26380
daemonize yes
logfile "/Users/yubuyun/tools/redis-4.0.8/26380.log"
dir "/Users/yubuyun/tools/redis-4.0.8/data/"
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
port 26381
daemonize yes
logfile "/Users/yubuyun/tools/redis-4.0.8/26381.log"
dir "/Users/yubuyun/tools/redis-4.0.8/data/"
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

写好配置文件后就可以通过下述方法启动三个哨兵了:

./redis-sentinel ../redis-sentinel-26379.conf
./redis-sentinel ../redis-sentinel-26380.conf
./redis-sentinel ../redis-sentinel-26381.conf

如果不指定配置文件启动:./redis-sentinel。在启动的时候使用的安装包中的默认配置文件sentinel.conf。

可执行下面的命令查看第一个哨兵的信息:

./redis-cli -h 127.0.0.1 -p 26379 info sentinel

输出如下:

# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3

从打印看出,有一个主节点,两个从节点,总共有3个哨兵等信息。

最终Redis Sentinel就搭建好了。

屏幕快照 2019-04-11 下午3.56.51.png

你可能感兴趣的:(redis学习笔记(六) 哨兵)