Redis : Redis Sentinel の設定2016/07/25 |
Redis Sentinel による Redis サーバーの監視設定です。
例として、マスターノード 1台と 2台のスレーブノードでレプリケーションを構成した環境へ Sentinel サーバーを 1台追加して設定します。
| +----------------------+ | +----------------------+ | [ Redis Sentinel ] |10.0.0.40 | 10.0.0.30| [ Redis Master ] | | mon.srv.world +----------+----------+ dlp.srv.world | | | | | | +----------------------+ | +----------------------+ | +----------------------+ | +----------------------+ | [ Redis Slave#1 ] |10.0.0.51 | 10.0.0.52| [ Redis Slave#2 ] | | node01.srv.world +----------+----------+ node02.srv.world | | | | | +----------------------+ +----------------------+ |
[1] |
こちらを参考にマスター/スレーブ全ノードでレプリケーション構成を設定しておきます。
注意点として Sentinel により自動フェイルオーバーした際は、スレーブがマスターに、マスターがスレーブに切り替わるため、接続/認証パスワードの設定は全ノードで合わせておく必要があります。 また SELinux を有効にしている場合は、マスター側もスレーブ側と同じポリシー許可の設定を実施しておく必要があります。 |
[2] | Sentinel による監視設定は、障害発生時には Sentinel により各ノードの redis.conf の書き換えが実行されてマスター/スレーブが切り替わるため、基本的には事前にマスター/スレーブ上での手動設定変更は必要ありませんが、 SELinux を有効にしている場合は、redis.conf を変更するための許可ルールの追加が必要になります。 以下の許可ルールの追加をマスター/スレーブ全ノードで実施します。 |
[root@dlp ~]#
vi redis_ha.te # 以下の内容で新規作成 module redis_ha 1.0; require { type etc_t; type redis_t; class file write; } #============= redis_t ============== allow redis_t etc_t:file write; # 中間ファイル生成 [root@dlp ~]# checkmodule -m -M -o redis_ha.mod redis_ha.te checkmodule: loading policy configuration from redis_ha.te checkmodule: policy configuration loaded checkmodule: writing binary representation (version 17) to redis_ha.mod # 中間ファイルからモジュール生成 [root@dlp ~]# semodule_package --outfile redis_ha.pp --module redis_ha.mod # モジュールインストール [root@dlp ~]# semodule -i redis_ha.pp |
[3] | Sentinel サーバーの設定です。 |
# EPELからインストール
[root@mon ~]#
yum --enablerepo=epel -y install redis
[root@mon ~]#
vi /etc/redis-sentinel.conf # 53行目:変更 [sentinel monitor (任意の名称) (マスターのIP) (マスターのポート) (Quorum)] # Quorum ⇒ 指定した数の Sentinel サーバーがマスターがダウンしたと判断した場合にフェイルオーバーする sentinel monitor mymaster 10.0.0.30 6379 1
# 73行目:マスターサーバーの認証パスワードを追記
sentinel auth-pass mymaster password
# 82行目:マスターサーバーがダウンしたと判断する時間(デフォルトは30秒)
sentinel down-after-milliseconds mymaster 30000
# 90行目:フェイルオーバー中に設定変更するスレーブの数 sentinel parallel-syncs mymaster 1 systemctl start redis-sentinel [root@mon ~]# systemctl enable redis-sentinel |
[4] | Sentinel サーバーで SELinux を有効にしている場合は、許可ルールの追加が必要です。 |
[root@mon ~]# semanage port -a -t redis_port_t -p tcp 26379
[root@mon ~]#
vi redis_sentinel.te # 以下の内容で新規作成 module redis_sentinel 1.0; require { type redis_port_t; type etc_t; type redis_t; class tcp_socket name_connect; class file write; } #============= redis_t ============== allow redis_t redis_port_t:tcp_socket name_connect; allow redis_t etc_t:file write; # 中間ファイル生成 [root@mon ~]# checkmodule -m -M -o redis_sentinel.mod redis_sentinel.te checkmodule: loading policy configuration from redis_sentinel.te checkmodule: policy configuration loaded checkmodule: writing binary representation (version 17) to redis_sentinel.mod # 中間ファイルからモジュール生成 [root@mon ~]# semodule_package --outfile redis_sentinel.pp --module redis_sentinel.mod # モジュールインストール [root@mon ~]# semodule -i redis_sentinel.pp |
[5] | 以上で設定完了です。Sentinel サーバーで状態の確認をします。 また、マスターノードの Redis を手動で停止させる等して、正常にフェイルオーバーするか等々も確認しておくよいでしょう。 |
[root@mon ~]# redis-cli -p 26379 # 「mymaster」のマスターノード確認 127.0.0.1:26379> sentinel get-master-addr-by-name mymaster 1) "10.0.0.30" 2) "6379" # 「mymaster」のマスターノードの詳細 127.0.0.1:26379> sentinel master mymaster 1) "name" 2) "mymaster" 3) "ip" 4) "10.0.0.30" 5) "port" 6) "6379" ..... ..... # 「mymaster」のスレーブ確認 127.0.0.1:26379> sentinel slaves mymaster 1) 1) "name" 2) "10.0.0.52:6379" 3) "ip" 4) "10.0.0.52" 5) "port" 6) "6379" ..... ..... 2) 1) "name" 2) "10.0.0.51:6379" 3) "ip" 4) "10.0.0.51" 5) "port" 6) "6379" ..... ..... |
Sponsored Link |