keepalived のインストール

2017-01-04

概要

クラスタの勉強にkeepalivedをインストールしてみました。
その時にインストール時のメモです。

構成情報

構成は、2台のノード(192.168.24.151,192.168.24.152)で構成し、仮想IPとして192.168.24.160をフロントとします。

+-----------------------------------------------------------------+
| HOSTNAME | IP ADDRESS | 役割
+-----------------------------------------------------------------+
| ex-test1 | 192.168.24.151 | master
| ex-test2 | 192.168.24.152 | backup
| | 192.168.24.160 | VRRP
+-----------------------------------------------------------------+

keepalivedのインストール(RPMパッケージ)

keepaliveが、yumで提供されていないので、RPMのパッケージを作成します

(1)依存関係のサービスのインストール

インストールに必要なパッケージをyum でインストールします

# yum -y install make kernel kernel-devel rpm-build openssl-devel

(2)作業用ディレクトリに移動

# cd /usr/local/src/

(3)keepaliveをRPMパッケージを作成

ファイルをダウンロード
# wget http://www.keepalived.org/software/keepalived-1.1.20.tar.gz

# tar xvzf keepalived-1.1.20.tar.gz
# cd keepalived-1.1.20
# ./configure

rootグループに変更しないと、以下とのエラーとなるのでrootグループに変更します
error: Bad owner/group: /usr/local/src/keepalived-1.1.20/keepalived.spec
# chown root:root /usr/local/src/keepalived-1.1.20/keepalived.spec

rootグループに変更されたことを確認
# ls -l /usr/local/src/keepalived-1.1.20/keepalived.spec
-rw-r--r-- 1 root 1000 5230 Nov 16 17:47 /usr/local/src/keepalived-1.1.20/keepalived.spec

RPMパッケージを作成及びインストール
# cp -p /usr/local/src/keepalived-1.1.20.tar.gz /usr/src/redhat/SOURCES/
# rpmbuild -ba ./keepalived.spec
# cd /usr/src/redhat/RPMS/i386/
# rpm -ivh keepalived-1.1.20-5.i386.rpm

(4)ipvsadmのインストール

# yum -y install ipvsadm

設定ファイルの編集

(1)設定ファイル(keepalived.conf)を編集

# cd /etc/keepalived/
# mv keepalived.conf keepalived.conf.org
# vi keepalived.conf

マスター側(192.168.24.151)
! Configuration File for keepalived

global_defs {
notification_email {
admin@example.jp
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server localhost
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.24.160
}
}

バックアップ側 (192.168.24.152)
! Configuration File for keepalived

global_defs {
notification_email {
admin@example.jp
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server localhost
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.24.160
}
}

keepalivedの起動

(1)自動起動の設定

# chkconfig keepalived on
# chkconfig --list keepalived
keepalived 0:off 1:off 2:on 3:on 4:on 5:on 6:off

(2)keepaliceの起動

# /etc/init.d/keepalived start
keepalived を起動中: [ OK ]

# ps -ef|grep keepalived|grep -v grep
root 4279 1 0 19:39 ? 00:00:00 keepalived -D
root 4280 4279 0 19:39 ? 00:00:00 keepalived -D

keepaliveの動作確認(PING)

ping で動作確認します。まずは仮想IP(192.168.24.160)の疎通確認します。

$ ping 192.168.24.160
PING 192.168.24.160 (192.168.24.160) 56(84) bytes of data.
64 bytes from 192.168.24.160: icmp_req=1 ttl=64 time=18.5 ms
64 bytes from 192.168.24.160: icmp_req=2 ttl=64 time=0.423 ms
64 bytes from 192.168.24.160: icmp_req=3 ttl=64 time=0.345 ms
64 bytes from 192.168.24.160: icmp_req=4 ttl=64 time=0.557 ms
64 bytes from 192.168.24.160: icmp_req=5 ttl=64 time=0.288 ms
64 bytes from 192.168.24.160: icmp_req=6 ttl=64 time=0.388 ms

意図的にMASTER側のeth0をダウンし、仮想IP(192.168.24.160)に対して疎通確認します。

# ifdown eth0

$ ping 192.168.24.160
PING 192.168.24.160 (192.168.24.160) 56(84) bytes of data.
64 bytes from 192.168.24.160: icmp_req=1 ttl=64 time=18.5 ms
64 bytes from 192.168.24.160: icmp_req=2 ttl=64 time=0.423 ms
64 bytes from 192.168.24.160: icmp_req=3 ttl=64 time=0.345 ms
64 bytes from 192.168.24.160: icmp_req=123 ttl=64 time=0.514 ms
64 bytes from 192.168.24.160: icmp_req=124 ttl=64 time=1.42 ms ← MASTER停止時に、レスポンスが悪くなる
64 bytes from 192.168.24.160: icmp_req=125 ttl=64 time=0.692 ms

一瞬、PINGが止まりますがPINGは通ります

keepaliveの動作確認(HTTP)

WEBサーバを構築して、WEBサーバに仮想IP(192.168.24.160)を振りHPが表示されるか確認します。

(1)apache インストール

# yum -y install httpd
# chkconfig httpd on
# chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

(2)ループバックアインターフェイスの設定

lo:0 を設定
# vi /etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo:0
IPADDR=192.168.24.160
NETMASK=255.255.255.255
NETWORK=192.168.24.0
BROADCAST=192.168.24.255
ONBOOT=yes

lo:0 を起動
# ifup lo:0
# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:8A:31:A4
inet addr:192.168.24.152 Bcast:192.168.24.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe8a:31a4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:349994 errors:0 dropped:0 overruns:0 frame:0
TX packets:242000 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:35563237 (33.9 MiB) TX bytes:22892602 (21.8 MiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:30649 errors:0 dropped:0 overruns:0 frame:0
TX packets:30649 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2244235 (2.1 MiB) TX bytes:2244235 (2.1 MiB)

lo:0 Link encap:Local Loopback
inet addr:192.168.24.160 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:16436 Metric:1

arpへの対応

# vi /etc/sysctl.conf

#下記をの最終行に追加
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2

※設定の意味
・arp_ignore は受信時
・arp_announce は送信時

設定を確認
# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2

(1)keepalived に80を追記

# cp -p /etc/keepalived/keepalived.conf /etc/keepalived/keepalived_YYYYMMDD.conf

# vi /etc/keepalived/keepalived.conf
virtual_server 192.168.24.160 80 {
delay_loop 10
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.24.151 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 30
}
}
real_server 192.168.24.152 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 30
}
}
}

(2)ブラウザで動作確認する

# /etc/init.d/httpd start
httpd を起動中: [ OK ]
# /etc/init.d/keepalived restart
keepalived を停止中: [ OK ]
keepalived を起動中: [ OK ]

(3)1号機(192.168.24.150)を停止して動作確認

# /etc/init.d/httpd stop
httpd を停止中: [ OK ]
※ 1号機で動作確認すると、停止直前にはコンテンツは表示されなくなるが、再度リクエスト(再読込)すると表示される

# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.24.160:http rr
-> ex-test2:http Route 1 0 31

スポンサーリンク