第68日目:【雪だるま】ucarp動かしてみます。が、悩みも・・・
|
どうも、('A`)です。
えーと、昨日夜に復旧作業を終えて、一息ついていたら緊急連絡が入りまして・・・
「メールが送受信できないんです〜」と言うのでサーバを見ると、メールボックスの
入っているパーティションで inode (ファイル管理システムで使う各ファイルの基本
情報を格納するエリア)が100%使われていました。トホホ。。。
どうもメールがいっぱい溜まっていて、もう格納できない状態でした。
お客様に連絡して、不要なメールデータの削除を行なったのですが、その数52万件!
削除が終わったのが明け方5時過ぎでした・・・
あと('A`)が今抱えている悩みがあります。
2週間前から納品されてきているA-Tigerの4台ですが、サーバをセットアップし、
Apacheとか内包したDNSサーバが稼働する状態までもっていっても、なぜか
原因不明の接続エラーを起こします。
その為、お客様にサーバを渡そうにも、渡せない状態です。
(こんな症状が出るサーバ、渡せないです。。。)
ちょっと箇条書きにすると、こうなります。
・サーバ自体はダウンしていない。
・短い時は5〜10分、長い時だとサーバリブートをしないと
外部と接続できない。
・ハードウェアを調べたが、どこも異常は無い。
・スイッチの設定も調べたが、問題は無い。
・不通状態になった時、スイッチ側のポートを再起動しても
通信は復旧しない。
・サーバ側の方で /etc/netstart を実行し、ネットワーク定義の再読み込みを
行なうと、通信は復旧する。
・不通状態のサーバのログに、sshdで以下のメッセージが記録されている。
ssh_msg_send: write
|
ハードでもない、スイッチでもない、、、サーバ側の設定なのか?
でもなあ、同じパッケージで同じ様にセットアップした他のA-Tigerサーバ達
(tiger3502-3506)では発生していないんだよなあ。
IP変えて、接続先の通信スイッチを変えても起きるんだよなあ・・・
今、唯一の手掛かりとなる「ssh_msg_send: write」を調べているのですが、
まだ解決方法とかが見つかっていません。
あと、セットアップで使用しているパッケージについても再度調べています。
もしこの日記をご覧の皆さんでこの症状について何か知っている方がいましたら
一報いただけると助かります。
さて、本日はいよいよbanana3239(c21)とbanana3244(c24)でucarpを動かす作業を
おこないます。
まだ準備が出来ていませんが、うまくうごくといいなあ。。。
作業が終わったら、また報告します。
それでは、また
[追記 13:00]
ucarpの稼働とテストが終わりました。
Love Affairスレでむむむさんが凄く詳しい説明をされていますが、まずは
('A`)作業した順序で説明します。
なお、作業開始時点での2台のサーバの状態は以下の通りです。
(c21ではmatdは止まっていて、c24でmatdが動いている状態です。)
・banana3239(c21)
matdは休止状態(svc -h /var/service/matd を適用)
matd.cf で参照されているIPは 127.0.0.1に変更済
メインのNIC(em0)には 206.223.150.14 は既に外されている
もう1つのNIC(em1)には 10.0.0.1が割り当て済
・banana3244(c24)
matdは稼働中
matd.cf で参照されているIPは 206.223.150.14
メインのNIC(em0)には 206.223.150.14 を割り当て済
もう1つのNIC(em1)には 10.0.0.2が割り当て済
では、banana3239(c21)をマスタ、banana3244(c24)をバックアップ(スタンバイ)として
動く様にucarpを作りこみます。
まずは以下の作業をおこない、c24のmatdを休止状態にしました。
1) emacs /usr/local/etc/matd.cf
以下の行を修正する
(旧) listen=206.223.150.14:80
(新) listen=127.0.0.1:80
2) cd /var/service
svc -h /var/service/matd
3) emacs /etc/rc.conf
以下の行をコメント化する
(旧)ifconfig_em0_alias1="inet 206.223.150.14 netmask 255.255.255.255"
(新)#ifconfig_em0_alias1="inet 206.223.150.14 netmask 255.255.255.255"
4) ifconfig em0 inet 206.223.150.14 delete を実行
→ オンライン状態で 206.223.150.14 が外されます。
|
で、次に ucarp を動かす為の各種設定ファイルを作っていきます。
1) ucarp専用のディレクトリを作る。
mkdir /home/ucarp
chmod +t /home/ucarp
mkdir /home/ucarp/log
mkdir /home/ucarp/log/main
chown root:wheel /home/ucarp/log/main
|
2) エディタを使って、以下のlog出力用のrunファイルを作る。
(所有者は root:wheel、パーミッションは755)
--------------------------------------------
#!/bin/sh
exec setuidgid users multilog t ./main
--------------------------------------------
エディタで保存したら、以下のコマンド(chmod)でパーミッション変更
chmod +x /home/ucarp/log/run
|
3) エディタを使って、以下の ucarp起動用のrunファイルを作る。
(所有者は root:wheel、パーミッションは755)
ここで、banana3239(c21)とbanana3244(c24)では設定内容が異なりますので
注意して下さい。
emacs /home/ucarp/run と叩いて、以下の内容を記述します。
・banana3239(c21:マスタ)
--------------------------------------------
#!/bin/sh
exec 2>&1
exec env - PATH="/usr/sbin:/sbin:/usr/bin:/bin:/usr/local/bin:/usr/local/sbin" \
ucarp --preempt --interface=em1 \
--srcip=10.0.0.1 \
--vhid=1 --pass=ほにゃらら \
--addr=206.223.150.14 \
--upscript=/usr/local/etc/zzz-matd-up.sh \
--downscript=/usr/local/etc/zzz-matd-down.sh \
--shutdown
--------------------------------------------
・banana3244(c24:バックアップ)
--------------------------------------------
#!/bin/sh
exec 2>&1
exec env - PATH="/usr/sbin:/sbin:/usr/bin:/bin:/usr/local/bin:/usr/local/sbin" \
ucarp --preempt --interface=em1 \
--srcip=10.0.0.2 \
--advskew=128 \
--vhid=1 --pass=ほにゃらら \
--addr=206.223.150.14 \
--upscript=/usr/local/etc/zzz-matd-up.sh \
--downscript=/usr/local/etc/zzz-matd-down.sh \
--shutdown
--------------------------------------------
エディタで保存したら、以下のコマンド(chmod)でパーミッション変更
chmod +x /home/ucarp/run
|
※解説
runファイルに記述されているパラメータのうち、
・srcip ‥‥ 自サーバに割り当てたucarp用のIP
・pass ‥‥ ucarp間で通信を行なう際に使用するパスワード
・addr ‥‥ 2サーバで使用する共通のIP(つまり大代表IPである206.223.150.14)
・upscript ‥‥ 自分自身がマスタとして稼働する際に実行するスクリプト
・downscript ‥‥ 自分自身がバックアップとして稼働する際に実行する
スクリプト
4) 次にucarp起動時及び切り替え時に実行するスクリプトを作ります。
(所有者は root:wheel、パーミッションは755)
ますは起動時のスクリプト(zzz-matd-up.sh) を /usr/local/etc に
エディタを使って作ります。
--------------------------------------------
#!/bin/sh
_LIP="127.0.0.1"
_VIP="206.223.150.14"
_CFFILE="/usr/local/etc/matd.cf"
_CFFILE_SKEL="/usr/local/etc/matd.cf.skel"
ifconfig em0 $_VIP netmask 255.255.255.255 alias
sed -e "s/%%IPADDR%%/${_VIP}/" < $_CFFILE_SKEL > $_CFFILE
svc -h /var/service/matd
--------------------------------------------
エディタで保存したら、以下のコマンド(chmod)でパーミッション変更
chmod +x /usr/local/etc/zzz-matd-up.sh
|
次に切り替え時のスクリプト(zzz-matd-down.sh) を /usr/local/etc に
エディタを使って作ります。
--------------------------------------------
#!/bin/sh
_LIP="127.0.0.1"
_VIP="206.223.150.14"
_CFFILE="/usr/local/etc/matd.cf"
_CFFILE_SKEL="/usr/local/etc/matd.cf.skel"
sed -e "s/%%IPADDR%%/${_LIP}/" < $_CFFILE_SKEL > $_CFFILE
svc -h /var/service/matd
ifconfig em0 $_VIP delete
--------------------------------------------
エディタで保存したら、以下のコマンド(chmod)でパーミッション変更
chmod +x /usr/local/etc/zzz-matd-down.sh
|
※解説
スクリプト中に記述されているパラメータのうち、
_VIP ‥‥ 2サーバで使用する共通のIP(つまり大代表IPである206.223.150.14)
_CFFILE ‥‥ 書き換え対象となる設定ファイル(ここではmatd.cf)
_CFFILE_SKEL ‥‥ 書き換え用の雛型ファイル(ここではmatd.cf.skel)
%%IPADDR%% ‥‥ 雛型ファイル中の書き換え対象の場所
えーと、、、_LIPって何だっけ?あとで調べておこう。。。
5) matd.cfの雛型ファイルであるmatd.cf.skelを作ります。
cp /usr/local/etc/matd.cd /usr/local/etc/matd.cf.skel
エディタで以下の行を修正する
(旧) listen=206.223.150.14:80
(新) listen=%%IPADDR%%:80
|
6) マスタとして動くbanana3239(c21)のucarpを起動します。
cd /var/service
ln -s /home/ucarp .
svstat /var/service/ucarp/ を実行すると起動を確認できます。
banana3239# svstat /var/service/ucarp/
/var/service/ucarp: up (pid 91432) 10 seconds
banana3239#
|
6) 次にバックアップとして動くbanana3244(c24)のucarpを起動します。
cd /var/service
ln -s /home/ucarp .
svstat /var/service/ucarp/ を実行すると起動を確認できます。
banana3244# svstat /var/service/ucarp/
/var/service/ucarp: up (pid 13426) 5 seconds
banana3244#
|
そして ifconfig コマンドで em0に割り当てられているIPを確認します。
バックアップとして稼働している場合には、共通IP(206.223.150.14)は
現れません
banana3244# ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
ether 00:19:d1:89:dd:cd
inet 206.223.150.150 netmask 0xffffff00 broadcast 206.223.150.255
inet 206.223.150.154 netmask 0xffffffff broadcast 206.223.150.154
media: Ethernet 100baseTX <full-duplex>
status: active
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether 00:1b:21:10:1d:ed
inet 10.0.0.2 netmask 0xffffff00 broadcast 10.0.0.255
media: Ethernet autoselect (1000baseTX <full-duplex>)
status: active
|
この作業が終わった段階で、banana3239(c21)とbanana3244(c24)は以下の状態と
なります。
・banana3239(c21)
matdは休止状態(svc -h /var/service/matd を適用)
ucarpはマスタとして稼働
メインのNIC(em0)には 206.223.150.14 が割り当てられている
もう1つのNIC(em1)には 10.0.0.1が割り当て済
・banana3244(c24)
matdは休止状態(svc -h /var/service/matd を適用)
ucarpはマスタとして稼働
メインのNIC(em0)には 206.223.150.14 が外されている
メインのNIC(em0)には 206.223.150.14 を割り当て済
この状態で、以下の手順でマスタを「停止状態」にしてバックアップがマスタに
切り替わるか確認してみます。
1) banana3239(c21) のucarpを休止状態にする。
banana3239# svc -h /var/service/ucarp
banana3239# svstat /var/service/ucarp
/var/service/ucarp: up (pid 91432) 194 seconds
2) banana3239(c21)のem1を以下のコマンドで停止して、共通IP(206.223.150.14)が
外れているか確認する。
banana3239# ifconfig em1 down
banana3239# ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
ether 00:1c:c0:27:1e:b6
inet 206.223.150.200 netmask 0xffffff00 broadcast 206.223.150.255
inet 206.223.150.204 netmask 0xffffffff broadcast 206.223.150.204
media: Ethernet 100baseTX <full-duplex>
status: active
em1: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether 00:1b:21:0e:24:cc
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
media: Ethernet autoselect (1000baseTX <full-duplex>)
status: active
3) banana3244(c24)のem0に 共通IP(206.223.150.14)が割り当てられているか
確認する。
banana3244# ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
ether 00:19:d1:89:dd:cd
inet 206.223.150.150 netmask 0xffffff00 broadcast 206.223.150.255
inet 206.223.150.154 netmask 0xffffffff broadcast 206.223.150.154
inet 206.223.150.14 netmask 0xffffffff broadcast 206.223.150.14
media: Ethernet 100baseTX <full-duplex>
status: active
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether 00:1b:21:10:1d:ed
inet 10.0.0.2 netmask 0xffffff00 broadcast 10.0.0.255
media: Ethernet autoselect (1000baseTX <full-duplex>)
status: active
で、banana3239(c21)をサーバ内からrebootコマンドで再起動すると、c21がマスタ、
c24がバックアップに切り替わり、稼働しました。
これで、ucarpによる「二重化」の準備ができました。
あと、最後に残っているのは「自動切り離し」機能です。
あ、そうだ。ucarpとmatdの連動部分がまだだった・・・
ちょっと別件が入りましたので、一旦日記更新を終えます。
[追記 16:30]
Love Affairスレでの「熱い期待」に答えて、c.2ch.netをラウンドロビンから
ロードバランサーに切り替えする作業を今おこないました。
毎度恒例の「ぶっつけ本番」でございます・・・orz
まな板にのった鯉の気分です。もう煮て食うなり、焼いて食うなりして下さい。
まあ、DNSの切り替えに最低でも5分(300秒)はかかりますので、もうしばらくお待ちください。
[追記 16:55]
えーと、c.2ch.netは現在ロードバランサー経由でアクセスが始まっています。
いまのところは順調です。いまのところは。。。
で、17:00にロードバランサーのマスタ側(banana3239:c21)を停止状態にします。
(やり方は、banana3239のem1を ifconfig em1 down でダウン状態にします。)
この時に無事バックアップ側(banana3244:c24)がマスタに切り替わって、c.2ch.netに
アクセスが続けば、とりあえず「峠を越えた」と言えるかもしれません。
まあ、こういう「ぶっつけ本番」では、何が起こるか判りませんが。。。
[追記 17:05]
えーと、マスタ側(banana3239:c21)のem1を止めて、ダウン状態にしました。
すると間髪入れずに以下の処理が動きました。
・banana3239(c21)のem0から 206.223.150.14 が削除された。
・banana3244(c24)のem0に 206.223.150.14 が追加された。
で、今マスタはbanana3244(c24)が務めています。
(転送量グラフからもアクセスが移った事を確認しました。)
そして、次は・・・banana3244(c24)もダウン状態にしてしまおう、とスレでは進行しています。
もうね、なんというかね・・・
[追記 17:18]
えーと、banana3244(c24)を17:10にシャットダウンして停止しました。
今はc.2ch.netに全く接続できない状態だと思います。
(私が使っているDocomoの携帯からも「設定時間内に接続できませんでした」と
エラーが出ます。)
で、この後の予定としては、、、
・マスタ機(banana3239:c21)を再起動する
・バックアップ機(banana3244:c24)を再起動する
手筈になっています。
ちょっと不便おかけしますが、もう少し待ってて下さいね。
[追記 17:34]
えーと、banana3239(c21)を再起動し、ロードバランサーを稼働させました。
携帯に機種によって変わってくると思いますが、c.2ch.netにアクセスできる
状態だと思います。
(私が使っているDocomoの携帯からはアクセスできました。)
もう少ししたら、今度はバックアップ機(banana3244:c24)を再起動する予定です。
ちょっと待ってて下さい。
[追記 18:00]
えーと、banana3244(c24)を再起動し、ロードバランサーを稼働させました。
これで一通りの確認作業が終わりました。ご協力ありがとうございました。
でもね、終わった後から('A`)が言うのも何ですが・・・これって「うまくいって
当たり前」なんですよね。
だって、2ちゃんねるの「雪だるま」では現在動いている訳ですから。
で、来週もう一度「実験」が行われる予定です。
今度は「anikiシステム」の稼働を見る、との事。
えーと、「aniki」では matd.cfの置き場所が今と違うから、今のバランサーに
施した設定の幾つかを修正しないといけないなあ。
洗い出しておこう。
('A`)的にはサーバ達がちゃんと動いてくれたのでホッとしていますが、
「波乱」を期待された方々にはちょっと物足りないのかもしれませんね。
難しいです、色んな意味で・・・
まあ、来週は「aniki」が白日の下に晒される訳で、それで勘弁して下さい。
それでは、また。
|
|
|
|
|