第一のスプリッドブレイン防止機構で秘密鍵を使用してみた
投稿日: / 更新日:
■はじめに
こんにちは。
今回、この記事では第一のスプリッドブレインで秘密鍵を使用する方法について紹介します。
1.第1のスプレットブレインブレイン防止機構について
1-1.スプレットブレインとは
スプリットブレインとはMasterサーバが正常に停止しない事で発生する障害です。
Hinemosのミッションクリティカル機能ではMasterサーバに問題が発生してシステムやサーバが停止した際に、
StandbyサーバがMasterサーバに昇格して切り替わり(フェイルオーバ)が行われます。
しかしこの際に、何らかの要因で元Masterサーバが不完全に動作し続けてしまうことでスプレットブレインは発生します。
元Masterサーバが不完全に動作し続けることにより、複数台Masterサーバとして動作してしまいます。
1-2.第1のスプレットブレイン防止機構とは
Hinemosではスプレットブレインを防止する第1の機構として、
新Masterサーバは昇格する前に元MasterサーバへSSH経由でログインして、プロセスの強制停止を試みます。
これが第1のスプレットブレイン防止機構です。
ログイン方法はコンフィギュレーションスクリプトで入力したパスワードで試行されます。
パスワードの代わりに秘密鍵を用いることも可能です。
次のセクションでは実際に秘密鍵を用いてログイン設定をしてみます。
※第1のスプレットブレイン防止機構が正常に発動しなかった場合、第2のスプレットブレイン防止機構が発動します。
今回は第2のスプレットブレイン防止機構の説明を省略します。
2.環境について
秘密鍵を用いてのログインは、Linux版とAmazonLinux2版が対象となっています。
本記事では、HAオプションのインストール方法のご紹介は致しませんが、
Linux版Hinemos Manager(ver.7.0.1)にHAオプションをインストールしてみた記事がございます。
インストール方法が気になる方は、こちらもご覧ください。
Linux版 Hinemos ver.7.0 にHAオプションをインストールしてみた
今回設定を行ったマネージャサーバ情報は以下になります。
- マネージャサーバ1系
OS:RHEL 8
Hinemos ver.7.0.1 - マネージャサーバ2系
OS:RHEL 8
Hinemos ver.7.0.1
3.秘密鍵の生成
今回はユーザー”root”がSSHログインし、秘密鍵を利用して認証する方法を例としています。
3-1.秘密鍵の準備
まず各マネージャサーバで秘密鍵を準備します。
以下のコマンドでRSA形式の秘密鍵を生成します。
1 |
(root) # ssh-keygen -t rsa |
実行すると以下のようになります。
1 2 3 4 5 6 |
(root) # ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): (作成したkeyの配置場所、指定しない場合はEnter) Created directory '/root/.ssh'. (3行目でEnter入力した場合、/root/.sshが作成される) Enter passphrase (empty for no passphrase): (keyのパスフレーズ、使用しない場合はEnter) Enter same passphrase again: (再度5行目のkeyのパスフレーズ、使用しない場合はEnter) |
今回は全ての項目をEnterキーで実行し作成しました。
生成した秘密鍵は”/root/.ssh/id_rsa”です。
3-2.ログイン認証設定
生成した公開鍵をSSH経由によるログイン認証に設定します。
以下のコマンドを実行します。
1 2 |
(root) # cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys (root) # chmod 600 /root/.ssh/authorized_keys |
3-3.秘密鍵の名前変更
生成した秘密鍵は、両方のマネージャサーバで”id_rsa”となっています。
マネージャサーバごとに異なる名前に変更します。
今回は以下のように変更しました。
マネージャサーバ1系で作成した鍵の名前を”manager1_rsa”
マネージャサーバ1系で作成した鍵の名前を”manager2_rsa”
このようにどのマネージャサーバで作成した鍵か、名前を変更すると分かりやすいです。
以下のコマンドを実行します。
1 2 |
[1系で実施](root) # mv /root/.ssh/id_rsa /root/.ssh/manager1_rsa [2系で実施](root) # mv /root/.ssh/id_rsa /root/.ssh/manager2_rsa |
4.秘密鍵の転送
作成した鍵を相手サーバに転送します。
マネージャサーバ1系で作成した”manager1_rsa”は、マネージャサーバ2系の/root/.sshディレクトリに転送します。
マネージャサーバ2系で作成した”manager2_rsa”は、マネージャサーバ1系の/root/.sshディレクトリに転送します。
鍵の転送後には以下のコマンドを実行します。
1 2 |
[2系で実施](root) # chmod 600 /root/.ssh/manager1_rsa [1系で実施](root) # chmod 600 /root/.ssh/manager2_rsa |
5.設定ファイルの変更
ここでは以下の設定ファイルを変更します。
-
- /opt/hinemos/.secure/cluster.secret
- /opt/hinemos/etc/cluster.properties
5-1./opt/hinemos/.secure/cluster.secret編集
“instance.ssh.privatekey.file”のファイルパスを変更します。
先ほど転送した秘密鍵のディレクトリに変更します。
マネージャサーバ2系では以下のように変更します。
1 2 |
...(省略)... instance.ssh.privatekey.file=/root/.ssh/manager1_rsa |
マネージャサーバ1系では以下のように変更します。
1 2 |
...(省略)... instance.ssh.privatekey.file=/root/.ssh/manager2_rsa |
5-2./opt/hinemos/etc/cluster.properties編集
“plugin.instancemanager.fence.instance.command”を変更します。
マネージャサーバ1系、マネージャサーバ2系共に以下のように変更します。
1 2 3 4 5 6 7 |
## Configuration of Fail-Safe Mechanism (avoid split-brain) # [instance fencing - A] ssh with password (if success, command must return 0) # (set user and password of this instance to /opt/hinemos/.secure/cluster.secret) [default] #plugin.instancemanager.fence.instance.command=java -cp ... -P #[PASSWORD] ... # [instance fencing - B] ssh with private key file (if success, command must return 0) # (set user and private key file to /opt/hinemos/.secure/cluster.secret) plugin.instancemanager.fence.instance.command=java -cp ... -i #[PRIVATEKEY] ... |
まず、7行目の”… -i #[PRIVATEKEY] …”の設定を有効化します。
そして4行目の”… -i #[PASSWORD] …”の設定を無効化します。
以上で設定が完了です。
6.ログイン確認
秘密鍵でログインができることを確認します。
最初にマネージャサーバ2系から秘密鍵でログイン出来ることを確認します。
1 2 3 4 5 6 7 |
[1系で実施] (root) # ssh -i /root/.ssh/manager1_rsa root@[マネージャサーバ1系のIPアドレス] echo "TEST" The authenticity of host 'XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX)' can't be established. ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'XXX.XXX.XXX.XXX' (ECDSA) to the list of known hosts. TEST |
実行後にこのように最後に”TEST”が出力されたらログイン成功です。
同様に、マネージャサーバ1系から秘密鍵でログイン出来ることを確認します。
1 2 3 4 5 6 7 |
[2系で実施] (root) # ssh -i /root/.ssh/manager2_rsa root@[マネージャサーバ2系のIPアドレス] echo "TEST" The authenticity of host 'XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX)' can't be established. ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'XXX.XXX.XXX.XXX' (ECDSA) to the list of known hosts. TEST |
実行後に”TEST”が出力されない場合は、再度設定が正しく実行できているか見直してください。
■おわりに
この記事では第一のスプリッドブレインで秘密鍵を使用する方法について紹介しました。
ご覧いただきありがとうございました。