三:redis哨兵モード主従故障切替を実現する2

39779 ワード

本編は前編に続いてredis哨兵の配置練習実験を行い、一般的な経典の哨兵は3つのノード(なぜ3つのノードで、2つのノードではない)の後に専門的に文章を書いてこの問題を分析する必要がある.もう1台の仮想マシンでredisサービスをインストールすることができます.この仮想マシンは起動例を必要としません.哨兵を起動すればいいです.私はここで2台のマシンを使ってテストするだけです.生産上は分離できます.zys-zk 01で哨兵ポート5000を起動し、zys-zk 02で2つの哨兵ノードポートを起動すればそれぞれ50015002になります.これにより、3つのノードの効果をシミュレートすることができます.
  • 哨兵配置書類
  • sentinel.conf
    最小の配置各哨兵は複数のmaser-slavesの主従アーキテクチャを監視することができます.あなたの会社では、異なるプロジェクトのために、複数のmaster-slavesのredis主従クラスタを配置しています.同じ哨兵クラスタから、異なる複数のredis主従クラスタを監視することができます.あなた自身が各redis主従クラスタに論理的な名前を割り当てることができます.
    sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 60000 sentinel failover-timeout mymaster 180000 sentinel parallel-syncs mymaster 1
    sentinel monitor resque 192.168.1.3 6380 4 sentinel down-after-milliseconds resque 10000 sentinel failover-timeout resque 180000 sentinel parallel-syncs resque 5
    sentinel monitor mymaster 127.0.0.1 6379
    このような構成と同様に、1つのmasterのモニタリングを指定し、モニタリングのmasterに指定する名前を指定します.後で分散クラスタアーキテクチャで説明するので、複数のmasterをデータ分割に構成できます.
    sentinel down-after-milliseconds mymaster 60000 sentinel failover-timeout mymaster 180000 sentinel parallel-syncs mymaster 1
    上の3つの構成は、いずれも監視するmasterに対して構成されており、上に割り当てられた名前を指定すればよい.
    上の構成では、2つのmaster nodeを監視しています.
    これは最小の哨兵配置で、master-slaveの故障移転が発生したり、新しい哨兵プロセスが哨兵クラスタに参加したりすると、哨兵は自動的に自分の配置ファイルを更新します.
    sentinel monitor master-group-name hostname port quorum
    quorumの解釈は以下の通りです.
    (1)少なくとも何人の哨兵が一致して同意しなければならないか、masterプロセスが停止したか、slaveプロセスが停止したか、または故障移転操作を開始する(2)quorumは故障を識別するために使用され、本当に故障移転を実行する場合、やはり哨兵集団で選挙を実行し、1人の哨兵プロセスを選挙して故障移転操作を実行する(3)5人の哨兵がいると仮定し、quorumは2を設定し、では、5人の哨兵のうち2人がmasterが切れたと思っている場合.2人の哨兵のうち1人は選挙を行い、1人の哨兵を選挙し、故障移転を実行する.5人の哨兵のうち3人が運行している場合、故障移転は許可されます
    down-after-milliseconds、何ミリ秒を超えて1つのredisインスタンスと接続が切れたか、哨兵はこのredisインスタンスが切れたと思っているかもしれません.
    parallel-syncs、新しいmasterは切り替えないでください後に、同時にどれだけのslaveが新しいmasterに接続することに切り替えられて、再び同期をして、数字はもっと低くて、時間が多ければ多いほどあなたのredisが1つのmasterで、4つのslaveはそれからmasterがダウンして、4つのslaveの中で1つがmasterに切り替えて、残りの3つのslaveは新しいmasterの上に掛けなければなりませんこの時、parallel-syncsが1であれば、3つのslaveは新しいマスターの上に1つずつ掛けて、1つは掛け終わって、そして新しいマスターsyncからデータを掛け終わった後、もう1つはparallel-syncsが3であれば、一度にすべてのslaveを新しいマスターの上にfailover-timeoutに掛けて、フェイルオーバを実行するtimeoutがタイムアウトする時間が長い.
  • 哨兵の配置
  • 哨兵のデフォルトは26379ポートで、デフォルトは他の機械と指定ポートで連通することができず、zys-zk 01にローカルでしかアクセスできません.
    [root@zys-zk01 ~]# mkdir /etc/sentinal
    [root@zys-zk01 ~]# mkdir -p /var/sentinal/5000
    [root@zys-zk01 ~]# vim /etc/sentinal/5000.conf
    
    port 5000
    #bind 192.168.31.187
    protected-mode no
    dir /var/sentinal/5000
    sentinel monitor mymaster 192.168.1.232 6379 2
    sentinel down-after-milliseconds mymaster 30000
    sentinel failover-timeout mymaster 60000
    sentinel parallel-syncs mymaster 1

    zys-zk 02で:
    [root@zys-zk02 redis]# mkdir /etc/sentinal
    [root@zys-zk02 redis]# mkdir -p /var/sentinal/5001
    [root@zys-zk02 redis]# mkdir -p /var/sentinal/5002
    [root@zys-zk02 redis]# vim /etc/sentinal/5001.conf
    
    port 5001
    protected-mode no
    dir /var/sentinal/5001
    sentinel monitor mymaster 192.168.1.232 6379 2
    sentinel down-after-milliseconds mymaster 30000
    sentinel failover-timeout mymaster 60000
    sentinel parallel-syncs mymaster 1
    
    
    [root@zys-zk02 redis]# vim /etc/sentinal/5002.conf
    port 5002
    protected-mode no
    dir /var/sentinal/5002
    sentinel monitor mymaster 192.168.1.232 6379 2
    sentinel down-after-milliseconds mymaster 30000
    sentinel failover-timeout mymaster 60000
    sentinel parallel-syncs mymaster 1
  • は哨兵を起動してそれぞれ3つの哨兵プロセスを起動し、1つのクラスタを構成し、ログの出力redis-sentinel/etc/sentinal/5000を観察した.conf redis-server/etc/sentinal/5000.conf–sentinelここではバックグラウンドで起動しないで、次のログを見てください:
  • [root@zys-zk01 ~]# /usr/local/bin/redis-sentinel /etc/sentinal/5000.conf 
    2827:X 17 Jul 16:58:50.320 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                    _._                                                  
               _.-``__ ''-._                                             
          _.-``    `.  `_.  ''-._           Redis 3.2.8 (00000000/0) 64 bit
      .-`` .-```.  ```\/    _.,_ ''-._                                   
     (    '      ,       .-`  | `,    )     Running in sentinel mode
     |`-._`-...-` __...-.``-._|'` _.-'|     Port: 5000
     |    `-._   `._    /     _.-'    |     PID: 2827
      `-._    `-._  `-./  _.-'    _.-'                                   
     |`-._`-._    `-.__.-'    _.-'_.-'|                                  
     |    `-._`-._        _.-'_.-'    |           http://redis.io        
      `-._    `-._`-.__.-'_.-'    _.-'                                   
     |`-._`-._    `-.__.-'    _.-'_.-'|                                  
     |    `-._`-._        _.-'_.-'    |                                  
      `-._    `-._`-.__.-'_.-'    _.-'                                   
          `-._    `-.__.-'    _.-'                                       
              `-._        _.-'                                           
                  `-.__.-'                                               
    
    2827:X 17 Jul 16:58:50.322 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    2827:X 17 Jul 16:58:50.333 # Sentinel ID is fec51ceca1905577d0fa120fbf328e909a970950
    2827:X 17 Jul 16:58:50.333 # +monitor master mymaster 192.168.1.232 6379 quorum 2
    2827:X 17 Jul 16:58:50.334 * +slave slave 192.168.1.233:6380 192.168.1.233 6380 @ mymaster 192.168.1.232 6379
    
    [root@zys-zk02 redis]# /usr/local/bin/redis-sentinel /etc/sentinal/5001.conf 
    2168:X 17 Jul 17:00:25.330 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                    _._                                                  
               _.-``__ ''-._                                             
          _.-``    `.  `_.  ''-._           Redis 3.2.8 (00000000/0) 64 bit
      .-`` .-```.  ```\/    _.,_ ''-._                                   
     (    '      ,       .-`  | `,    )     Running in sentinel mode
     |`-._`-...-` __...-.``-._|'` _.-'|     Port: 5001
     |    `-._   `._    /     _.-'    |     PID: 2168
      `-._    `-._  `-./  _.-'    _.-'                                   
     |`-._`-._    `-.__.-'    _.-'_.-'|                                  
     |    `-._`-._        _.-'_.-'    |           http://redis.io        
      `-._    `-._`-.__.-'_.-'    _.-'                                   
     |`-._`-._    `-.__.-'    _.-'_.-'|                                  
     |    `-._`-._        _.-'_.-'    |                                  
      `-._    `-._`-.__.-'_.-'    _.-'                                   
          `-._    `-.__.-'    _.-'                                       
              `-._        _.-'                                           
                  `-.__.-'                                               
    
    2168:X 17 Jul 17:00:25.332 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    2168:X 17 Jul 17:00:25.343 # Sentinel ID is 5a8b105ed5416ead28de3ef31a3f7231e8db1cdd
    2168:X 17 Jul 17:00:25.343 # +monitor master mymaster 192.168.1.232 6379 quorum 2
    2168:X 17 Jul 17:00:25.345 * +slave slave 192.168.1.233:6380 192.168.1.233 6380 @ mymaster 192.168.1.232 6379
    2168:X 17 Jul 17:00:25.506 * +sentinel sentinel fec51ceca1905577d0fa120fbf328e909a970950 192.168.1.232 5000 @ mymaster 192.168.1.232 6379
    
    [root@zys-zk02 ~]# /usr/local/bin/redis-sentinel  /etc/sentinal/5002.conf 
    2204:X 17 Jul 17:01:16.838 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                    _._                                                  
               _.-``__ ''-._                                             
          _.-``    `.  `_.  ''-._           Redis 3.2.8 (00000000/0) 64 bit
      .-`` .-```.  ```\/    _.,_ ''-._                                   
     (    '      ,       .-`  | `,    )     Running in sentinel mode
     |`-._`-...-` __...-.``-._|'` _.-'|     Port: 5002
     |    `-._   `._    /     _.-'    |     PID: 2204
      `-._    `-._  `-./  _.-'    _.-'                                   
     |`-._`-._    `-.__.-'    _.-'_.-'|                                  
     |    `-._`-._        _.-'_.-'    |           http://redis.io        
      `-._    `-._`-.__.-'_.-'    _.-'                                   
     |`-._`-._    `-.__.-'    _.-'_.-'|                                  
     |    `-._`-._        _.-'_.-'    |                                  
      `-._    `-._`-.__.-'_.-'    _.-'                                   
          `-._    `-.__.-'    _.-'                                       
              `-._        _.-'                                           
                  `-.__.-'                                               
    
    2204:X 17 Jul 17:01:16.843 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    2204:X 17 Jul 17:01:16.846 # Sentinel ID is 3a886fa2b0eb8dd114b99c94b5828753bc16d4c3
    2204:X 17 Jul 17:01:16.846 # +monitor master mymaster 192.168.1.232 6379 quorum 2
    2204:X 17 Jul 17:01:16.847 * +slave slave 192.168.1.233:6380 192.168.1.233 6380 @ mymaster 192.168.1.232 6379
    2204:X 17 Jul 17:01:17.173 * +sentinel sentinel fec51ceca1905577d0fa120fbf328e909a970950 192.168.1.232 5000 @ mymaster 192.168.1.232 6379
    2204:X 17 Jul 17:01:18.558 * +sentinel sentinel 5a8b105ed5416ead28de3ef31a3f7231e8db1cdd 192.168.1.233 5001 @ mymaster 192.168.1.232 6379
    
    

    ログの歩哨はすべて正常に起動して、私達のバックグラウンドは起動して、それから歩哨の状態を検査することを見ます
    5000です.conf,5001.conf,5002.confプロファイルには、daemonize yes(バックグラウンドプロセスモード起動)の行が追加されています.
    [root@zys-zk01 ~]# /usr/local/bin/redis-sentinel /etc/sentinal/5000.conf 
    [root@zys-zk01 ~]# ps -ef|grep redis
    root       1753      1  0 09:52 ?        00:00:26 /usr/local/bin/redis-server *:6379              
    root       2871      1  0 17:06 ?        00:00:00 /usr/local/bin/redis-sentinel *:5000 [sentinel]      
    root       2875   1864  0 17:06 pts/0    00:00:00 grep redis
    
    [root@zys-zk02 redis]# /usr/local/bin/redis-sentinel /etc/sentinal/5001.conf 
    [root@zys-zk02 redis]# /usr/local/bin/redis-sentinel /etc/sentinal/5002.conf 
    [root@zys-zk02 redis]# ps -ef|grep redis
    root       2086      1  0 16:26 ?        00:00:03 /usr/local/bin/redis-server *:6380              
    root       2222      1  0 17:08 ?        00:00:00 /usr/local/bin/redis-sentinel *:5001 [sentinel]      
    root       2226      1  0 17:08 ?        00:00:00 /usr/local/bin/redis-sentinel *:5002 [sentinel]      
    root       2231   2034  0 17:09 pts/0    00:00:00 grep redis
    

    歩哨の状態を確認する:
    [root@zys-zk01 ~]# /usr/local/bin/redis-cli -h 192.168.1.232 -p 5000
    192.168.1.232:5000> sentinel master mymaster
     1) "name"
     2) "mymaster"
     3) "ip"
     4) "192.168.1.232"
     5) "port"
     6) "6379"
     7) "runid"
     8) "59d3b326a792799ad2ca25bdba36337359b50f3a"
     9) "flags"
    10) "master"
    11) "link-pending-commands"
    12) "0"
    13) "link-refcount"
    14) "1"
    15) "last-ping-sent"
    16) "0"
    17) "last-ok-ping-reply"
    18) "96"
    19) "last-ping-reply"
    20) "96"
    21) "down-after-milliseconds"
    22) "30000"
    23) "info-refresh"
    24) "6834"
    25) "role-reported"
    26) "master"
    27) "role-reported-time"
    28) "187557"
    29) "config-epoch"
    30) "0"
    31) "num-slaves"
    32) "1"
    33) "num-other-sentinels"
    34) "2"
    35) "quorum"
    36) "2"
    37) "failover-timeout"
    38) "60000"
    39) "parallel-syncs"
    40) "1"
    192.168.1.232:5000>
    192.168.1.232:5000> SENTINEL slaves mymaster
    1)  1) "name"
        2) "192.168.1.233:6380"
        3) "ip"
        4) "192.168.1.233"
        5) "port"
        6) "6380"
        7) "runid"
        8) "8558cedb4a89829670696d44233f1e6cb603e2ab"
        9) "flags"
       10) "slave"
       11) "link-pending-commands"
       12) "0"
       13) "link-refcount"
       14) "1"
       15) "last-ping-sent"
       16) "0"
       17) "last-ok-ping-reply"
       18) "725"
       19) "last-ping-reply"
       20) "725"
       21) "down-after-milliseconds"
       22) "30000"
       23) "info-refresh"
       24) "5101"
       25) "role-reported"
       26) "slave"
       27) "role-reported-time"
       28) "236056"
       29) "master-link-down-time"
       30) "0"
       31) "master-link-status"
       32) "ok"
       33) "master-host"
       34) "192.168.1.232"
       35) "master-port"
       36) "6379"
       37) "slave-priority"
       38) "100"
       39) "slave-repl-offset"
       40) "69835"
    192.168.1.232:5000>
    192.168.1.232:5000> SENTINEL sentinels mymaster
    1)  1) "name"
        2) "5a8b105ed5416ead28de3ef31a3f7231e8db1cdd"
        3) "ip"
        4) "192.168.1.233"
        5) "port"
        6) "5001"
        7) "runid"
        8) "5a8b105ed5416ead28de3ef31a3f7231e8db1cdd"
        9) "flags"
       10) "sentinel"
       11) "link-pending-commands"
       12) "0"
       13) "link-refcount"
       14) "1"
       15) "last-ping-sent"
       16) "0"
       17) "last-ok-ping-reply"
       18) "142"
       19) "last-ping-reply"
       20) "142"
       21) "down-after-milliseconds"
       22) "30000"
       23) "last-hello-message"
       24) "391"
       25) "voted-leader"
       26) "?"
       27) "voted-leader-epoch"
       28) "0"
    2)  1) "name"
        2) "3a886fa2b0eb8dd114b99c94b5828753bc16d4c3"
        3) "ip"
        4) "192.168.1.233"
        5) "port"
        6) "5002"
        7) "runid"
        8) "3a886fa2b0eb8dd114b99c94b5828753bc16d4c3"
        9) "flags"
       10) "sentinel"
       11) "link-pending-commands"
       12) "0"
       13) "link-refcount"
       14) "1"
       15) "last-ping-sent"
       16) "0"
       17) "last-ok-ping-reply"
       18) "142"
       19) "last-ping-reply"
       20) "142"
       21) "down-after-milliseconds"
       22) "30000"
       23) "last-hello-message"
       24) "768"
    

    OK,3ノードの哨兵配置とテストは,ここまで実験テストが完了したが,次編ではspringとの統合による開発について主に紹介する.