Asterisk 1.8 + Heartbeat 2.1.3 で社内電話ごっこを試そう その1:サーバの準備 [Linux(HA)]
ビジネスフォンって、どーしてこんなに高いんだろうね?という話から始まって、秋田県のどっかの市役所ではAtserisk入れたらしいよ?という話になって、じゃあウチでも試してみるべ?と、よくある顛末に落ち着いたので、Asteriskを試すことに。
ただ、会社で使用する電話ともなると、「ディスク飛んじゃったから電話は使えません」というのはちょっとアレなので、HA化が大前提。ということで、ついでにHeartbeatも入れましょうということに。
Heartbeatについては以前にもネタにしたが、cib.xmlを手で編集していたりと、かなりダッサイ方法を使っていたので、もっとちゃんとした方法も整理して書いておくことにした。
なお、今回は検証用の環境ということにしているので、実際の環境はもっとちゃんとしたものにしようぜ。
そして、当然ながらノンサポートなので、NTTとかメーカーとかへの問い合わせは自重しる。at your own riskで。
その0:はじめに
というわけで、今回試すのに用いた環境などについて。
・PCは社内で余っていたHPのPCとEPSONのPC
・名前は「lelouch」と「suzaku」、クラスタの名前は「zero」ということにしておく。
・NICはオンボードの1個だけ。本番で使う場合は少なくとも2個は必要だろう。いや、3個か。
・OSは諸般の事情によりCentOS 5.8(いったいいくつまで続ける気だ!?)
・heartbeat等はめんどくさいのでyum でサクッと。(←SLを使わなかったのはこの辺も理由の一つ)
・もしかするとdrbdも必要になるかも?(←SLを使わなかったのは以下略)
・電話機側は一先ずソフトフォンで実験するとして、脈有りのようなら実機を購入して試そう。
その1:Asteriskインストール前夜
では、インストール開始。Asteriskインストールまでの手順は大ざっぱに以下の通り。
1-1:CentOSをインストール
1-2:環境設定等諸々実施
1-3:Heartbeatをインストール
1-4:Heartbeatの環境設定等諸々実施
その1-1:CentOSをインストール
・ディスクは全部の領域を使わないこと。もしかするとdrbdの出番があるかも知れないので。OSの領域等20GBとか30GBとかあれば十分だろうJKということで、残りは空けておく。
・インストールパッケージは「Base」だけ。あとはyumって入れるからよしということで。
・信仰上の都合によりGRUBの起動オプションに selinux=0 を追加してた。(無くてもOKじゃね?的な。)
その1-2:環境設定等諸々実施
・yum -y install ntp net-snmp sysstat ncurses-devel postfix とかだろやっぱり。
・yum -y update をしてから
・chkconfigでどう見ても要らないサービスの類は全部止めて、
・必要ならあちこちのconfファイルをいじって、
・reboot じゃね?
その1-3:Heartbeatをインストール
相変わらず、heartbeatのインストール回りがおかしいようなので、
とか、2回実行する。大事なことなので2回実行しましたよ。(←まじで必要)
で、Heartbeatのセットアップでいちいち対向ノードのパスワード入力が面倒くさいので、sshの鍵を交換しておく。(よい子は考えてからやろうね!)両方のサーバで、ssh-keygenしてやって、/root/.ssh/authorized_keys2 に自サーバと対向サーバのid_*.pubの中身を書いてやろう。パーミッションとかオーナーに注意な!
さらに、VIP経由でログインするときにサーバ側のsshキーが違うとログイン時にいちいち怒られて面倒くさいので、両方のサーバの鍵を統一してしまう。どちらか一方のサーバで、/etc/sshの下にあるssh_host*を相手側に上書きコピーしてしまう。
うちのケースではsuzakuのキーをlelouchにコピーしている。名前は適宜変更するヨロシ。
その1-4:heartbeatの環境設定
Asteriskのインストールとかがまだなので、一先ずクラスタを構成してVIP経由でのアクセスが通るようにすること、そしてクラスタをギッタンバッコンしてみてきちんと切り替わることを確認するところまでやっておく。
まずは/etc/ha.d/ha.cfの作成から。下記のようなファイルを作成した。なお、クラスタメンバーの名前については、 uname -n で表示される名前でないといけないので要注意。適宜変更すること。両方のノードに同じものを配置すればよい。
続いて/etc/ha.d/authkeysを作成。これもやはり同じものを両方のサーバに配置する。
そしたら、/usr/lib64/heartbeat/ha_propagate を実行。(32bit環境なら /usr/lib/heartbeat/ha_propagate)
ダサいことに、chkconfigのエラーが出るので(笑)、手動で
chkconfig heartbeat on
service heartbeat start
とか実行してやる。(当然両方のサーバで実行する)
2分くらい待ってから、crm_mon を実行して↓こんな具合になっていればOK。
では、クラスタVIPのリソースをここに追加する。以前heartbeatを検証したときはcib.xmlを直接編集したが、今回はcibadminで突っ込む。
まず、以下のようなファイルを作成する。ひとまずここでは/tmp/add.xmlとかそんな名前にした。IPアドレスとかNICとかその他ネットワーク設定についてはほどよく変更するように。
間違いないことを確認したら、 cibadmin -U -x /tmp/add.xml と実行してcib.xmlに追記する。なお、これはどちらか片方のサーバで実行すればよく、もう片方のサーバにはheartbeatが自動で追記してくれる。
追加されたかどうかの確認は、 cibadmin -Q と実行すれば確認出来る。
なお、パラメータを間違えてしまった場合の修正方法としては、
てな具合で修正可能。
cibadminのmanコマンドの記述によれば、VIPのアドレスを変更したい場合は、上記の方法で変更するのではなく、VIPの定義を一旦全部削除してから、正しい設定のリソース設定を丸ごと入れ直すように…と書かれているように見えた。まだ試していないが。
VIPの設定を突っ込んだら、両方のサーバで service heartbeat restart を実行。しばらくしてからcrm_monを実行して↓みたいな状態になればOK。
ここで割り当てたVIPは「172.16.1.238」だった。ちゃんとIPアドレスがくっついている事が判る。
次に、自動フェイルバックをするかしないかの設定をする。一身上の都合により、自動フェイルバックはして欲しくないので、これを停止する設定を入れておく。なお、自動フェイルバックをさせたい場合も、導入することをお勧めしておきたい。
/tmp/add2.xmlとかそんなファイルに以下の内容を記述する。まるっとコピペで全然OK
これを先ほどと同じように cibadmin -U -x /tmp/add2.xml と実行してcib.xmlに反映してやる。
このままだと自動フェイルバックは無効になるので、「やっぱり有効にしたい」という場合は以下のようなコマンドを流してやる。
cibadmin -o crm_config -U -X '<nvpair id="cib-bootstrap-options-default-resource-stickiness" name="default-resource-stickiness" value="0"/>'
やっぱり無効にしたいという場合は以下のコマンド
cibadmin -o crm_config -U -X '<nvpair id="cib-bootstrap-options-default-resource-stickiness" name="default-resource-stickiness" value="INFINITY"/>'
なお、自動フェイルバックが無効の状態で、自動フェイルバックを有効にするコマンドを流したとき、「自動フェイルバックをする必要がある」状態だった時には、その場で直ちに自動フェイルバックが行われるので要注意のこと。
次はいよいよAsteriskのインストールなどなど。
ただ、会社で使用する電話ともなると、「ディスク飛んじゃったから電話は使えません」というのはちょっとアレなので、HA化が大前提。ということで、ついでにHeartbeatも入れましょうということに。
Heartbeatについては以前にもネタにしたが、cib.xmlを手で編集していたりと、かなりダッサイ方法を使っていたので、もっとちゃんとした方法も整理して書いておくことにした。
なお、今回は検証用の環境ということにしているので、実際の環境はもっとちゃんとしたものにしようぜ。
そして、当然ながらノンサポートなので、NTTとかメーカーとかへの問い合わせは自重しる。at your own riskで。
その0:はじめに
というわけで、今回試すのに用いた環境などについて。
・PCは社内で余っていたHPのPCとEPSONのPC
・名前は「lelouch」と「suzaku」、クラスタの名前は「zero」ということにしておく。
・NICはオンボードの1個だけ。本番で使う場合は少なくとも2個は必要だろう。いや、3個か。
・OSは諸般の事情によりCentOS 5.8(いったいいくつまで続ける気だ!?)
・heartbeat等はめんどくさいのでyum でサクッと。(←SLを使わなかったのはこの辺も理由の一つ)
・もしかするとdrbdも必要になるかも?(←SLを使わなかったのは以下略)
・電話機側は一先ずソフトフォンで実験するとして、脈有りのようなら実機を購入して試そう。
その1:Asteriskインストール前夜
では、インストール開始。Asteriskインストールまでの手順は大ざっぱに以下の通り。
1-1:CentOSをインストール
1-2:環境設定等諸々実施
1-3:Heartbeatをインストール
1-4:Heartbeatの環境設定等諸々実施
その1-1:CentOSをインストール
・ディスクは全部の領域を使わないこと。もしかするとdrbdの出番があるかも知れないので。OSの領域等20GBとか30GBとかあれば十分だろうJKということで、残りは空けておく。
・インストールパッケージは「Base」だけ。あとはyumって入れるからよしということで。
・信仰上の都合によりGRUBの起動オプションに selinux=0 を追加してた。(無くてもOKじゃね?的な。)
その1-2:環境設定等諸々実施
・yum -y install ntp net-snmp sysstat ncurses-devel postfix とかだろやっぱり。
・yum -y update をしてから
・chkconfigでどう見ても要らないサービスの類は全部止めて、
・必要ならあちこちのconfファイルをいじって、
・reboot じゃね?
その1-3:Heartbeatをインストール
相変わらず、heartbeatのインストール回りがおかしいようなので、
yum install heartbeat heartbeat-pils heartbeat-stonith yum install heartbeat heartbeat-pils heartbeat-stonith
とか、2回実行する。大事なことなので2回実行しましたよ。(←まじで必要)
で、Heartbeatのセットアップでいちいち対向ノードのパスワード入力が面倒くさいので、sshの鍵を交換しておく。(よい子は考えてからやろうね!)両方のサーバで、ssh-keygenしてやって、/root/.ssh/authorized_keys2 に自サーバと対向サーバのid_*.pubの中身を書いてやろう。パーミッションとかオーナーに注意な!
さらに、VIP経由でログインするときにサーバ側のsshキーが違うとログイン時にいちいち怒られて面倒くさいので、両方のサーバの鍵を統一してしまう。どちらか一方のサーバで、/etc/sshの下にあるssh_host*を相手側に上書きコピーしてしまう。
========== cd /etc/ssh scp ssh_host* lelouch:/etc/ssh/ ==========
うちのケースではsuzakuのキーをlelouchにコピーしている。名前は適宜変更するヨロシ。
その1-4:heartbeatの環境設定
Asteriskのインストールとかがまだなので、一先ずクラスタを構成してVIP経由でのアクセスが通るようにすること、そしてクラスタをギッタンバッコンしてみてきちんと切り替わることを確認するところまでやっておく。
まずは/etc/ha.d/ha.cfの作成から。下記のようなファイルを作成した。なお、クラスタメンバーの名前については、 uname -n で表示される名前でないといけないので要注意。適宜変更すること。両方のノードに同じものを配置すればよい。
========== # CentOS + Heartbeat + Asterisk Cluster # クラスタリソース制御 crm on # フェイルバック・フェイルオーバー関連設定 # 自動フェイルバックはしない auto_failback off # クラスタノードの自動検出機能 autojoin none # Heartbeat パケットの設定 bcast eth0 # タイムアウト値の設定 # Heartbeatパケットの遅延警告時間 warntime 5 # 対向ノードが死んだとみなす時間 deadtime 20 # Heartbeat起動時に対向ノードの応答を待つ時間 initdead 60 # Heartbeatパケットの送出間隔 keepalive 2 # クラスタメンバー情報 node lelouch.office.mycompany.co.jp node suzaku.office.mycompany.co.jp ==========
続いて/etc/ha.d/authkeysを作成。これもやはり同じものを両方のサーバに配置する。
========== auth 1 1 sha1 CodeGeass ==========
そしたら、/usr/lib64/heartbeat/ha_propagate を実行。(32bit環境なら /usr/lib/heartbeat/ha_propagate)
ダサいことに、chkconfigのエラーが出るので(笑)、手動で
chkconfig heartbeat on
service heartbeat start
とか実行してやる。(当然両方のサーバで実行する)
2分くらい待ってから、crm_mon を実行して↓こんな具合になっていればOK。
========== [root@suzaku ha.d]# crm_mon Defaulting to one-shot mode You need to have curses available at compile time to enable console mode ============ Last updated: Fri Apr 6 15:52:37 2012 Current DC: suzaku.office.mycompany.co.jp (17883139-1d04-46e8-8409-6f9c49476d17) 2 Nodes configured. ============ Node: suzaku.office.mycompany.co.jp (17883139-1d04-46e8-8409-6f9c49476d17): online Node: lelouch.office.mycompany.co.jp (6161c780-53e7-4c9d-aad8-684917590d68): online ==========
では、クラスタVIPのリソースをここに追加する。以前heartbeatを検証したときはcib.xmlを直接編集したが、今回はcibadminで突っ込む。
まず、以下のようなファイルを作成する。ひとまずここでは/tmp/add.xmlとかそんな名前にした。IPアドレスとかNICとかその他ネットワーク設定についてはほどよく変更するように。
========== <resources> <group id="zero"> <primitive class="ocf" id="ClusterVIP" provider="heartbeat" type="IPaddr2"> <instance_attributes id="ClusterVIP_inst_attr"> <attributes> <nvpair id="ClusterVIP_attr_0" name="ip" value="172.16.1.238"/> <nvpair id="ClusterVIP_attr_1" name="nic" value="eth0"/> <nvpair id="ClusterVIP_attr_2" name="cidr_netmask" value="24"/> <nvpair id="ClusterVIP_attr_3" name="broadcast" value="172.16.1.255"/> </attributes> </instance_attributes> </primitive> </group> </resources> ==========
間違いないことを確認したら、 cibadmin -U -x /tmp/add.xml と実行してcib.xmlに追記する。なお、これはどちらか片方のサーバで実行すればよく、もう片方のサーバにはheartbeatが自動で追記してくれる。
追加されたかどうかの確認は、 cibadmin -Q と実行すれば確認出来る。
なお、パラメータを間違えてしまった場合の修正方法としては、
========== cibadmin -M -X '<nvpair id="ClusterVIP_attr_2" name="cidr_netmask" value="24"/>' ==========
てな具合で修正可能。
cibadminのmanコマンドの記述によれば、VIPのアドレスを変更したい場合は、上記の方法で変更するのではなく、VIPの定義を一旦全部削除してから、正しい設定のリソース設定を丸ごと入れ直すように…と書かれているように見えた。まだ試していないが。
VIPの設定を突っ込んだら、両方のサーバで service heartbeat restart を実行。しばらくしてからcrm_monを実行して↓みたいな状態になればOK。
[root@suzaku ha.d]# crm_mon Defaulting to one-shot mode You need to have curses available at compile time to enable console mode ============ Last updated: Fri Apr 6 16:06:14 2012 Current DC: suzaku.office.mycompany.co.jp (17883139-1d04-46e8-8409-6f9c49476d17) 2 Nodes configured. 1 Resources configured. ============ Node: suzaku.office.mycompany.co.jp (17883139-1d04-46e8-8409-6f9c49476d17): online Node: lelouch.office.mycompany.co.jp (6161c780-53e7-4c9d-aad8-684917590d68): online Resource Group: zero ClusterVIP (heartbeat::ocf:IPaddr2): Started suzaku.office.mycompany.co.jp [root@suzaku ha.d]# ip addr 1: lo:mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo 2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:1b:fc:d3:46:7a brd ff:ff:ff:ff:ff:ff inet 172.16.1.239/24 brd 172.16.1.255 scope global eth0 inet 172.16.1.238/24 brd 172.16.1.255 scope global secondary eth0 ==========
ここで割り当てたVIPは「172.16.1.238」だった。ちゃんとIPアドレスがくっついている事が判る。
次に、自動フェイルバックをするかしないかの設定をする。一身上の都合により、自動フェイルバックはして欲しくないので、これを停止する設定を入れておく。なお、自動フェイルバックをさせたい場合も、導入することをお勧めしておきたい。
/tmp/add2.xmlとかそんなファイルに以下の内容を記述する。まるっとコピペで全然OK
========== <crm_config> <cluster_property_set id="cib-bootstrap-options"> <attributes> <nvpair id="cib-bootstrap-options-default-resource-stickiness" name="default-resource-stickiness" value="INFINITY"/> </attributes> </cluster_property_set> </crm_config> ==========
これを先ほどと同じように cibadmin -U -x /tmp/add2.xml と実行してcib.xmlに反映してやる。
このままだと自動フェイルバックは無効になるので、「やっぱり有効にしたい」という場合は以下のようなコマンドを流してやる。
cibadmin -o crm_config -U -X '<nvpair id="cib-bootstrap-options-default-resource-stickiness" name="default-resource-stickiness" value="0"/>'
やっぱり無効にしたいという場合は以下のコマンド
cibadmin -o crm_config -U -X '<nvpair id="cib-bootstrap-options-default-resource-stickiness" name="default-resource-stickiness" value="INFINITY"/>'
なお、自動フェイルバックが無効の状態で、自動フェイルバックを有効にするコマンドを流したとき、「自動フェイルバックをする必要がある」状態だった時には、その場で直ちに自動フェイルバックが行われるので要注意のこと。
次はいよいよAsteriskのインストールなどなど。
コメント 0