IPVS 用にカーネルを再構築する

ディストリビューション付属のカーネルではなく、自分でコンパイルしたカーネルを使って IPVS を動かしてみます。
今回はカーネルバージョン 2.6.23.9 を使います。

ソースをダウンロードしてコンフィグ

# cd /usr/src/kernels
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.9.tar.gz
# tar xzf linux-2.6.23.9.tar.gz
# cp /usr/src/kernels/2.6.22.9-61.fc6-i586/.config /usr/src/kernels/linux-2.6.23.9/.config
# cd linux-2.6.23.9
# make oldconfig
...

IPVS を有効にするコンフィグ

make menuconfig を使います。とりあえずこの辺のバージョンならデフォルトでいけますね。

mini-HOWTO

・IP virtual server support

--- Networking support
Networking options  --->
--- IP virtual server support (EXPERIMENTAL)
[*]   IP virtual server debugging
(12)  IPVS connection table size (the Nth power of 2)
---   IPVS transport protocol load balancing support
[*]   TCP load balancing support
[*]   UDP load balancing support
[*]   ESP load balancing support
[*]   AH load balancing support
---   IPVS scheduler
<M>   round-robin scheduling
<M>   weighted round-robin scheduling
<M>   least-connection scheduling
<M>   weighted least-connection scheduling
<M>   locality-based least-connection scheduling
<M>   locality-based least-connection with replication scheduling
<M>   destination hashing scheduling
<M>   source hashing scheduling
<M>   shortest expected delay scheduling
<M>   never queue scheduling
---   IPVS application helper
<M>   FTP protocol helper

・Network packet filtering framework (Netfilter)

--- Networking support
--- Network packet filtering framework (Netfilter)
<M> IPv4 connection tracking support (required for NAT)
[*]   proc/sysctl compatibility with old connection tracking
<M> IP Userspace queueing via NETLINK (OBSOLETE)
<M> IP tables support (required for filtering/masq/NAT)
<M>   IP range match support
<M>   TOS match support
<M>   recent match support
<M>   ECN match support
<M>   AH match support
<M>   TTL match support
<M>   Owner match support
<M>   address type match support
<M>   Packet filtering
<M>     REJECT target support
<M>   LOG target support
<M>   ULOG target support
<M>   Full NAT
<M>     MASQUERADE target support
<M>     REDIRECT target support
<M>     NETMAP target support
<M>     SAME target support (OBSOLETE)
<M>     Basic SNMP-ALG support (EXPERIMENTAL)
<M>   Packet mangling
<M>     TOS target support
<M>     ECN target support
<M>     TTL target support
<M>     CLUSTERIP target support (EXPERIMENTAL)
<M>   raw table support (required for NOTRACK/TRACE)
<M> ARP tables support
<M>   ARP packet filtering
<M>   ARP payload mangling

コンパイル

あとはコンパイルして再起動します。

# make clean
# make bzImage
# make modules
# make modules_install
# make install

ブートローダ

/boot/grub/grub.conf に新しいカーネルの設定が追記されるのを確認します。

default=0           ←0 にして新しいカーネルをデフォルトにしても良いです
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.23.9)
root (hd0,0)
kernel /vmlinuz-2.6.23.9 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.23.9.img
title Fedora Core (2.6.22.9-61.fc6)
root (hd0,0)
kernel /vmlinuz-2.6.22.9-61.fc6 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.22.9-61.fc6.img

リブートして確認

リブートして新しいカーネルで起動します。うまく動けば下のような結果になります。

# uname -r
2.6.23.9

ipvsadm のインストール

新しいカーネルになったら、ipvsadm をインストールします。

まずはカーネルソースのシンボリックリンクを作ります。

# ln -s /usr/src/kernels/linux-2.6.23.9 /usr/src/linux

ipvsadm をダウンロードしてインストールします。
必要となる ipvsadm のバージョンを確認してダウンロードします。

# grep IP_VS_VERSION /usr/src/linux/include/net/ip_vs.h
#define IP_VS_VERSION_CODE      0x010201
# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
# tar xzf ipvsadm-1.24.tar.gz
# cd ipvsadm-1.24.tar.gz
# make
# make install

これで ipvsadm のインストール完了です。

# ipvsadm -v
ipvsadm v1.24 2005/12/10 (compiled with popt and IPVS v1.2.1)

この時点ではモジュールがロードされていませんが、ipvsadm コマンドで LVS の設定をするとその都度ロードされます。

# lsmod | grep ip_vs
# ipvsadm -A -t 192.168.0.5:80 -s rr
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.5:80 rr
# lsmod | grep ip_vs
ip_vs_rr                6528  1
ip_vs                  96128  3 ip_vs_rr
2007年 12月 10日 | Posted in Linux
タグ:
コメントは終了しています。