スポンサードリンク
1.概要
Solaris10 Sparc 11/06 (Sun Fire V100)へ、linux-haのheartbeatをインストールしました。
Heartbeatは2台のシステムで主にアクティブ・スタンバイ型のHAクラスタを構築する際に用いられ、HAクラスタとしての基本的な次の機能を持っているソフトウェアです。linuxで主に利用されています。
- 共有リソースの引き継ぎ
- サーバの稼動監視
- サービスの監視
そのンストール手順を示すと共に、仮想IPアドレスを設定してその動作検証を行うまでを記載します。
- CコンパイラはSolaris10のインストールで自動インストールされるgccを利用することにします。
64ビットモードでコンパイル、リンクします。これは、V100では、リンク時に必要となるsnmpライブラリが64ビットライブラリであることから、そのようにする必要があります。後述するように、snmpライブラリもソースからコンパイルする事にします。
2.環境準備
2.1.シェル環境等
・makeコマンドでgmakeが呼ばれるように、シンボリックリンクを作成します。
# ln -s /usr/sfw/bin/gmake /usr/sfw/bin/make
・/usr/sfw/libをダイナミックライブラリのPATHに追加します。
# crle -c /var/ld/ld.config -l /lib:/usr/lib:/usr/sfw/lib
以下のシェル環境を設定します。後述するコンパイル等の作業は、この設定環境で行います。
% PATH=/usr/sfw/bin:$PATH ; export PATH
2.2.hearbeat実行ユーザ追加
hearbeat実行用のグループhaclient、ユーザhaclusterを追加します。名前の変更は不可です。コンパイル時に参照されます。
# groupadd -g 500 haclient
# useradd -u 500 -g haclient -s /bin/false hacluster
UX: useradd: hacluster name too long.
useraddで上記エラーが出力されますが、ユーザhaclusterは作成されます。
2.必要なライブラリのインストール
以下、必要なソース・バイナリは、sunfreeware.com等から入手してください。
・swigをソースからコンパイル・インストール
% CC="gcc" CXX="g++" ./configure
% make
% su
# make install
・net-snmpをソースからコンパイル・インストール
% CC="gcc" CXX="g++" ./configure
% make
% su
# make install
・libnet
バイナリ版(libnet-1.1.2.1-sol10-sparc-local)をダウンロードして、pkgaddする
・libgpgerror
バイナリ版(libgpgerror-1.5-sol10-sparc-local)をダウンロードして、pkgaddする
・libgnutls-configの準備
gnutlsはインストールされていますが、libgnutls-configが不足しています。
libgnutlsのバイナリをダウンロードサイトから入手し、その中からlibgnutls-configファイルを抜き出します。そのファイル中のgnutls_libs=で始まる行を、下記のように修正後、PATHの通ったディレクトリ、例えば/usr/local/bin 等にコピーし、実行フラグをオンにします。
gnutls_libs="-L${exec_prefix}/lib -lgnutls -L/usr/lib -lgcrypt -L/usr/local/lib -lgpg-error -L/usr/lib -lnsl -lsocket "
3.hearbeatのインストール
今回は、heartbeat-2.1.2をインストールしました。
% gtar zxf heartbeat-2.1.2.tar.gz
% cd heartbeat-2.1.2
% CC="gcc" CXX="g++" ./ConfigureMe configure
% make
% su
# make install
以上により、hearbeatがインストールされました。
4.hearbeatの設定
4.1.設定ファイルの用意
/etc/opt/LXHAhb/ha.dディレクトリに、ha.cf、haresources、authkeysファイルを用意します。雛形ファイルは、/opt/LXHAhb/share/doc/heartbeat-2.1.2ディレクトリにあります。
(1)仮定
2台のマシンの名前(uname -n)を、node1 , node2 とします。
マシン名 系 公開系NIC/IPアドレス ハートビート系NIC/IPアドレス
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
node1 アクティブ系 dmfe0/192.168.100.101 dmfe1/192.168.101.101
node2 スタンバイ系 dmfe0/192.168.100.102 dmfe1/192.168.101.102
2台の間のハートビート(お互いの生死を確認する為の通信)は、dmfe1系のネットワークを利用して行います。より信頼性を向上させるためには、2系統以上のハートビートを持たせます。今回は、1系統のみとします。
また、このクラスタの仮想的なIPアドレスを192.168.100.100とします。外部からは、この仮想IPアドレスにアクセスすることによって、2台のうちその時点でアクティブなマシンにアクセスすることができます。
(2)ha.cf
【node1側のファイルの内容】
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast dmfe1 192.168.101.102 # <-- node2のIPアドレス
auto_failback on
node node1
node node2
respawn hacluster /opt/LXHAhb/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
debug 1
【node2側のファイルの内容】
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast dmfe1 192.168.101.101 # <-- node1のIPアドレス
auto_failback on
node node1
node node2
# respawn hacluster /opt/LXHAhb/lib/heartbeat/ipfail #コメントアウトする
apiauth ipfail gid=haclient uid=hacluster
debug 1
(2)haresources
【node1側、node2側共通のファイルの内容】
node1 IPaddr::192.168.100.100
(3)authkeys
認証方式を設定します。node1側、node2側共通の設定が必要です。
ファイルのモードは600に設定してください。
# chmod 0600 authkeys
ファイルの内容は、とりあえず、実験ということで、crcを用いることにします。他に、sha1、md5を利用可能です。
【node1側、node2側共通のファイルの内容】
auth 1
1 crc
5.実行
node1,node2で、heartbeatを起動します。
# /etc/init.d/heartbeat start
Starting High-Availability services:
2007/04/26_11:03:46 INFO: IPaddr Resource is stopped
Done.
しばらく(30秒程度)すると、node1側で、仮想IPアドレスが有効になります。
# ifconfig -a
...
dmfe0:1: flags=1000843 mtu 1500 index 2
inet 192.168.100.100 netmask ffffff00 broadcast 192.168.100.255
...
以上により、仮想IPアドレスが作成されたことを確認できました。
また、node1側でheartbeatを停止すると、、node1側では仮想IPアドレスが消え、node2側で仮想IPアドレスが作成されます。
6.zoneでの動作について
2個のzone各々でhearbeatを動作させて、HAクラスタを構成できれば、hearbeatの動作テスト環境として、1台のマシンで済みます。
しかし、現状では、仮想IPアドレスの生成に失敗してしまいます。特権(Privilege)が不足しているように思われます。
また、他に必要な特権としては、メモリーロック特権(proc_lock_memory)とスケジューリング特権(proc_priocntl)を下記のようにzoneに付加してやる必要があります。
limitpriv=default,proc_lock_memory,proc_priocntl
zoneでhearbeatを動作させることに成功された方がいらっしゃいましたら、ぜひご連絡をお願いします。