Keepalived The Definitive Guide
Keepalived The Definitive Guide
KEEPALIVED %H
1 VRRP 1
1.1 VRRPÆ{0 . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 óÅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 KEEPALIVED 3
2.1 KeepalivedOÚ¢y . . . . . . . . . . . . . . . . . . . . . 3
2.1.1 õ?§ª . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.2 ¡ . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.3 WatchDog . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.4 IPVSµC . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 KeepAlivedSC . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 KeepAlived) . . . . . . . . . . . . . . . . . . . . . . . 6
2.3.1 Û . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3.2 VRRPD . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.3 LVS . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3 A^¢~ 15
3.1 ^KeepalivedHA . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1.1 HAProxyÚwebÑÖì . . . . . . . . . . . . . . . 15
3.1.2 Keepalived . . . . . . . . . . . . . . . . . . . . . . 15
3.2 ^KeepalivedLVS . . . . . . . . . . . . . . . . . . . . . . 19
ë©z 21
1Ù VRRP
Keepalived´VRRP{¢y§Ïd30Keepalivedc§·k7
k
)VRRPn"
)VRRPЩ#LuVRRPRFC©1 "
1.1 VRRPÆ{0
3y¢ä¸¥('XInternet)§üIÏ&ÌÅ(end-host)
õê¹e¿vkÔnë"éuù¹§§m´dN
oÀJºÌÅXÛÀ½8ÌÅea´d§ù´¯K"Ï~
)û{kü«µ
• 3ÌÅþ¦^Ä´dÆ('XRIP,OSPF)
• 3ÌÅþ·´d
é²w§3ÌÅþÄ´dÆ´~Ø¢S§Ï+n!
o¤±9´Ä|±Ãõ¯K"@o·´dÒC©6
1"¢Sþ§ù«ª·83^"´§´dì(½ö`%@
'default gateway)%²~¤ü:"Ò
õ·´d§%Ï7
LéäâU)
CØ¢^"
VRRP8Ò´
)û·´dü:æ¯K
VRRPÏL«¿À(election)Æ5Äò´d?ÖLAN¥J
[´dì¥,VRRP´dì"ùpwå5é7§Ïkü'
¶
c:J[´dìÚVRRP´dì"
VRRP´dì
VRRP´dìÒ´´dì§ØLþ¡$1
VRRPDù§S
5¢yVRRPÆ
®§ù´Ôn´dì"VRRP´dì± uõ
J[´dì"
1
´RFC 3768
Ø´2338§XJ\U§Òw2338j
2 VRRP
VRRPJ[´dì
¤¢J[§Ò´`¿Ø´¢S3§´Ü6
Ø´Ôn´d
ì"J[´dìÏ~dõ(Ôn)VRRP´dìÏL,«ª|¤§ÒÐ
'ù
Ôn´dìÑ¿³(pool)p¡§poolé wå5Ò
´´dì§Ù¢SÜkõ"J[´dìI£¡VRID"
MASTERÚBACKUP
3VRRPJ[´d쥧kõÔnVRRP´dì§´ùõ
ÔnÅì¿ØÓó2 §
´d¡MASTERKI´dó§Ù
¦Ñ´BACKUP§MASTER¿¤ØC§VRRPÆ4zVRRP´
dìë¿À§ª¼Ò´MASTER"MASTERk
A3 §'X
PkJ[´dìIP/§·ÌÅÒ´^ùIP/·´d
"PkAMASTERKI=uux'/ÚAARP
¦"
1.2 óÅ
VRRPÏL¿ÀÆ5¢yJ[´dìõU§¤kƩѴ
ÏLIPõÂ(multicast)£õÂ/224.0.0.18¤/ªux"J[´dì
dVRID(0–255)Ú|IP/|¤§é Ly±MAC/
µ00-00-5E-00-01-{VRID} 4 " ¤ ± § 3 J [ ´ d ì ¥ § Ø + X
´MASTER§é Ñ´ÓMACÚIP(¡VIP)"ràÌÅ¿Ø
IÏMASTERUC
?UgC´d§é¦5`§ù«Ìl
´ß²"
3J[´d쥧kMASTERVRRP´dì¬u
xVRRP2w(VRRP Advertisement message)§BACKUPجsÓMASTER§
ا`k?(priority)p"MASTERØ^£BACKUPÂØ2
w¤§õBACKUP¥`k?pù¬sÓMASTER"5 "ù
«sÓ´~¯(<1s)§±yÑÖëY5"
ÑuS5ħVRRP¦^
\Æ?1\"
2
¦+ùwå5éL¤
3
Po´kA
4
ùÒ´o ¡virtual router idoU´0. . . 255
5
ù`²
oIstate§kIpriorityù
1Ù KEEPALIVED
KeepalivedOÚ¢y,{ü§´kاÙÌÒ
ãù
"
2.1 KeepalivedOÚ¢y
Keepalived´pݬzO^§
è(qéN´
wÑù:§p¡k
ùo
8¹"
4 KEEPALIVED
core keepalivedØ%§S§'XÛ)Û§?§éĶ
vrrp Keepalivedvrrpdf?§±9'è"
check keepalivedhealthcheckerf?§8¹§)
¤kèxu
ª±9éA)Û§LVS)Û3ùp¡
libipfwc iptables(ipchains)¥§Ì^5LVS¥firewall-mark"
libipvs* ´¦^LVSI^"
2.1.1 õ?§ª
keepalivedæ^
õ?§Oª§z?§KIØÓõU§·
3¦^LVSÅìþÏ~±wù?§µ
k
·-1ëê5Ømé,
?§§'XØ$1LVSÅìþ§m
éVRRPÒ±
(–P), XJ$1healthcheckerf?§,¦^–C"
2.1.2 ¡
¤¢¡Ò´é©?ÈÚ)Û§Keepalived©
)Û',a§¿Ø´gÚÚ)Û¤k§3^,¬
ÿâ)ÛA§3z¬p¡Ñ±wXXX parser.cù©
§Ò´ù^"
2.1.3 WatchDog
ù«µeJø
éf?§(VRRPÚhealthchecker)i.
2.1.4 IPVSµC
2.2 KeepAlivedSC
SCKeepalivedÚSCÙ¦m
^§~{ü§configure§make§make
installÒ±t½§´·´I{ü`²eùöL§µ
./configure --prefix=/ \
--mandir=/usr/local/share/man \
--with-kernel-dir=/usr/src/kernels/2.6.9-67.EL-smp-i686/
make
make install
`²Xeµ
1. prefix ù½/j§ù©¬8¹e§Bö"
2. mandir ùLinuxXÚ%@man8¹e§Bw"
3confiure(1 §±e¡Ñѵ
Keepalived configuration
------------------------
Keepalived version : 1.1.15
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
Use VRRP Framework : Yes
Use LinkWatch : Yes
Use Debug flags : No
5¿
2.3 KeepAlived)
Keepalived¤kÑ3©p¡§|±'
õ"©naµ
1. Û(Global Configuration)
2. VRRPD
3. LVS
é ² w § Û Ò ´ é keepalivedå § Ø + ´ Ä ¦
^LVS"VRRPD´keepalivedØ%§LVS3¦^keepalived5
Ú+nLVSI¦^§XJ=¦^keepalived5HA2 §LVS
´ØI"
©Ñ´±¬(block)/ª|§z¬Ñ3{Ú}
S"#Ú!mÞ1Ñ´5º"
1
I link watch.cù © § d © 3LinuxS Ø
è ¥ § ´ » a
q/usr/src/kernels/2.6.9-67.EL-smp-i686/net/core/ link watch.c
2
'X`éHAProxyHA½öÙ¦aqHA
2.3 KeepAlived) 7
2.3.1 Û
Û)üf§=¤¢µÛ½Â(global definition)Ú·
/´d(static ipaddress/routes)
Û½Â
Û½ÂÌkeepalivedÏÅÚI£µ
global_defs
{
notification_email
{
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
stmp_connect_timeout 30
router_id my_hostname
}
• smtp *½uxemailsmtpÑÖì§XJ/mé
sendmail{§
±¦^þ¡%@"
• route id$1keepalivedÅìI£"
·/Ú´d
static_ipaddress
{
192.168.1.1/24 brd + dev eth0 scope global
8 KEEPALIVED
...
}
static_routes
{
src $SRC_IP to $DST_IP dev $SRC_DEVICE
...
src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE
}
z1IP§ù
Ñ´Linuxeipù·-ëê§'Xþ
¡ 192.168.1.1/24 brd + dev eth0 scope global§keepalived ª ¬
¦^ip addr add 192.168.1.1/24 brd + dev eth0 scope global 5V\§¤
±ùpÑÎÜip·-5K"
ùÒ´ÛãÜ"
2.3.2 VRRPD
VRRPD)2Ü©:VRRPÓÚ|(synchroization group)ÚVRRP¢
~(VRRP Instance)"
vrrp_sync_group VG_1 {
group {
inside_network # ùp´¢~¶('XVI_1)
outside_network
,
}
notify_master /path/to/to_master.sh
notify_backup /path_to/to_backup.sh
notify_fault "/path/fault.sh VG_1"
2.3 KeepAlived) 9
notify /path/to/notify.sh
smtp_alert
}
• notify-k3ëê§ù
ëêdkeepalivedJøµ$1(GROUP—INSTANCE),$2(group½
öinstance¶i),$3(MASTER—BACKUP—FAULT)
VRRP¢~(instance)
VRRP¢~ÒL«3þ¡mé
VRRPƧù¢~`²
VRRP
A 5 § ' X Ì l !VRID § ± 3 z interfaceþ m é ¢
~"VRRP¢~̽Âvrrp sync groupp¡z|¤£IP"
vrrp_instance inside_network {
state MASTER
interface eth0
dont_track_primary
track_interface {
eth0
eth1
}
mcast_src_ip <IPADDR>
garp_master_delay 10
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
autp_pass 1234
10 KEEPALIVED
virtual_ipaddress {
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
192.168.200.17/24 dev eth1
192.168.200.18/24 dev eth2 label eth2:1
}
virtual_routes {
# src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> dev <STRING> scope <SCOPE> t
src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
192.168.110.0/24 via 192.168.200.254 dev eth1
192.168.111.0/24 dev eth2
192.168.112.0/24 via 192.168.100.254
}
nopreempt
preemtp_delay 300
debug
}
authentication ùã@y
nopreempt ØsÓ§5¿ùU3stateBACKUP
ÌÅþ§
ùÌÅpriority7L', p
debug Debug?O
2.3.3 LVS
LVS )2Ü ©:J [ Ì Å |(virtual server group)Ú J [ Ì
Å(virtual server)"ù
ѬD4ipvsadmëê"
J[ÌÅ|
ùã´À§8´
4RealServerþ,service
±áuõVirtual Server§¿
gèxu"
virtual_server_group <STRING> {
# VIP port
<IPADDR> <PORT>
<IPADDR> <PORT>
12 KEEPALIVED
,
fwmark <INT>
}
J[ÌÅ
virtual server±±e¡3«ª¥?¿«µ
Xe~µ
# zRealServerÑIe¡
real_server <IPADDR> <PORT>
{
weight 1 # %@1§0
inhibit_on_failure # 3ÑÖìèxu}
§òÙweight0§
Ø´lIPVSp¡íØ"
2.3 KeepAlived) 13
# TCPªèxu
TCP_CHECK {
connect_port 80
bindto 192.168.1.1
connect_timeout 4
} # TCP_CHECK
# SMTP ªèxu
SMTP_CHECK
# ùp¿ÂÚHTTPp¡aq
host {
connect_ip <IP ADDRESS>
connect_port <PORT> # %@u25à
14 KEEPALIVED
#MISCèxuª, 1§S
MISC_CHECK
{
# ܧS½´»
misc_path <STRING>|<QUOTED-STRING>
# 1m
misc_timeout <INT>
# X J
misc_dynamic { § healthchecker§ S
òÑGè¬^5ÄNÑÖì(weight).
# £0: èxuOK§Ø?U
# £1: èxu}§0
# £2-255: èxuOK, µ òÑGè-2§
'X£255§@oweight=255-2=253
misc_dynamic
}
} # Realserver
} # Virtual Server
1nÙ A^¢~
ÙÌ0ü«Keepalived¦^§«=¦^KeepalivedHA§
«QHAq^5LVS"
3.1 ^KeepalivedHA
^KeepalivedHA´Xd{ü§·¤k°åÑ3KeepalivedVRRPf
?§þ§
±Ø+LVS"ù!·bü$1HAProxy
ÅìHA§JøVIP"eXeµ
shared IP=192.168.1.1
192.168.1.3 192.168.1.4 192.168.1.11-192.168.1.14 192.168.1.2
-------+------------+-----------+-----+-----+-----+--------+----
| | | | | | _|_db
+--+--+ +--+--+ +-+-+ +-+-+ +-+-+ +-+-+ (___)
| LB1 | | LB2 | | A | | B | | C | | D | (___)
+-----+ +-----+ +---+ +---+ +---+ +---+ (___)
haproxy haproxy 4 cheap web servers
keepalived keepalived
3.1.1 HAProxyÚwebÑÖì
ù Ü © Ø á u © ? Ø S § · ' 5 3haproxy Å ì þ
Keepalived'"
3.1.2 Keepalived
b haporxyÚ à webÑ Ö ì Ñ O Ð
§ y 3 Ò ± m ©
Keepalived
"ù«¹e§Ï·^KeepalivedHA§=virtual
16 A^¢~
routerõU§¤±I¤1Ùp¡£ãÛÚVRRP="
cIO&Eµ
1. VRID—·¦^%@511
3. LBIP—ùpÒ´ühaproxy/£192.168.1.3Ú1.4§¿bc
öMASTER¤
4. `k?–priority§3õBACKUP¿ÀMASTERÿ§`k?p
¬¼À"ùpb192.168.1.3`k?150§, 100
¤±§¢Sµ
J[IP=192.168.1.1
192.168.1.3 192.168.1.4 192.168.1.11-192.168.1.14 192.168.1.2
-------+-----------------+------------+-----+-----+-----+--------+----
| prio:150 | prio:100 | | | | _|_db
+---+----+ +----+---+ +-+-+ +-+-+ +-+-+ +-+-+ (___)
| MASTER | | BACKUP | | A | | B | | C | | D | (___)
+--------+ +--------+ +---+ +---+ +---+ +---+ (___)
haproxy haproxy 4 cheap web servers
keepalived keepalived
ØsÓ
MASTERÑy¯K §BACKUP¬¿À#MASTER§@o
cMASTER#ONLINE §´UY¤MASTER´C¤BACKUPQº
%@¹e§XJvØsÓ§@ocMASTERå5 ¬UYsÓ
¤MASTER§Ò´`§L§Iu)2gµ
1. MASTER->BACKUP
2. BACKUP->MASTER
ùéÖª´ØUN=§Ïd·F"MASTERå5 §
¤BACKUP¤±ØsÓ"Keepalivedp¡Jø
nopreemptù
§ ´ ù U ^ 3stateBACKUP Å ì þ § ´ ·
1
ý´3$ÊB
3.1 ^KeepalivedHA 17
²²F"´MASTERØ?1sÓ§v{§MASTERstate
¤BACKUP"Ò´`192.168.1.3Ú192.168.1.4ÑòstateBACKUP
@o.X´MASTERºsÓj§ÏLpriority§¤±·3üBACKUPþ
¡ÏLØÓpriority54¦å5ÒsÓ§ppriority192.168.1.3¤
ÐMASTER"
SC
MASTERÚBACKUPþSCL§§¦^e¡·-(ùp
b3RedHat Enterprise AS4 Update 4þSC)µ
$wget http://www.keepalived.org/software/keepalived-1.1.17.tar.gz
$tar xzvf keepalived-1.1.17.tar.gz
$cd keepalived-1.1.17
$./configure --prefix=/ \
--mandir=/usr/local/share/man \
--with-kernel-dir=/usr/src/kernels/2.6.9-67.EL-smp-i686/
$make
#make install
#cp keepalived/etc/init.d/keepalived.rh.init /etc/init.d/keepalived
#chmod +x /etc/init.d/keepalived
#cp keepalived/etc/init.d/keepalived.sysconfig /etc/sysconfig/keepalived
#chkconfig --add keepalived
#chkconfig --level 345 keepalived on
MASTER
MASTER—192.168.1.3
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id haproxy-ha
18 A^¢~
vrrp_sync_group VG1 {
group {
VI_1
}
}
vrrp_instance VI_1 {
state BACKUP
smtp_alert
notify_fault "/root/script/notify_mail.sh fault"
notify_master "/root/script/notify_mail.sh master"
nopreempt
interface eth1
track_interface {
eth0
eth1
}
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass fsaf..7&f
}
virtual_ipaddress {
192.168.1.1/24 dev eth1 scope global
}
}
BACKUP
BACKUP—192.168.1.4
BACKUPÚMASTERħk2ØÓ:µ
1. priority 100
3.2 ^KeepalivedLVS 19
2. Ønopreempt
éÄÑÖ
3.2 ^KeepalivedLVS
·be¡/µ
4webÑÖìÏLéLVS?1NݧLVS=uªNAT"éLVSÏ
LKeepalivedHA§
J[IP=192.168.1.1
192.168.1.3 192.168.1.4 192.168.1.11-192.168.1.14 192.168.1.2
-------+-----------------+------------+-----+-----+-----+--------+----
| prio:150 | prio:100 | | | | _|_db
+---+----+ +----+---+ +-+-+ +-+-+ +-+-+ +-+-+ (___)
| MASTER | | BACKUP | | A | | B | | C | | D | (___)
+--------+ +--------+ +---+ +---+ +---+ +---+ (___)
LVS LVS 4 cheap web servers
3LVS¥§õ
AVgµ
lb algo NÝ{§ùp¦^wlc
lb kind =uª§ùp¦^NAT
weight §%@ùpÑ3
SC
SCÚþ!3.1.2ùSC§ùpØ2Kã"
20 A^¢~
MASTERÚBACKUP
KeepalivedÛÚvrrpãÚc!3.1.2§ùp·I
V\virtual serverãµ
virtual_server 192.168.1.1 80 {
delay_loop 3
lb_algo wlc
lb_kind DR
persistence_timeout 1200
protocol TCP
ha_suspend
real_server 192.168.1.11 80 {
weight 3
TCP_CHECK {
connect_timeout 3
}
}
real_server 192.168.1.12 80 {
weight 3
TCP_CHECK {
connect_timeout 3
}
}
}
ë©z
[4] www.keepalived.org
[5] keepalived
è
22 ë©z