Corosync
正式名称:The Corosync Cluster Engine
LinuxでHighAvailability(H/A)構成を実現する為に使用する、ノード装置死活監視ソフトウェア。
設定したノード(対向、多対向)のノード監視を行い、ノードが停止した場合に正常系への切り替え処理を実施する。
1. ビルド・インストール
色々なインストール方法があるが一番楽なのは、yum一発で入れる方法
下記コマンドを打てば、必要なライブラリも全て自動でインストール出来る。
# yum install corosync
しかし、冗長構成等のシステム基幹部分もyumに頼るのはどうかと思うので、
今回はソースコードからのインストールも実施する。
また、corosyncはクラスタリングの基盤という立ち位置の為、localstatedirを"/var"に変更してビルドする。
※ソースコードの取得にgitコマンドが必要なので事前にいれておく
# wget http://build.clusterlabs.org/corosync/releases/corosync-2.3.4.tar.gz # tar zxvf corosync-2.3.4.tar.gz # cd corosync-2.3.4 # ./autogen.sh # ./configure --prefix=/usr/local/corosync-2.3.4 --sysconfdir=/etc --localstatedir=/var # make # make install
# cd /usr/local # ln -s /usr/local/corosync-2.3.4 ./corosync # cd /usr/bin # ln -s /usr/local/corosync/bin/corosync-blackbox . # cd /usr/sbin # ln -s /usr/local/corosync/sbin/corosync* . # cd /usr/include/ # ln -s /usr/local/corosync/include/corosync . # cd /usr/lib64/pkgconfig # ln -s /usr/local/corosync/lib/pkgconfig/* . # cd /usr/lib64 # ln -s /usr/local/corosync/lib/lib* .
# cp ${SOURCE_DIR}/init/corosync.sysconfig.example /etc/sysconfig/corosync # cd /etc/init.d # mv corosync corosync- # sed -e "s/corosync-2.3.4/corosync/g" corosync- > corosync
2. コンフィグ
設定はひな形を元に作成し、今回はUDPユニキャスト方針でクラスターノードを見つける設定にする。
項目についてはGitHubを見るか、OSSでLinuxサーバ構築のどちらかを参照
# cp /etc/corosync/corosync.conf.example.udpu /etc/corosync/corosync.conf # vi /etc/corosync/corosync.conf ===== #corosync.confをOpenAISと互換性を保ったコンフィグにする compatibility: whitetank #Corosyncを実行するユーザとグループ aisexec { user: root group: root } #VirtualIPの付け替えを行うフロントエンド指定 service { #Pacemakerを使う name: pacemaker #PacemakerをCorosyncと連携させる設定。Pacemakerのバージョンに揃える ver: 1 #PacemakerGUIを使う use_mgmtd: yes } #クラスタノード間の通信プロトコルなどを指定する totem { #Corosync設定ファイルのバージョン。今は2のみ指定可能 version: 2 #クラスタノードプロセス(Pacemaker)の停止を検出する時間。ms指定 token: 1000 #冗長リング構成(ringnumber)の動作モード rrp_mode: active #クラスタ間通信の暗号化指定 secauth: off #crypto_cipher: none #crypto_hash: none interface { #クラスタノード(メンバー)のIPアドレスorホスト名 member { memberaddr: 192.168.0.2 } member { memberaddr: 192.168.0.3 } #リングプロトコル使用時のI/F所属リング番号。0から開始する ringnumber: 0 #memberの属するネットワークアドレスを指定 #もし、memberが別NWに所属するならcorosyncを実行中のノード(member)IPアドレスを書く bindnetaddr: 192.168.0.0 #クラスタノード間通信のポート番号 mcastport: 5405 #MulticastTransport利用時に有効なTTL数を指定 ttl: 1 } #UDPユニキャストモードを使用する transport: udpu } #クラスターに所属するノード一覧 nodelist { node { ring0_addr: 192.168.0.2 nodeid: 1 } node { ring0_addr: 192.168.0.3 nodeid: 2 } } #ログの記録方法を設定する logging { fileline: off to_logfile: yes to_syslog: off logfile: /var/log/cluster/corosync.log debug: off timestamp: on #loggingステートの設定上書き logger_subsys { subsys: QUORUM debug: off } } #スプリットブレイン対策 quorum { provider: corosync_votequorum expected_votes: 2 }
コンフィグを作成したら、UDPユニキャストコンフィグ時に使用する認証鍵を一応作成しておく。
# corosync-keygen ----- corosync-keygenをすると、"/dev/random"を使って鍵を自動生成するので放置する。 "/etc/corosync/authkey"が完成したら、authkeyファイルを各クラスタノードに転送しておく。
3. 起動方法
コンフィグを書いたら、Corosyncの起動テストを行う。
起動時にはログイン中のユーザを一度exitで抜けた後に再ログインして行う。
# /etc/init.d/corosync start Starting corosync (via systemctl): [ OK ] ----- # systemctl start corosync.service