SlideShare a Scribd company logo
VPCでkeepalived+LVS
(DSR)
VRRPが使える?
安川さんのスライドを読みました。
http://www.slideshare.net/kentayasukawa/ec2-20334037
VRRPが使える?
あ、VRRP通るのか…
ユニキャストなら
keepalived+LVSが普通に使えるんじゃね?
keepalived+unicast
なんか海外のサイトを見つける…
http://harish11g.blogspot.jp/2012/10/high-availability-
haproxy-amazon-ec2.html
keepalived+unicast
● vrrp_unicast_bind
● vrrp_unicast_peer
みたことない設定。
本家のドキュメントにはない。
本家のソースコードにもない。
http://www.keepalived.org/
keepalived+unicast
ぐぐってたら野良パッチを見つける。
http://1wt.eu/keepalived/
keepalived+unicast
パッチの差分を参考にして
最新版を修正してみた。
● ソースコード
○ https://github.com/winebarrel/keepalived
● rpm
○ http://bit.ly/10yLoVe
動作確認
動作確認
基本情報
● クライアント - curl
○ dagon - 10.0.214.215
● keepalived+LVS
○ cthulhu(MASTER) - 10.0.214.216
○ hastur(BACKUP) - 10.0.214.217
● バックエンド - httpd
○ nyar - 10.0.214.218
○ yog - 10.0.214.219
● VIP
○ 192.168.200.16
動作確認
事前準備
● LVS・バックエンドのENIのSource/Dest Check
をdisabledにする
● バックエンドでiptablesの設定
sudo iptables -t nat -A PREROUTING -d 192.168.200.16 -j REDIRECT
動作確認
VPCのRoute Table
動作確認 - keepalived.cnf(cthulhu)
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.16
}
vrrp_unicast_bind 10.0.214.216
vrrp_unicast_peer 10.0.214.217
notify_master "/etc/keepalived/notify_master.sh"
}
virtual_server_group VSG_1 {
192.168.200.16 80
}
virtual_server group VSG_1 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
real_server 10.0.214.218 80 {
weight 1
HTTP_GET {
url {
path /
}
}
}
real_server 10.0.214.219 80 {
weight 1
HTTP_GET {
url {
path /
}
}
}
}
動作確認 - keepalived.cnf(hastur)
! Configuration File for keepalived
global_defs {
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.200.16
}
vrrp_unicast_bind 10.0.214.217
vrrp_unicast_peer 10.0.214.216
notify_master "/etc/keepalived/notify_master.sh"
}
virtual_server_group VSG_1 {
192.168.200.16 80
}
virtual_server group VSG_1 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
real_server 10.0.214.218 80 {
weight 1
HTTP_GET {
url {
path /
}
}
}
real_server 10.0.214.219 80 {
weight 1
HTTP_GET {
url {
path /
}
}
}
}
動作確認 - notify_master.sh
#!/bin/bash
VIP=192.168.200.16
ROUTE_TABLE_ID=rtb-...
INSTANCE_ID=`curl -s 169.254.169.254/latest/meta-data/instance-id`
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
export AWS_DEFAULT_REGION=ap-northeast-1
aws ec2 delete-route 
--destination-cidr-block $VIP/32 
--route-table-id $ROUTE_TABLE_ID
aws ec2 create-route 
--destination-cidr-block $VIP/32 
--route-table-id $ROUTE_TABLE_ID 
--instance-id $INSTANCE_ID
動作確認 - 起動してみる
cthulhu
hastur
cthulhu> sudo /etc/init.d/keepalived start
cthulhu> ip addr show | grep "global eth0"
inet 10.0.214.216/17 brd 10.0.255.255 scope global eth0
inet 192.168.200.16/32 scope global eth0
cthulhul> sudo 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.200.16:http rr
-> 10.0.214.218:http Route 1 0 0
-> 10.0.214.219:http Route 1 0 0
hastur> sudo /etc/init.d/keepalived start
hastur> ip addr show | grep "global eth0"
inet 10.0.214.217/17 brd 10.0.255.255 scope global eth0
hastur> sudo 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.200.16:http rr
-> 10.0.214.218:http Route 1 0 0
-> 10.0.214.219:http Route 1 0 0
動作確認
dagon> while true; do echo `date +%X`" | "`curl -s 192.168.200.16`; sleep 1; done
05:19:46 PM | nyar OK
05:19:47 PM | yog OK
05:19:48 PM | nyar OK
05:19:49 PM | yog OK
05:19:50 PM | nyar OK
05:19:51 PM | yog OK
05:19:52 PM | nyar OK
05:19:53 PM | yog OK
05:19:54 PM | nyar OK
05:19:55 PM | yog OK
05:19:56 PM | nyar OK
05:19:57 PM | yog OK
05:19:58 PM | nyar OK
05:19:59 PM | yog OK
05:20:00 PM | nyar OK
dagonからリクエストを投げる
cthulhuのkeepalivedを殺す
動作確認
cthulhu> sudo killall -9 keepalived
05:22:08 PM | yog OK
05:22:09 PM | nyar OK
05:22:10 PM | yog OK
05:22:11 PM | nyar OK # ←このへんで殺した
05:22:12 PM | yog OK
05:22:13 PM | nyar OK
05:22:14 PM | yog OK
05:22:15 PM | nyar OK
sudo killall -9 keepalived
hastur> ip addr show | grep "global eth0"
inet 10.0.214.217/17 brd 10.0.255.255 scope global eth0
inet 192.168.200.16/32 scope global eth0
keepalived と LVS の世界が
戻ってきたよー!
5/4に同じネタをやっている人がいた…orz
http://khanhman.com/?p=12
去年、MLに投稿されたようです。
http://permalink.gmane.org/gmane.linux.keepalived.devel/3787
その後は不明…

More Related Content

EC2でkeepalived+LVS(DSR)