2013年の話題としては今更感がありますが、LVSのHash Table Sizeを変更するために、EC2上のCentOS 6.3でカーネルを再構築したのでメモしておきます。
ちなみにAmazon Linux AMIだとカーネルのバージョンが新しいので、/etc/modprobe.d/ipvs.conf とかに
options ipvs conn_tab_bits=20
とか書いておくと、再起動時に変更できます。
下準備
CentOSの公式AMIからEphemeral Disk、またはEBS付きでインスタンスを起動します。
https://aws.amazon.com/marketplace/pp/B00A6L6F9I
起動したらログインしてディスクをマウント。
mkdir /mnt/vol #mkfs.ext4 /dev/xvdf mount /dev/xvdf /mnt/vol
ビルド・rpmの作成
# カーネルのバージョンは 2.6.32-279 # 必要なパッケージのインストール yum install -y asciidoc binutils-devel bison elfutils-libelf-devel gcc hmaccalc kernel-devel make newt-devel patchutils perl-ExtUtils-Embed python-devel redhat-rpm-config rpm-build xmlto zlib-devel # rpmbuildの設定 mkdir /mnt/vol/rpmbuild ln -s /mnt/vol/rpmbuild ~/rpmbuild mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros # srpmをインストール rpm -ihv http://vault.centos.org/6.3/os/Source/SPackages/kernel-2.6.32-279.el6.src.rpm # ソースコードの展開 cd ~/rpmbuild/SPECS rpmbuild -bp --target $(uname -m) kernel.spec cd ~/rpmbuild/BUILD/kernel-2.6.32-279.el6/linux-2.6.32-279.el6.x86_64 # EXTRAVERSIONを設定 sed -i -r 's|^EXTRAVERSION =.*|EXTRAVERSION = -279.el6.x86_64.lvs|' Makefile # 念のため… make clean && make mrproper # CONFIG_IP_VS_TAB_BITSを変更 cp /boot/config-2.6.32-279.el6.x86_64 .config sed -i -r 's|^CONFIG_IP_VS_TAB_BITS=.*|CONFIG_IP_VS_TAB_BITS=20|' .config make oldconfig # rpmの作成 make rpm
rpmの作成完了まで c1.xlargeで26分、m3.2xlargeで23分ほどかかりました。
インストール
# カーネルのインストール rpm -ihv kernel-2.6.32279.el6.x86_64.lvs-1.x86_64.rpm # initrdの作成 mkinitrd /boot/initramfs-2.6.32-279.el6.x86_64.lvs.img 2.6.32-279.el6.x86_64.lvs
/boot/grub/grub.confを以下のように修正します。
default=0 timeout=1 title CentOS (2.6.32-279.el6.x86_64.lvs) root (hd0) kernel /boot/vmlinuz-2.6.32-279.el6.x86_64.lvs root=/dev/xvde ro initrd /boot/initramfs-2.6.32-279.el6.x86_64.lvs.img title CentOS-6.3-x86_64-GA-03 2.6.32-279.el6.x86_64 root (hd0) kernel /boot/vmlinuz-2.6.32-279.el6.x86_64 root=/dev/xvde ro initrd /boot/initramfs-2.6.32-279.el6.x86_64.img
その後、再起動。
動作確認
[root@ip-10-0-198-140 ~]# uname -r
2.6.32-279.el6.x86_64.lvs
[root@ip-10-0-198-140 ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=1048576)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
一応、ビルドしたrpmはアップしておきます。
CentOS 6.3の公式AMIでは使えると思います。
https://docs.google.com/file/d/0B7Ozt7qNZ1flS2JQUlFDWEN4SEU/edit