hnakamur’s blog

ものすごい勢いで忘れる私のために未整理でもいいからとりあえずメモ

2009-08-21

CentOSでheartbeatを使おうとしたがうまくいかず

2009-08-27追記: その後keepalivedに乗り換えました

CentOS-Testingからkeepalivedを入れてVRRPの実験に書きました。

選定理由

手元の本ではkeepalivedを使っていたので当初そちらにしようかと思いましたが、yum searchでは見つかりませんでした。調べてみると同等の機能としてheartbeatというパッケージがあるらしい。23. High Availability LVS: Failover protectionには以下のような説明がありました。

This is handled by having a redundant director available. Director failover is handled in the Ultra Monkey Project by heartbeat. Other code used for failover is vrrpd in keepalived.

Ultra Monkey Projectもyum searchでは見つからず、また調べてみるとheartbeat-ldirectordというパッケージで同等の機能が使えるっぽい。ということでこちらを試すことにしました。

セットアップ

以下のサイトを参考にしました。

$ sudo yum install ipvsadm heartbeat heartbeat-ldirectord

haclusterユーザが既に存在するという旨のエラーが出てheartbeatがインストールされないので、再度行う。

$ sudo yum install heartbeat

設定ファイル作成

/etc/ha.d/ha.cf

$ cd /etc/ha.d
$ sudo cp /usr/share/doc/heartbeat-2.1.3/ha.cf .
$ sudo vi ha.cf

変更内容

--- ha.cf       2009/08/21 10:57:54     1.1
+++ ha.cf       2009/08/21 11:42:22
@@ -49,7 +49,7 @@
 #
 #      keepalive: how long between heartbeats?
 #
-#keepalive 2
+keepalive 2
 #
 #      deadtime: how long-to-declare-host-dead?
 #
@@ -57,12 +57,12 @@
 #              split-brain (or cluster partition) problem.
 #              See the FAQ for how to use warntime to tune deadtime.
 #
-#deadtime 30
+deadtime 30
 #
 #      warntime: how long before issuing "late heartbeat" warning?
 #      See the FAQ for how to use warntime to tune deadtime.
 #
-#warntime 10
+warntime 10
 #
 #
 #      Very first dead time (initdead)
@@ -72,12 +72,12 @@
 #      we have a separate dead time for when things first come up.
 #      It should be at least twice the normal dead time.
 #
-#initdead 120
+initdead 120
 #
 #
 #      What UDP port to use for bcast/ucast communication?
 #
-#udpport       694
+udpport        694
 #
 #      Baud rate for serial ports...
 #
@@ -92,7 +92,7 @@
 #
 #      What interfaces to broadcast heartbeats over?
 #
-#bcast eth0            # Linux
+bcast  eth0            # Linux
 #bcast eth1 eth2       # Linux
 #bcast le0             # Solaris
 #bcast le1 le2         # Solaris
@@ -212,8 +212,8 @@
 #
 #      Tell what machines are in the cluster
 #      node    nodename ...    -- must match uname -n
-#node  ken3
-#node  kathy
+node   vm10
+#node  vm11
 #
 #      Less common options...
 #
@@ -255,6 +255,7 @@
 #
 #respawn userid /path/name/to/run
 #respawn hacluster /usr/lib/heartbeat/ipfail
+respawn root /usr/lib/heartbeat/pingd -m 100 -d 5s -a default_ping_set
 #
 #      Access control for client api
 #              default is no access
@@ -324,7 +325,7 @@
 #      more infomartion can be fould in http://www.linux-ha.org/ha_2ecf_2fUseLogdDirective
 #      Setting use_logd to "yes" is recommended
 #
-# use_logd yes/no
+use_logd yes
 #
 #      the interval we  reconnect to logging daemon if the previous connection failed
 #      default: 60 seconds
@@ -342,3 +343,5 @@
 #      will be compressed, the default is 2 (KB)
 #compression_threshold 2

+#      Enable cluster resource manager
+crm yes

なお、ja/pingd_ja: Linux HAによるとpingdはipfailにとって代わるコマンドらしい。

/etc/ha.d/logd.cf

$ sudo cp /usr/share/doc/heartbeat-2.1.3/logd.cf .
$ sudo vi logd.cf

変更内容

--- logd.cf     2009/08/21 11:45:09     1.1
+++ logd.cf     2009/08/21 11:45:46
@@ -1,18 +1,18 @@
 #      File to write debug messages to
 #      Default: /var/log/ha-debug
-#debugfile /var/log/ha-debug
+debugfile /var/log/ha-debug
 
 #
 #
 #      File to write other messages to
 #      Default: /var/log/ha-log
-#logfile       /var/log/ha-log
+logfile        /var/log/ha-log
 
 #
 #
 #      Facility to use for syslog()/logger 
 #      Default: daemon
