暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

redis-sentinel集群架构

SRE运维实践 2017-03-28
172

1前言

         在使用redis主从模式的时候,在进行需要恢复的时候,都需要人工的进行干预,从而可以考虑使用redissentinel集群的架构,如下所示:


         在配置sentinel的时候,最好是采用奇数个,不采用一个sentinel是怕单点故障,不采用偶数个是怕在进行选举节点的时候无法进行选举,或者是产生故障的时候,有一个sentinel处于网络中断的情况,从而使用奇数个。

         使用sentinel的好处是:监控redis,能够监控到redis主从的运行情况;提醒,在redis服务出现问题的时候,可以向管理员发送通知;自动故障转移(automatic failover),也就是做到redis主从复制模型中不能自动切换的功能。

 

2安装配置

         配置文件的内容如下所示:

[redisuser@RHAN redis]$ cat sentinel.confsentinel配置文件

port 26379

 

# sentinel announce-ip 172.168.1.78

# sentinel announce-port <port>

dir "/tmp"

 

sentinel monitor mymaster 172.168.1.77 6379 1

sentinel down-after-milliseconds mymaster 6000

sentinel failover-timeout mymaster 1800

sentinel parallel-syncs mymaster 1

         端口表示默认的监听端口,默认的监听端口为26379.

         monitor表示监控的master服务器地址和端口,mymaster是用来表示这个redis主服务器的,sentinel可以监控多个redis主从服务器,每个主服务使用一个不同的名称,最后面的1表示当有一个sentinel发现redis服务DOWN之后,那么就会进行主备切换。

        

3启动测试

         sentinel启动的时候,先启动redis的主服务,然后启动redis的从服务,然后再依次启动sentinel,如下所示:

[redisuser@RHAN redis]$ opt/redis/bin/redis-server/opt/redis/redis.conf启动redismaster服务

[redisuser@RHANCL redis]$ /opt/redis/bin/redis-server/opt/redis/redis.conf启动redis slave服务

