2020年11月28日土曜日

OSSのロードバランサ「ZEVENET Community Edition」をクラスタ化し冗長構成にする

先日、OSSのロードバランサである「ZEVENET Community Edition」の導入手順を記事にした。

ZEVENET Community Editionでは、Enterprise Editionと比較すると機能が必要最低限に制限されているため、GUIからはクラスタ化による冗長構成を設定することができない。しかし、SSHにてログインしCLIから操作することで、クラスタ化の設定が可能となっている。クラスタ化することで、2台のZEVENET間で以下が実装される。

  • VRRPによるVIP冗長化
  • コンフィグ同期

クラスタ化の手順はZEVENET公式の手順はにまとめられているものの、実際はその手順だけでは不足していた。そこで、本記事では不足していた手順を含め、ZEVENETのクラスタ化手順をまとめることにする。

環境

  • ESXi 6.7 Update 3
  • ZEVENET Community Edition 5.11

「zevenet-ce-cluster」パッケージのインストール

1. 公開鍵証明書方式にてSSHログインを許可

ZEVENETはクラスタ化するとコンフィグ同期がされるようになる。コンフィグ同期の仕組みはいたってシンプルで、設定ファイルが保存されている「/usr/local/zevenet/config」のフォルダをrsyncにて同期するというものになっている。

rsysncで正常にコンフィグ同期がされるように、公開鍵認証方式にてパスワードなしでログインできるようにしておく。公開鍵認証方式は、ssh-keygenにてキーペアを作成し、ssh-copy-idにて対向ノードに公開鍵をコピーするだけでよい。

## node1で実行

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ←★空白でエンター
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): ←★空白でエンター
Enter same passphrase again: ←★空白でエンター
~(以下略)~

# ssh-copy-id root@<node2のIPアドレス>
~(中略)~
Are you sure you want to continue connecting (yes/no)? yes ←★yesを入力
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@<node2のIPアドレス>'s password: ←★node2のrootパスワードを入力
~(以下略)~
## node2で実行

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ←★空白でエンター
Enter passphrase (empty for no passphrase): ←★空白でエンター
Enter same passphrase again: ←★空白でエンター
~(以下略)~

# ssh-copy-id root@<node1のIPアドレス>
~(中略)~
Are you sure you want to continue connecting (yes/no)? yes ←★yesを入力
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@<node1のIPアドレス>'s password: ←★node1のrootパスワードを入力
~(以下略)~

2. Zevenet CE Clusterのパッケージをインストール

ZEVENET Community Editionをクラスタ化するためのパッケージである「Zevenet CE Cluster」のパッケージをインストールする。インストールはapt-getで行う。

## node1/node2両方で実行

# apt-get update
# apt-get install zevenet-ce-cluster -y
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了

~(中略)~

systemd (240-2) のトリガを処理しています ...
zevenet-ce-cluster (1.3) を設定しています ...
Completing the Zevenet CE Cluster installation...

3. Zevenet CE Clusterの設定ファイルを修正

Zevenet CE Clusterの設定ファイルの以下個所を修正する。$cluster_ipでクラスタのVIPを設定しているので、一見するとVIPが自動作成されるように見えるが、実際には作成されることはない。VIP自体はGUIで作成すること。

## node1/node2両方で実行

# cp /usr/local/zevenet/app/ucarp/etc/zevenet-cluster.conf{,.org}
# vi /usr/local/zevenet/app/ucarp/etc/zevenet-cluster.conf
#local IP to be monitored, i e 192.168.0.101
$local_ip="<自ノードのIPアドレス>";

#remote IP to be monitored, i e 192.168.0.102
$remote_ip="<対向ノードのIPアドレス>";

#used password for vrrp protocol communication
$password="<VRRPで使用する共通パスワード>";

#unique value for vrrp cluster in the network
$cluster_id="<任意のVRRP ID>";

#used virtual IP in the cluster, this ip will run always in the master node
$cluster_ip="<クラスタで使用するVIP>";

4. サービス起動ファイルの設定修正

ここが公式のマニュアルでは言及がされていない手順となる。

この状態でzevenet-ce-clusterサービスを起動させようとすると、以下の通り「Cluster is disabled」エラーとなり起動に失敗する。

# /etc/init.d/zevenet-ce-cluster start
Cluster is disabled, enable cluster in /etc/init.d/zevenet-ce-clusterUsage: /etc/init.d/zevenet ( stop | start )

起動スクリプトである「/etc/init.d/zevenet-ce-cluster」内に$enable_cluster変数があるが、デフォルトではfalseに設定されておりクラスタが起動できないことが原因となる。この変数をtrueに修正する。

## node1/node2両方で実行

# vi /etc/init.d/zevenet-ce-cluster
#!/usr/bin/perl
$action = $ARGV[0];

$enable_cluster="true"; # false = disable cluster, true = enable cluster
↑★trueに変更

~(以下略)~

5. zevenet-ce-clusterサービスを起動

zevenet-ce-clusterサービスを起動させる。先に起動した側がMasterになることから、Master側を先に起動させるようにすること。Master/Backupどちらで起動しているかは「/etc/zevenet-ce-cluster.status」ファイルに記録される。また、このファイルの内容はシェルのプロンプトにも表示されるようになる。

## node1で実行

# /etc/init.d/zevenet-ce-cluster start
Starting Zevenet CE Cluster...
[master] # cat /etc/zevenet-ce-cluster.status
master

次にBackup側を起動させる。

## node2で実行

# /etc/init.d/zevenet-ce-cluster start
Starting Zevenet CE Cluster...
[backup] # cat /etc/zevenet-ce-cluster.status
backup

動作確認

管理GUIにログインしてみると、Masterとなっているnode1側では、Virtual Interface及びFarmがUp (緑色) となっており、正常に動作していることがわかる。


一方、Backupとなっているnode2側では、Virtual Interface及びFarmがDown (赤色) となっており、Backup中はVirtual Interface及びFarmが無効化されていることがわかる。


MasterとBackupを切り替えるためには、Master側にSSHでログインし、zevenet-ce-clusterサービスを停止→数秒待機→起動すればよい。サービス再起動だと、Master側のZEVENETが再度Masterで復帰してしまうので注意。

[master] # systemctl stop zevenet-ce-cluster
[] #
[] # systemctl start zevenet-ce-cluster
[backup] #

あるいは、ZEVENET自体を再起動ことでも、MasterとBackup切り替えることができる。

まとめ

以上で、ZEVENET Community Editionをクラスタ化し冗長構成にすることができた。GUIで設定できないことは少し不便ではあるものの、設定後は問題なく切り替わりやコンフィグ同期も動作しており、これによってより一層使えるロードバランサになった。

参考

0 件のコメント:

コメントを投稿

人気の投稿