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 を使います。とりあえずこの辺のバージョンならデフォルトでいけますね。
・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