[redisuser@RHAN redis]$ /opt/redis/bin/redis-sentinelsentinel.conf 启动sentinel服务

               _._                                                 

          _.-``__ ''-._                                            

     _.-``    `.  `_. ''-._           Redis 2.8.24(00000000/0) 64 bit

  .-``.-```.  ```\/    _.,_ ''-._                                  

 (    '     ,       .-`  | `,   )     Running in sentinel mode

 |`-._`-...-`__...-.``-._|'` _.-'|     Port: 26379

 |    `-._  `._    /     _.-'   |     PID: 3018

  `-._    `-._ `-./  _.-'    _.-'                                  

 |`-._`-._    `-.__.-'   _.-'_.-'|                                 

 |    `-._`-._        _.-'_.-'    |          http://redis.io       

  `-._    `-._`-.__.-'_.-'    _.-'                                  

 |`-._`-._    `-.__.-'   _.-'_.-'|                                 

 |    `-._`-._        _.-'_.-'    |                                 

  `-._    `-._`-.__.-'_.-'    _.-'                                  

      `-._    `-.__.-'   _.-'                                      

         `-._        _.-'                                          

             `-.__.-'                                              

 

[3018] 26 Mar 11:40:50.183 # Sentinel runid isa131f20805c613b6bb702876fb87063c058b3f26

[3018] 26 Mar 11:40:50.183 # +monitor master mymaster 172.168.1.78 6379 quorum 2

[3018] 26 Mar 11:40:56.184 # +sdown sentinel172.168.1.78:26379 172.168.1.78 26379 @ mymaster 172.168.1.78 6379

[3018] 26 Mar 11:41:01.224 * +convert-to-slave slave172.168.1.77:6379 172.168.1.77 6379 @ mymaster 172.168.1.78 6379

[3018] 26 Mar 11:41:19.423 # -sdown sentinel172.168.1.78:26379 172.168.1.78 26379 @ mymaster 172.168.1.78 6379

[3018] 26 Mar 11:41:21.373 * -dup-sentinel mastermymaster 172.168.1.78 6379 #duplicate of 172.168.1.78:26379 ored9cc3f1fcb26a099e4a22613278b08c73a1fdf3

[3018] 26 Mar 11:41:21.375 * +sentinel sentinel172.168.1.78:26379 172.168.1.78 26379 @ mymaster 172.168.1.78 6379

[redisuser@RHANCL redis]$/opt/redis/bin/redis-sentinel sentinel.conf 启动另外一个sentinel服务

               _._                                                 

          _.-``__ ''-._                                             

     _.-``    `.  `_. ''-._           Redis 2.8.24(00000000/0) 64 bit

  .-``.-```.  ```\/    _.,_ ''-._                                  

 (    '     ,       .-`  | `,   )     Running in sentinel mode

 |`-._`-...-`__...-.``-._|'` _.-'|     Port: 26379

 |    `-._  `._    /     _.-'   |     PID: 7859

  `-._    `-._ `-./  _.-'    _.-'                                  

 |`-._`-._    `-.__.-'   _.-'_.-'|                                 

 |    `-._`-._        _.-'_.-'    |          http://redis.io       

  `-._    `-._`-.__.-'_.-'    _.-'                                  

 |`-._`-._    `-.__.-'   _.-'_.-'|                                 

 |    `-._`-._        _.-'_.-'    |                                 

  `-._    `-._`-.__.-'_.-'    _.-'                                  

      `-._    `-.__.-'   _.-'                                      

         `-._        _.-'                                          

             `-.__.-'                                               

 

[7859] 26 Mar 11:41:45.412 # Sentinel runid ised9cc3f1fcb26a099e4a22613278b08c73a1fdf3

[7859] 26 Mar 11:41:45.412 # +monitor master mymaster172.168.1.78 6379 quorum 2

[7859] 26 Mar 11:41:45.519 * -dup-sentinel mastermymaster 172.168.1.78 6379 #duplicate of 172.168.1.77:26379 ora131f20805c613b6bb702876fb87063c058b3f26

[7859] 26 Mar 11:41:45.519 * +sentinel sentinel172.168.1.77:26379 172.168.1.77 26379 @ mymaster 172.168.1.78 6379

[redisuser@RHAN bin]$ ./redis-cli -p 26379 查看sentinel信息,注意sentinel的默认端口为26379,否则无法使用sentinel命令

127.0.0.1:26379> sentinel masters

1)  1)"name"

    2)"mymaster"

    3)"ip"

    4) "172.168.1.78"

    5)"port"

    6)"6379"

    7)"runid"

    8)"a1a3ba7f77484bc11d9a9e7ca5abe6c3d8494ae4"

    9)"flags"

   10) "master"

   11)"pending-commands"

   12)"0"

   13) "last-ping-sent"

   14)"0"

   15)"last-ok-ping-reply"

   16)"44"

   17)"last-ping-reply"

   18)"44"

   19)"down-after-milliseconds"

   20)"6000"

   21)"info-refresh"

   22)"9552"

   23)"role-reported"

   24)"master"

   25)"role-reported-time"

   26)"321842"

   27)"config-epoch"

   28)"265"

   29)"num-slaves"

   30)"1"

   31)"num-other-sentinels"

   32)"1"

   33)"quorum"

   34)"2"

   35)"failover-timeout"

   36)"1800"

   37)"parallel-syncs"

   38)"1"

         主备服务进行切换日志,如下所示:

[3018] 26 Mar 12:20:24.193 # +sdown master mymaster 172.168.1.786379

[3018] 26 Mar 12:20:24.249 # +odown master mymaster 172.168.1.78 6379 #quorum2/22sentinel均认为master挂掉

[3018] 26 Mar 12:20:24.250 # +new-epoch 266

[3018] 26 Mar 12:20:24.250 # +try-failover mastermymaster 172.168.1.78 6379

[3018] 26 Mar 12:20:24.275 # +vote-for-leadera131f20805c613b6bb702876fb87063c058b3f26 266投票选举出新的master

[3018] 26 Mar 12:20:24.294 # 172.168.1.78:26379 votedfor a131f20805c613b6bb702876fb87063c058b3f26 266

[3018] 26 Mar 12:20:24.338 # +elected-leader mastermymaster 172.168.1.78 6379

[3018] 26 Mar 12:20:24.338 #+failover-state-select-slave master mymaster 172.168.1.78 6379进行主备切换

[3018] 26 Mar 12:20:24.393 # +selected-slave slave172.168.1.77:6379 172.168.1.77 6379 @ mymaster 172.168.1.78 6379选择原来的slave作为新的master

[3018] 26 Mar 12:20:24.393 *+failover-state-send-slaveof-noone slave 172.168.1.77:6379 172.168.1.77 6379 @mymaster 172.168.1.78 6379(调用命令slaveof no one设置新的master主机

[3018] 26 Mar 12:20:24.459 *+failover-state-wait-promotion slave 172.168.1.77:6379 172.168.1.77 6379 @mymaster 172.168.1.78 6379

[3018] 26 Mar 12:20:24.683 # +promoted-slave slave172.168.1.77:6379 172.168.1.77 6379 @ mymaster 172.168.1.78 6379

[3018] 26 Mar 12:20:24.683 #+failover-state-reconf-slaves master mymaster 172.168.1.78 6379动态配置配置文件

[3018] 26 Mar 12:20:24.735 # +failover-end mastermymaster 172.168.1.78 6379

[3018] 26 Mar 12:20:24.735 # +switch-master mymaster172.168.1.78 6379 172.168.1.77 6379

[3018] 26 Mar 12:20:24.735 * +slave slave172.168.1.78:6379 172.168.1.78 6379 @ mymaster 172.168.1.77 6379

[3018] 26 Mar 12:20:30.791 # +sdown slave172.168.1.78:6379 172.168.1.78 6379 @ mymaster 172.168.1.77 6379

         在要将原来的redis加入集群的时候,只要将rdb文件删除即可,然后重新启动redis即可。

         切记,在每次启动redis的时候需要删除rdb文件,否则会出现加载慢,或者是数据出现老的数据,因为在启动redis的时候,首先读取的是启动目录下的rdb文件。

 

         在将redis启动之后,注意查看redis的主从关系,如下所示:

[redisuser@RHANCL bin]$ ./redis-cli

127.0.0.1:6379> info replication

# Replication

role:slave

master_host:172.168.1.77

master_port:6379

master_link_status:up

master_last_io_seconds_ago:1

master_sync_in_progress:0

slave_repl_offset:1325

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

 


文章转载自SRE运维实践,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论