4.9. フェンシングの設定
フェンシング設定により、AWS クラスター上の誤動作しているノードが自動的に分離され、ノードがクラスターのリソースを消費したり、クラスターの機能が損なわれたりするのを防ぎます。
AWS クラスターでフェンシングを設定するには、複数の方法を使用できます。
- デフォルト設定の標準手順。
- 自動化に焦点を当てた、より高度な設定のための代替設定手順。
前提条件
-
fence_aws
フェンスエージェントを使用している。fence_aws
を取得するには、クラスターにresource-agents
パッケージをインストールします。
標準手順
以下の AWS メタデータクエリーを入力し、各ノードのインスタンス ID を取得します。フェンスデバイスを設定するには、これらの ID が必要です。詳細は Instance Metadata and User Data を参照してください。
# echo $(curl -s http://169.254.169.254/latest/meta-data/instance-id)
以下に例を示します。
[root@ip-10-0-0-48 ~]# echo $(curl -s http://169.254.169.254/latest/meta-data/instance-id) i-07f1ac63af0ec0ac6
以下のコマンドを実行して、フェンスデバイスを設定します。
pcmk_host_map
コマンドを使用して、RHEL ホスト名をインスタンス ID にマッピングします。以前に設定した AWS アクセスキーおよび AWS シークレットアクセスキーを使用します。# pcs stonith \ create <name> fence_aws access_key=access-key secret_key=<secret-access-key> \ region=<region> pcmk_host_map="rhel-hostname-1:Instance-ID-1;rhel-hostname-2:Instance-ID-2;rhel-hostname-3:Instance-ID-3" \ power_timeout=240 pcmk_reboot_timeout=480 pcmk_reboot_retries=4
以下に例を示します。
[root@ip-10-0-0-48 ~]# pcs stonith \ create clusterfence fence_aws access_key=AKIAI123456MRMJA secret_key=a75EYIG4RVL3hdsdAslK7koQ8dzaDyn5yoIZ/ \ region=us-east-1 pcmk_host_map="ip-10-0-0-48:i-07f1ac63af0ec0ac6;ip-10-0-0-46:i-063fc5fe93b4167b2;ip-10-0-0-58:i-08bd39eb03a6fd2c7" \ power_timeout=240 pcmk_reboot_timeout=480 pcmk_reboot_retries=4
- 即時かつ完全なフェンシングを確実に行うために、すべてのクラスターノードで ACPI Soft-Off を無効にします。ACPI Soft-Off を無効にする方法については、統合フェンスデバイスで使用するために ACPI を無効にする を参照してください。
別の手順
クラスターの VPC ID を取得します。
# aws ec2 describe-vpcs --output text --filters "Name=tag:Name,Values=<clustername>-vpc" --query 'Vpcs[*].VpcId' vpc-06bc10ac8f6006664
クラスターの VPC ID を使用して、VPC インスタンスを取得します。
$ aws ec2 describe-instances --output text --filters "Name=vpc-id,Values=vpc-06bc10ac8f6006664" --query 'Reservations[*].Instances[*].{Name:Tags[? Key==
Name
]|[0].Value,Instance:InstanceId}' | grep "\-node[a-c]" i-0b02af8927a895137 <clustername>-nodea-vm i-0cceb4ba8ab743b69 <clustername>-nodeb-vm i-0502291ab38c762a5 <clustername>-nodec-vm取得したインスタンス ID を使用して、クラスター上の各ノードでフェンシングを設定します。たとえば、クラスター内のすべてのノードでフェンスデバイスを設定するには、次のようにします。
[root@nodea ~]# CLUSTER=<clustername> && pcs stonith create fence${CLUSTER} fence_aws access_key=XXXXXXXXXXXXXXXXXXXX pcmk_host_map=$(for NODE \ in node{a..c}; do ssh ${NODE} "echo -n \${HOSTNAME}:\$(curl -s http://169.254.169.254/latest/meta-data/instance-id)\;"; done) \ pcmk_reboot_retries=4 pcmk_reboot_timeout=480 power_timeout=240 region=xx-xxxx-x secret_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
フェンスデバイスを作成するための特定のパラメーターは、
fence_aws
の man ページまたは 高可用性クラスターの設定と管理 ガイドを参照してください。- 即時かつ完全なフェンシングを確実に行うために、すべてのクラスターノードで ACPI Soft-Off を無効にします。ACPI Soft-Off を無効にする方法については、統合フェンスデバイスで使用するために ACPI を無効にする を参照してください。
検証
ノードに設定されているフェンスデバイスとそのパラメーターを表示します。
[root@nodea ~]# pcs stonith config fence${CLUSTER} Resource: <clustername> (class=stonith type=fence_aws) Attributes: access_key=XXXXXXXXXXXXXXXXXXXX pcmk_host_map=nodea:i-0b02af8927a895137;nodeb:i-0cceb4ba8ab743b69;nodec:i-0502291ab38c762a5; pcmk_reboot_retries=4 pcmk_reboot_timeout=480 power_timeout=240 region=xx-xxxx-x secret_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Operations: monitor interval=60s (<clustername>-monitor-interval-60s)
クラスターノードのいずれかに対してフェンスエージェントをテストします。
# pcs stonith fence <awsnodename>
注記コマンドの応答が表示されるまで数分かかる場合があります。フェンシングしているノードのアクティブな端末セッションを確認する場合は、fence コマンドを入力すると、端末の接続がすぐに終了するようになります。
以下に例を示します。
[root@ip-10-0-0-48 ~]# pcs stonith fence ip-10-0-0-58 Node: ip-10-0-0-58 fenced
ステータスを確認して、ノードがフェンスされていることを確認します。
# pcs status
以下に例を示します。
[root@ip-10-0-0-48 ~]# pcs status Cluster name: newcluster Stack: corosync Current DC: ip-10-0-0-46 (version 1.1.18-11.el7-2b07d5c5a9) - partition with quorum Last updated: Fri Mar 2 19:55:41 2018 Last change: Fri Mar 2 19:24:59 2018 by root via cibadmin on ip-10-0-0-46 3 nodes configured 1 resource configured Online: [ ip-10-0-0-46 ip-10-0-0-48 ] OFFLINE: [ ip-10-0-0-58 ] Full list of resources: clusterfence (stonith:fence_aws): Started ip-10-0-0-46 Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
前の手順でフェンシングされたノードを起動します。
# pcs cluster start <awshostname>
ステータスを確認して、ノードが起動したことを確認します。
# pcs status
以下に例を示します。
[root@ip-10-0-0-48 ~]# pcs status Cluster name: newcluster Stack: corosync Current DC: ip-10-0-0-46 (version 1.1.18-11.el7-2b07d5c5a9) - partition with quorum Last updated: Fri Mar 2 20:01:31 2018 Last change: Fri Mar 2 19:24:59 2018 by root via cibadmin on ip-10-0-0-48 3 nodes configured 1 resource configured Online: [ ip-10-0-0-46 ip-10-0-0-48 ip-10-0-0-58 ] Full list of resources: clusterfence (stonith:fence_aws): Started ip-10-0-0-46 Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled