三: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にローカルでしかアクセスできません.
zys-zk 02で:は哨兵を起動してそれぞれ3つの哨兵プロセスを起動し、1つのクラスタを構成し、ログの出力redis-sentinel/etc/sentinal/5000を観察した.conf redis-server/etc/sentinal/5000.conf–sentinelここではバックグラウンドで起動しないで、次のログを見てください:
ログの歩哨はすべて正常に起動して、私達のバックグラウンドは起動して、それから歩哨の状態を検査することを見ます
5000です.conf,5001.conf,5002.confプロファイルには、daemonize yes(バックグラウンドプロセスモード起動)の行が追加されています.
歩哨の状態を確認する:
OK,3ノードの哨兵配置とテストは,ここまで実験テストが完了したが,次編ではspringとの統合による開発について主に紹介する.
最小の配置各哨兵は複数の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がタイムアウトする時間が長い.
[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
[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との統合による開発について主に紹介する.