Heartbeat-2.1.4 の標準パッケージでは、IPv6環境で使用する場合一部不具合があります。 本パッケージをインストールする事により、IPv6環境で pingdによる経路監視、IPv6addrリソースエージェントを使用する事ができます。
本パッケージは、Heartbeat 2.1.4がインストールされていることが前提となります。Heartbeat 2.1.4がインストールされていない場合は、先にインストールしてください。ここでの説明は64bit環境を前提としています。32bit環境では適宜読み替えをお願いします。
本ツールのパッケージ hb-ipv6-1.00-1.hb214.x86_64.rpm をダウンロードします。その後、以下のようにrpmコマンドを使ってインストールします。
# rpm -ivh hb-ipv6-1.00-1.hb214.x86_64.rpm Preparing... ########################################### [100%] 1:hb-ipv6 ########################################### [100%]
rpmを使ってインストールした場合、ファイルは /usr/lib64/heartbeat/hb-extras/ に配置されます。
Heartbeatの所定のディレクトリからシンボリックリンクが張られ、動作可能な状態となっています。
# ls /usr/lib64/heartbeat/hb-extras/ IPv6addr pingd # ls -l /usr/lib64/heartbeat/pingd lrwxrwxrwx 1 root root 36 2月 3 13:27 /usr/lib64/heartbeat/pingd -> /usr/lib64/heartbeat/hb-extras/pingd # ls -l /usr/lib/ocf/resource.d/heartbeat/IPv6addr lrwxrwxrwx 1 root root 39 2月 3 13:27 /usr/lib/ocf/resource.d/heartbeat/IPv6addr -> /usr/lib64/heartbeat/hb-extras/IPv6addr
ソースコードからrpmパッケージを作成する手順を以下に示します。
rpmを作成するために必要となる資材は、以下になります。
ここでは/home/hacluster/rpmディレクトリ配下でrpmを作成するものとしています。
(1) .rpmmacrosファイルを作成します
rpmを作成するユーザのホームディレクトリ直下に以下の内容からなる.rpmmacrosファイルを作成します。
%_topdir /home/hacluster/rpm %_tmppath /home/hacluster/rpm/tmp %debug_package %{nil}
(2) 必要なディレクトリを作成します
$ mkdir -p /home/hacluster/rpm/BUILD $ mkdir -p /home/hacluster/rpm/RPMS/i386 $ mkdir -p /home/hacluster/rpm/RPMS/x86_64 $ mkdir -p /home/hacluster/rpm/SOURCES $ mkdir -p /home/hacluster/rpm/SPECS $ mkdir -p /home/hacluster/rpm/SRPMS $ mkdir -p /home/hacluster/rpm/tmp
(3) Heartbeatのソースコードアーカイブを配置します
$ cp -p Heartbeat-STABLE-2-1-STABLE-2.1.4.tar.gz /home/hacluster/rpm/SOURCES
(4) パッチファイルを解凍します
$ gunzip hb-ipv6-1.00-1.hb214.patch.gz
(5) パッチファイルを配置します
$ cp -p hb-ipv6-1.00-1.hb214.patch /home/hacluster/rpm/SOURCES
(6) Heartbeatのソースコードアーカイブを展開します
$ cd /home/hacluster/rpm/SOURCES $ tar xfz Heartbeat-STABLE-2-1-STABLE-2.1.4.tar.gz
(7) パッチを適用します
$ cd /home/hacluster/rpm/SOURCES $ patch -p1 -d Heartbeat-STABLE-2-1-STABLE-2.1.4 < hb-ipv6-1.00-1.hb214.patch
(8) ソースをconfigureします
$ cd /home/hacluster/rpm/SOURCES/Heartbeat-STABLE-2-1-STABLE-2.1.4 $ ./ConfigureMe bootstrap
(9) specファイルを配置します
$ cp -p /home/hacluster/rpm/SOURCES/Heartbeat-STABLE-2-1-STABLE-2.1.4/hb-ipv6.spec /home/hacluster/rpm/SPECS
(10) 展開したHeartbeatのソースツリーを削除します
$ cd /home/hacluster/rpm $ rm -rf /home/hacluster/rpm/SOURCES/Heartbeat-STABLE-2-1-STABLE-2.1.4
(11) rpmbuildコマンドを実行します
$ cd /home/hacluster/rpm/SPECS $ rpmbuild -bb hb-ipv6.spec 2>&1 | tee rpmbuild.log
(12) rpmファイルが作成されたことを確認します
$ ls -l /home/hacluster/rpm/RPMS/x86_64/hb-ipv6-1.00-1.hb214.x86_64.rpm (64bit環境の場合) $ ls -l /home/hacluster/rpm/RPMS/i386/hb-ipv6-1.00-1.hb214.i386.rpm (32bit環境の場合)
IPv6addrは「(仮想)IPv6アドレスの割当管理(割当/監視/削除)」を行うリソースエージェントです。
<nvpair ... name="ipv6addr" value="2001:db8:91:0:92::189/64"/> ↓ ~~~ <nvpair ... name="ipv6addr" value="2001:db8:91:0:92::189"/> <nvpair ... name="cidr_netmask" value="64"/>
cib.xmlでリソースとして定義することにより、利用可能となります。cib.xmlで指定できるパラーメタ、および設定例を示します。
IPv6addrでは以下のパラメータが指定可能です。
パラメータ | 意味 | 必須 |
ipv6addr | 割当対象のIPv6アドレスを指定 | ○ |
cidr_netmask | IPアドレスを割当てるネットワークI/F選択時の条件として使用 | × |
nic | IPアドレスを割当てるネットワークI/F選択時の条件 | × |
複数のネットワークI/Fを使用している環境で、どのネットワークI/Fに対して仮想IPアドレスを割当てるかの指定はcidr_netmaskとnicの指定を行うことによって可能となります。以下に例を示します。 本例ではネットワークI/FとIPアドレスは以下の状態とします。
eth0 inet6 addr: 2001:db8:91:0:92::181/80 Scope:Global ^^^^^^^^^^^^^^^^ eth1 inet6 addr: 2001:db8:91:0:91::182/64 Scope:Global ^^^^^^^^^^^^^ bond0 inet6 addr: 2001:db8:91:0:92::183/64 Scope:Global ^^^^^^^^^^^^^
<nvpair ... name="ipv6addr" value="2001:db8:91:0:92::189"/>この場合には選択候補のネットワークI/Fは、eth0、eth1、bond0となります。結果としてif_inet6内で最初に一致したIPアドレスを持つネットワークI/Fが選択されます。どれが実際に選択されるかは本設定だけでは分かりません。
<nvpair ... name="ipv6addr" value="2001:db8:91:0:92::189"/> <nvpair ... name="cidr_netmask" value="80"/>この場合にはcidr_netmaskが指定されるこことにより、選択候補のネットワークI/Fは、eth0のみとなります。結果として「eth0」に「2001:db8:91:0:92::189」が割当てられます。
<nvpair ... name="ipv6addr" value="2001:db8:91:0:92::189"/> <nvpair ... name="cidr_netmask" value="64"/>この場合にはcidr_netmaskが指定されていますが、候補となるネットワークI/Fは、eth1、bond0の二つとなります。結果としてif_inet6内で最初に一致したIPアドレスを持つネットワークI/Fが選択されます。どれが実際に選択されるかは本設定だけでは分かりません。
<nvpair ... name="ipv6addr" value="2001:db8:91:0:92::189"/> <nvpair ... name="nic" value="bond0"/>この場合にはnicを指定することにより、選択候補のネットワークI/Fは、bond0のみとなります。結果として「bond0」に「2001:db8:91:0:92::189」が割当てられます。
cib.xmlでの設定例を示します。
(省略) <primitive id="prmVIPv6" class="ocf" type="IPv6addr" provider="heartbeat"> <instance_attributes id="prmVIPv6_instance_attrs"> <attributes> <nvpair id="atr:VIPv6:ex:IPv6addr:ipv6addr" name="ipv6addr" value="2001:db8:91:0:92::189"/> <nvpair id="atr:VIPv6:ex:IPv6addr:nic" name="nic" value="bond0"/> <nvpair id="atr:VIPv6:ex:IPv6addr:cidr_netmask" name="cidr_netmask" value="64"/> </attributes> </instance_attributes> <operations> <op id="op:VIPv6:ex:IPv6addr:start" name="start" timeout="60s" on_fail="restart"/> <op id="op:VIPv6:ex:IPv6addr:monitor" name="monitor" interval="10s" timeout="60s" on_fail="restart"/> <op id="op:VIPv6:ex:IPv6addr:stop" name="stop" timeout="60s" on_fail="block"/> </operations> </primitive> (省略)
pingdは「ネットワーク状態を監視(指定されたIPアドレスに対してネットワーク疎通を確認)する」をプログラムです。
pingdはha.cfのrespawnディレクティブで指定することで使用可能です。例を用いて設定方法を記述します。
respawn root /usr/lib64/heartbeat/pingd -m 100 -a default_ping_set -N 192.168.201.17IPv6アドレス(グローバルアドレス/リンクローカルアドレス)の指定も可能です。
respawn root /usr/lib64/heartbeat/pingd -m 100 -a default_ping_set -N 2001:db8:91:0:92::171
respawn root /usr/lib64/heartbeat/pingd -m 100 -a default_ping_set -N fe80::215:17ff:fe8f:ab20注意 : -Nオプション指定時は、pingディレクティブは不要です。指定しても無視され、pingディレクティブで指定したアドレスに対する監視は有効に機能しません。
respawn root /usr/lib64/heartbeat/pingd -m 100 -a default_ping_set -N 192.168.201.17%bond0
respawn root /usr/lib64/heartbeat/pingd -m 100 -a default_ping_set -N 2001:db8:91:0:92::171%bond0
respawn root /usr/lib64/heartbeat/pingd -m 100 -a default_ping_set -N fe80::215:17ff:fe8f:ab20%bond0
respawn root /usr/lib64/heartbeat/pingd -m 100 -a default_ping_set -N 192.168.201.17%bond0 -N 2001:db8:91:0:92::171%bond0 ~~~~~~~~~~~~~~① ~~~~~~~~~~~~~~~~~~~~~②※上記設定の場合の疎通確認結果とdefault_ping_setの値は以下になります。
respawn root /usr/lib64/heartbeat/pingd -m 100 -a default_ping_set -N 192.168.201.17%bond0 ~~~~~~~~~~~~~~① respawn root /usr/lib64/heartbeat/pingd -m 100 -a default_ping_set2 -N 2001:db8:91:0:92::171%bond0 ~~~~~~~~~~~~~~~~~~~~~②※上記設定の場合の疎通確認結果とdefault_ping_set, default_ping_set2の値は以下になります。