-#logfacility   daemon
+logfacility    none
 
 
 #      Entity to be shown at beginning of a message

/etc/ha.d/authkeys

$ sudo cp /usr/share/doc/heartbeat-2.1.3/authkeys .
$ sudo chmod 600 /etc/ha.d/authkeys
$ sudo vi authkeys

変更内容

--- authkeys    2009/08/21 11:46:47     1.1
+++ authkeys    2009/08/21 11:47:40
@@ -20,7 +20,7 @@
 #      crc adds no security, except from packet corruption.
 #              Use only on physically secure networks.
 #
-#auth 1
-#1 crc
+auth 1
+1 crc
 #2 sha1 HI!
 #3 md5 Hello!

VMクローン

インストールや設定ファイルの変更をvm10と同様にvm11でも行うのは手間なので、vm10の1台でセットアップして、KVMのゲストOSイメージをコピーの手順でvm11を作り直しました。こっちのほうが楽です。

動作実験するも問題発生

サービス開始。2台で実行。

$ sudo /etc/init.d/heartbeat start

モニターしてみる。1台で実行。しかしエラー発生。

$ /usr/sbin/crm_mon -i 3
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode
Critical: Unable to connect to the CIB

調べてみると既知バグで0003226: heartbeat crm_mon not compiled with ncurses - CentOS Bug Trackerに登録されていました。

CentOSのyumレポジトリにrpmforgeを追加

yum-prioritiesを導入

AdditionalResources/Repositories/RPMForge - CentOS Wikiを参考にしました。

$ sudo yum install yum-priorities
$ sudo vi /etc/yum.repos.d/CentOS-Base.repo

変更内容

--- /etc/yum.repos.d/CentOS-Base.repo   2009/08/21 08:48:25     1.1
+++ /etc/yum.repos.d/CentOS-Base.repo   2009/08/21 08:56:14     1.3
@@ -17,6 +17,7 @@
 #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
 gpgcheck=1
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
+priority=1

 #released updates
 [updates]
@@ -25,6 +26,7 @@
 #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
 gpgcheck=1
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
+priority=1

 #packages used/produced in the build but not released
 [addons]
@@ -33,6 +35,7 @@
 #baseurl=http://mirror.centos.org/centos/$releasever/addons/$basearch/
 gpgcheck=1
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
+priority=1

 #additional packages that may be useful
 [extras]
@@ -41,6 +44,7 @@
 #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
 gpgcheck=1
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
+priority=1

 #additional packages that extend functionality of existing packages
 [centosplus]
@@ -50,6 +54,7 @@
 gpgcheck=1
 enabled=0
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
+priority=2

 #contrib - packages by Centos Users
 [contrib]
@@ -59,3 +64,4 @@
 gpgcheck=1
 enabled=0
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
+priority=2

rpmforgeのセットアップ

$ wget http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
$ sudo rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
$ rpm -K rpmforge-release-0.3.6-1.el5.rf.i386.rpm 
$ sudo rpm -i rpmforge-release-0.3.6-1.el5.rf.i386.rpm
$ sudo vi /etc/yum.repos.d/rpmforge.repo

変更内容

--- /etc/yum.repos.d/rpmforge.repo      2009/08/21 09:08:58     1.1
+++ /etc/yum.repos.d/rpmforge.repo      2009/08/21 09:09:11
@@ -9,3 +9,4 @@
 protect = 0
 gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
 gpgcheck = 1
+priority = 11

設定の確認

$ sudo yum check-update

rpmforgeの行が出ればOK。

virsh consoleを使うためにCentOSのシリアル端末を設定

CentOSのシリアル端末を設定

Setting up a serial console | HowtoForge - Linux Howtos and Tutorialsを参考にしました。

# vi /etc/inittab
S0:12345:respawn:/sbin/agetty ttyS0 115200 # この行を追加
1:2345:respawn:/sbin/mingetty tty1
# vi /etc/grub.conf
serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 # この行を追加
terminal --timeout=5 serial console # この行を追加
title CentOS (2.6.18-128.4.1.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-128.4.1.el5 ro root=/dev/VolGroup00/LogVol00 console=tty0 console=ttyS0,115200n8 # console以降を追加
        initrd /initrd-2.6.18-128.4.1.el5.img

再起動すればシリアル端末が使えるようになります。

virsh consoleからの利用手順

まずゲストOSを起動します。

$ sudo virsh start vm10

ゲストOSが事前に起動済みの状態で、シリアル端末に接続します。

$ sudo virsh console vm10

シリアル端末から切断する方法はわかりませんでした。screenを使っていれば、別端末に切り替えてvirshのPIDを調べてkillするか、端末を切り替えずにscreenのkillコマンドでウィンドウごとkillすることができます。screenってほんと便利ですね。

kenyaさんからのコメントでCtrl+](右角括弧)で抜けられることを教わりました。これは便利です。

ブログ アーカイブ