STONITH を使用することで、異常なノードが共有データにアクセスしたり破損したりしないようにします。Quorum/Witness と併用することにより、より強固にスプリットブレインを防止できるようになります。SSM エージェント経由で Linux kernel を停止させるのと、EC2 インスタンス経由で落とすのを併用することでより確実にします。
要件
パッケージ
AWS CLI と SSMエージェントを各クラスターノードにインストールします。SSM エージェントは以下でインストールできます。
# dnf install https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm # systemctl enable amazon-ssm-agent # systemctl start amazon-ssm-agent
より詳細な手順については、AWS ユーザーズガイド Linux用 EC2インスタンスに SSM Agentを手動でインストール及びアンインストールする を参考にしてください。
IAM ロール
IAM ロールには、仮想マシンを powerOff できる権限と SSM エージェントと通信できる権限が必要です。
- ec2:StopInstances
- ssm:SendCommand
事前確認
各ノードで以下のコマンドを実行し、AWS 上の認証が機能していることを確認してください。
# aws ec2 stop-instances --instance-ids <instance> --force --region <region> # aws ssm send-command --document-name AWS-RunShellScript --instance-ids <instance> --parameters '{"commands":["dohalt() { sleep 1; echo o > /proc/sysrq-trigger; }","echo 1 > /proc/sys/kernel/sysrq","dohalt &","echo shutoff the system"],"executionTimeout":["10"]}' --timeout-seconds 30 --region <region>
STONITH のインストール
次のコマンドを実行して、すべてのサーバーへのコミュニケーションパスが構成されている 各サーバー に、LifeKeeper STONITH スクリプトをインストールします。
# /opt/LifeKeeper/samples/STONITH/stonith-install
ec2-stonith.sh の作成
以下の STONITH スクリプトを作成し、/usr/local/bin/ec2-stonith.sh に置きます。
#!/bin/sh
instance="--instance-ids $1"
region="${2:+--region $2}"
aws ssm send-command --document-name AWS-RunShellScript $instance --parameters '{"commands":["dohalt() { sleep 1; echo o > /proc/sysrq-trigger; }","echo 1 > /proc/sys/kernel/sysrq","dohalt &","echo shutoff the system"],"executionTimeout":["10"]}' --timeout-seconds 30 $region
sleep 1
aws ec2 stop-instances $instance --force $region
sleep 1
aws ec2 stop-instances $instance --force $region
実行権限を与えます。
# chmod 755 /usr/local/bin/ec2-stonith.sh
/opt/LifeKeeper/config/stonith.conf の更新
stonith.conf を更新します。
vm-HostA /usr/local/bin/ec2-stonith.sh <instance> <region>
vm-HostB /usr/local/bin/ec2-stonith.sh <instance> <region>
このトピックへフィードバック