2012年3月7日水曜日

keepalived 1.2.2とLVSの連携でハマった点

LPIC304の試験の勉強として、keepalivedとLVSを連携させてみようと試みたところ、いくつかはまったので書いておく。

環境は以下の通り。
  • OS : CentOS release 5.6 (Final)
  • Kernel : 2.6.18-238.el5xen
  • keepalived : 1.2.2
keepalivedのコンパイル中に変なことに気付いた。

# tar zxvf keepalived-1.2.2.tar.gz
# cd keepalived-1.2.2
# ./configure
(中略)
Keepalived configuration
------------------------
Keepalived version       : 1.2.2
Compiler                 : gcc
Compiler flags           : -g -O2 -DETHERTYPE_IPV6=0x86dd
Extra Lib                : -lpopt -lssl -lcrypto
Use IPVS Framework       : No ←★LVSとの連携ができていない
IPVS sync daemon support : No ←★
Use VRRP Framework       : Yes
Use Debug flags          : No
LVSは入っていて、動作確認までしていたのに、連携できないとはどういうことか!

調べていると、どうやらkernelのソースコードに入っているip_vs.hがないとだめのようだ。
そもそも、kernelのソースコードは入っていなかったのでyumでインストール。
# yum install kernel-devel
# find / -name ip_vs.h
/usr/src/kernels/2.6.18-274.18.1.el5-i686/include/net/ip_vs.h
これでip_vs.hが入れられたので、./configureのオプションに場所を教えてあげる。
# ./configure --with-kernel-dir=/usr/src/kernels/2.6.18-274.18.1.el5-i686
(中略)
Keepalived configuration
------------------------
Keepalived version       : 1.2.2
Compiler                 : gcc
Compiler flags           : -g -O2 -DETHERTYPE_IPV6=0x86dd
Extra Lib                : -lpopt -lssl -lcrypto
Use IPVS Framework       : Yes★←うまくいってます!
IPVS sync daemon support : Yes★←
IPVS use libnl           : No
Use VRRP Framework       : Yes
Use Debug flags          : No
うまくいった!つづいてmake
# make
が、そこで以下のようなエラー(一部略)
/usr/include/sys/types.h:62: error: conflicting types for ‘dev_t’
/usr/src/kernels/2.6.18-274.18.1.el5-i686/include/linux/types.h:22: error: previous declaration of ‘dev_t’ was here
/usr/include/sys/types.h:67: error: conflicting types for ‘gid_t’
/usr/src/kernels/2.6.18-274.18.1.el5-i686/include/linux/types.h:54: error: previous declaration of ‘gid_t’ was here
/usr/include/sys/types.h:72: error: conflicting types for ‘mode_t’
/usr/src/kernels/2.6.18-274.18.1.el5-i686/include/linux/types.h:24: error: previous declaration of ‘mode_t’ was here
/usr/include/sys/types.h:77: error: conflicting types for ‘nlink_t’
/usr/src/kernels/2.6.18-274.18.1.el5-i686/include/linux/types.h:25: error: previous declaration of ‘nlink_t’ was here
/usr/include/sys/types.h:82: error: conflicting types for ‘uid_t’
/usr/include/time.h:105: error: conflicting types for ‘timer_t’
/usr/include/sys/select.h:78: error: conflicting types for ‘fd_set’
/usr/include/sys/types.h:235: error: conflicting types for ‘blkcnt_t’
調べていると、keepalivedはkernelのバージョンによってコンパイルできないことがあるらしい。
参考にしたのはこちら

結局、最新の1.2.2ではなく、古い1.1系の最終版である1.1.20をつかうことに。
これはうまくいった。

0 件のコメント:

コメントを投稿