DR模式
LB上配置
step1:
查看內(nèi)核是否支持lvs
#lsmod |grep ip_vs
安裝lvs
#yum install ipvsadm
安裝依賴:
#yum -y install opensll-devel
安裝keepalived
#wget http://www.keepalived.org/software/keepalived-1.2.24.tar.gz
#tar -zxvf keepalived-1.2.24.tar.gz
#cd keepalived-1.2.24
#./configure --sysconf=/etc --with-kernel-dir=/lib/modules/2.6.32-279.el6.x86_64/
#make && make install
#ln -s /usr/local/sbin/keepalived /sbin/
step2: 配置keepalived
配置keepalived
#vim /etc/keepalived/keepalived.conf
#! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc #告警郵件信息配置
}
notification_email_from Alexandre.Cassen@firewall.loc #指定當(dāng)keepalived出現(xiàn)問(wèn)題時(shí)古程,發(fā)送郵件給哪些用戶拨匆。
smtp_server 192.168.200.1 #smtp server地址
smtp_connect_timeout 30 # smtp連接超時(shí)時(shí)間
router_id LVS_DEVEL #負(fù)載均衡標(biāo)識(shí)脑溢,在局域網(wǎng)內(nèi)應(yīng)該是唯一的
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 10
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
127.0.0.1
}
}
virtual_server 127.0.0.1 9- {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 127.0.0.1 80 {
weight 1
TCP_CHECK {
connect_timeout 3
delay_before_retry 3
connect_port 80
}
}
real_server 127.0.0.1 80 {
weight 1
TCP_CHECK {
connect_timeout 3
delay_before_retry 3
connect_port 80
}
}
}
virtual_server 127.0.0.1 443 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 127.0.0.1 443 {
weight 1
TCP_CHECK {
connect_timeout 3
delay_before_retry 3
connect_port 443
}
}
real_server 127.0.0.1 443 {
weight 1
TCP_CHECK {
connect_timeout 3
delay_before_retry 3
connect_port 443
}
}
}
-
參數(shù)詳解:
** 全局定義參數(shù) **
notification_email:指定當(dāng)keepalived出現(xiàn)問(wèn)題時(shí),發(fā)送郵件給哪些用戶除呵。
notification_emai_from:發(fā)送郵件時(shí)衡楞,郵件的來(lái)源地址薄疚。
smtp_server <DOMAIN|IP> [<PORT>]:smtp服務(wù)器的地址或域名访诱。默認(rèn)端口為25.如:smtp_server smtp.felix.com 25
smtp_helo_name <HOST_NAME>:指定在HELO消息中所使用的名稱。默認(rèn)為本地主機(jī)名锋拖。
smtp_connect_timeout:指定smtp服務(wù)器連接的超時(shí)時(shí)間诈悍。單位是秒祸轮。router_id:指定標(biāo)識(shí)該機(jī)器的route_id. 如:route_id LVS_01
vrrp_mcast_group4 224.0.0.18:指定發(fā)送VRRP組播消息使用的IPV4組播地址。默認(rèn)是224.0.0.18
vrrp_mcast_group6 ff02::12 指定發(fā)送VRRP組播消息所使用的IPV6組播地址侥钳。默認(rèn)是ff02::12
default_interface eth0:設(shè)置靜態(tài)地址默認(rèn)綁定的端口适袜。默認(rèn)是eth0。
lvs_sync_daemon <INTERFACE> <VRRP_INSTANCE> [id <SYNC_ID>] [maxlen <LEN>] [port <PORT>] [ttl <TTL>] [group <IP ADDR>]
設(shè)置LVS同步服務(wù)的相關(guān)內(nèi)容慕趴』居可以同步LVS的狀態(tài)信息鄙陡。
INTERFACE:指定同步服務(wù)綁定的接口冕房。
VRRP_INSTANCE:指定同步服務(wù)綁定的VRRP實(shí)例。
id <SYNC_ID>:指定同步服務(wù)所使用的SYNCID趁矾,只有相同的SYNCID才會(huì)同步耙册。范圍是0-255.
maxlen:指定數(shù)據(jù)包的最大長(zhǎng)度。范圍是1-65507
port:指定同步所使用的UDP端口毫捣。
group:指定組播IP地址详拙。lvs_flush:在keepalived啟動(dòng)時(shí),刷新所有已經(jīng)存在的LVS配置蔓同。
vrrp_garp_master_delay 10:當(dāng)轉(zhuǎn)換為MASTER狀態(tài)時(shí)饶辙,延遲多少秒發(fā)送第二組的免費(fèi)ARP。默認(rèn)為5s斑粱,0表示不發(fā)送第二組免的免費(fèi)ARP弃揽。
vrrp_garp_master_repeat 1:當(dāng)轉(zhuǎn)換為MASTER狀態(tài)時(shí),在一組中一次發(fā)送的免費(fèi)ARP數(shù)量则北。默認(rèn)是5.
vrrp_garp_lower_prio_delay 10:當(dāng)MASTER收到更低優(yōu)先級(jí)的通告時(shí)矿微,延遲多少秒發(fā)送第二組的免費(fèi)ARP。
vrrp_garp_lower_prio_repeat 1:當(dāng)MASTER收到更低優(yōu)先級(jí)的通告時(shí)尚揣,在一組中一次發(fā)送的免費(fèi)ARP數(shù)量涌矢。
vrrp_garp_master_refresh 60:當(dāng)keepalived成為MASTER以后,刷新免費(fèi)ARP的最小時(shí)間間隔(會(huì)再次發(fā)送免費(fèi)ARP)快骗。默認(rèn)是0娜庇,表示不會(huì)刷新。
vrrp_garp_master_refresh_repeat 2: 當(dāng)keepalived成為MASTER以后方篮,每次刷新會(huì)發(fā)送多少個(gè)免費(fèi)ARP名秀。默認(rèn)是1.
vrrp_garp_interval 0.001:在一個(gè)接口發(fā)送的兩個(gè)免費(fèi)ARP之間的延遲」。可以精確到毫秒級(jí)泰偿。默認(rèn)是0.
vrrp_lower_prio_no_advert true|false:默認(rèn)是false。如果收到低優(yōu)先級(jí)的通告蜈垮,不發(fā)送任何通告耗跛。
vrrp_version 2|3:設(shè)置默認(rèn)的VRRP版本裕照。默認(rèn)是2.
vrrp_check_unicast_src:在單播模式中,開啟對(duì)VRRP數(shù)據(jù)包的源地址做檢查调塌,源地址必須是單播鄰居之一晋南。
vrrp_skip_check_adv_addr:默認(rèn)是不跳過(guò)檢查。檢查收到的VRRP通告中的所有地址可能會(huì)比較耗時(shí)羔砾,設(shè)置此命令的意思是负间,如果通告與接收的上一個(gè)通告來(lái)自相同的master路由器,則不執(zhí)行檢查(跳過(guò)檢查)姜凄。
vrrp_strict:嚴(yán)格遵守VRRP協(xié)議政溃。下列情況將會(huì)阻止啟動(dòng)Keepalived:1. 沒(méi)有VIP地址。2. 單播鄰居态秧。3. 在VRRP版本2中有IPv6地址董虱。vrrp_iptables:不添加任何iptables規(guī)則。默認(rèn)是添加iptables規(guī)則的申鱼。
** vrrp_instance **
state MASTER|BACKUP:指定該keepalived節(jié)點(diǎn)的初始狀態(tài)愤诱。
interface eth0:vrrp實(shí)例綁定的接口,用于發(fā)送VRRP包捐友。
use_vmac [<VMAC_INTERFACE>]:在指定的接口產(chǎn)生一個(gè)子接口淫半,如vrrp.51,該接口的MAC地址為組播地址匣砖,通過(guò)該接口向外發(fā)送和接收VRRP包科吭。
vmac_xmit_base:通過(guò)基本接口向外發(fā)送和接收VRRP數(shù)據(jù)包,而不是通過(guò)VMAC接口脆粥。
native_ipv6:強(qiáng)制VRRP實(shí)例使用IPV6.(當(dāng)同時(shí)配置了IPV4和IPV6的時(shí)候)
dont_track_primary:忽略VRRP接口的錯(cuò)誤砌溺,默認(rèn)是沒(méi)有配置的。
track_interface {
eth0
eth1 weight <-254-254>
...
}:如果track的接口有任何一個(gè)出現(xiàn)故障变隔,都會(huì)進(jìn)入FAULT狀態(tài)规伐。
track_script {
<SCRIPT_NAME>
<SCRIPT_NAME> weight <-254-254>
}:添加一個(gè)track腳本(vrrp_script配置的腳本。)
mcast_src_ip <IPADDR>:指定發(fā)送組播數(shù)據(jù)包的源IP地址匣缘。默認(rèn)是綁定VRRP實(shí)例的接口的主IP地址猖闪。
unicast_src_ip <IPADDR>:指定發(fā)送單薄數(shù)據(jù)包的源IP地址。默認(rèn)是綁定VRRP實(shí)例的接口的主IP地址肌厨。
version 2|3:指定該實(shí)例所使用的VRRP版本培慌。
unicast_peer {
<IPADDR>
...
}:采用單播的方式發(fā)送VRRP通告,指定單播鄰居的IP地址柑爸。
virtual_router_id 51:指定VRRP實(shí)例ID吵护,范圍是0-255.
priority 100:指定優(yōu)先級(jí),優(yōu)先級(jí)高的將成為MASTER。
advert_int 1:指定發(fā)送VRRP通告的間隔馅而。單位是秒祥诽。
authentication {
auth_type PASS|AH:指定認(rèn)證方式。PASS簡(jiǎn)單密碼認(rèn)證(推薦),AH:IPSEC認(rèn)證(不推薦)瓮恭。
auth_pass 1234:指定認(rèn)證所使用的密碼雄坪。最多8位。
}
virtual_ipaddress {
<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
192.168.200.17/24 dev eth1
192.168.200.18/24 dev eth2 label eth2:1
}:指定VIP地址屯蹦。
nopreempt:設(shè)置為不搶占维哈。默認(rèn)是搶占的,當(dāng)高優(yōu)先級(jí)的機(jī)器恢復(fù)后登澜,會(huì)搶占低優(yōu)先級(jí)的機(jī)器成為MASTER阔挠,而不搶占,則允許低優(yōu)先級(jí)的機(jī)器繼續(xù)成為MASTER帖渠,即使高優(yōu)先級(jí)的機(jī)器已經(jīng)上線谒亦。如果要使用這個(gè)功能,則初始化狀態(tài)必須為BACKUP空郊。
preempt_delay:設(shè)置搶占延遲。單位是秒切揭,范圍是0---1000狞甚,默認(rèn)是0.發(fā)現(xiàn)低優(yōu)先級(jí)的MASTER后多少秒開始搶占。
通知腳本:
notify_master <STRING>|<QUOTED-STRING> [username [groupname]]
notify_backup <STRING>|<QUOTED-STRING> [username [groupname]]
notify_fault <STRING>|<QUOTED-STRING> [username [groupname]]
notify <STRING>|<QUOTED-STRING> [username [groupname]]
當(dāng)停止VRRP時(shí)執(zhí)行的腳本廓旬。
notify_stop <STRING>|<QUOTED-STRING> [username [groupname]]
smtp_alert
** virtual_server **
virtual_server IP Port | virtual_server fwmark int | virtual_server group string {
delay_loop <INT>:健康檢查的時(shí)間間隔哼审。
lb_argo rr|wrr|lc|wlc|lblc|sh|dh:LVS調(diào)度算法。
lb_kind NAT|DR|TUN:LVS模式孕豹。
persistence_timeout 360:持久化超時(shí)時(shí)間涩盾,單位是秒。默認(rèn)是6分鐘励背。
persistence_granularity:持久化連接的顆粒度春霍。
protocol TCP|UDP|SCTP:4層協(xié)議。
ha_suspend:如果virtual server的IP地址沒(méi)有設(shè)置叶眉,則不進(jìn)行后端服務(wù)器的健康檢查址儒。
virtualhost <STRING>:為HTTP_GET和SSL_GET執(zhí)行要檢查的虛擬主機(jī)。如virtualhost www.felix.com
sorry_server <IPADDR> <PORT>:添加一個(gè)備用服務(wù)器衅疙。當(dāng)所有的RS都故障時(shí)莲趣。
sorry_server_inhibit:將inhibit_on_failure指令應(yīng)用于sorry_server指令。
alpha:在keepalived啟動(dòng)時(shí)饱溢,假設(shè)所有的RS都是down喧伞,以及健康檢查是失敗的。有助于防止啟動(dòng)時(shí)的誤報(bào)。默認(rèn)是禁用的潘鲫。
omega:在keepalived終止時(shí)绿聘,會(huì)執(zhí)行quorum_down指令所定義的腳本。
quorum <INT>:默認(rèn)值1. 所有的存活的服務(wù)器的總的最小權(quán)重次舌。
quorum_up <STRING>:當(dāng)quorum增長(zhǎng)到滿足quorum所定義的值時(shí)熄攘,執(zhí)行該腳本。
quorum_down <STRING>:當(dāng)quorum減少到不滿足quorum所定義的值時(shí)彼念,執(zhí)行該腳本挪圾。
}
real_server
real_server IP Port {
weight <INT>:給服務(wù)器指定權(quán)重。默認(rèn)是1.
inhibit_on_failure:當(dāng)服務(wù)器健康檢查失敗時(shí)逐沙,將其weight設(shè)置為0哲思,而不是從Virtual Server中移除。
notify_up <STRING>:當(dāng)服務(wù)器健康檢查成功時(shí)吩案,執(zhí)行的腳本棚赔。
notify_down <STRING>:當(dāng)服務(wù)器健康檢查失敗時(shí),執(zhí)行的腳本徘郭。
uthreshold <INT>:到這臺(tái)服務(wù)器的最大連接數(shù)靠益。
lthreshold <INT>:到這臺(tái)服務(wù)器的最小連接數(shù)。
}
real_server中的健康檢查
HTTP_GET | SSL_GET {
url {
path <STRING>:指定要檢查的URL的路徑残揉。如path / or path /mrtg2
digest <STRING>:摘要胧后。計(jì)算方式:genhash -s 172.17.100.1 -p 80 -u /index.html
status_code <INT>:狀態(tài)碼。
}
nb_get_retry <INT>:get嘗試次數(shù)抱环。
delay_before_retry <INT>:在嘗試之前延遲多長(zhǎng)時(shí)間壳快。
connect_ip <IP ADDRESS>:連接的IP地址。默認(rèn)是real server的ip地址镇草。
connect_port <PORT>:連接的端口眶痰。默認(rèn)是real server的端口。
bindto <IP ADDRESS>:發(fā)起連接的接口的地址梯啤。
bind_port <PORT>:發(fā)起連接的源端口竖伯。
connect_timeout <INT>:連接超時(shí)時(shí)間。默認(rèn)是5s条辟。
fwmark <INTEGER>:使用fwmark對(duì)所有出去的檢查數(shù)據(jù)包進(jìn)行標(biāo)記黔夭。
warmup <INT>:指定一個(gè)隨機(jī)延遲,最大為N秒羽嫡”纠眩可防止網(wǎng)絡(luò)阻塞。如果為0杭棵,則關(guān)閉該功能婚惫。
}
TCP_CHECK {
connect_ip <IP ADDRESS>:連接的IP地址氛赐。默認(rèn)是real server的ip地址。
connect_port <PORT>:連接的端口先舷。默認(rèn)是real server的端口艰管。
bindto <IP ADDRESS>:發(fā)起連接的接口的地址。
bind_port <PORT>:發(fā)起連接的源端口蒋川。
connect_timeout <INT>:連接超時(shí)時(shí)間牲芋。默認(rèn)是5s。
fwmark <INTEGER>:使用fwmark對(duì)所有出去的檢查數(shù)據(jù)包進(jìn)行標(biāo)記捺球。
warmup <INT>:指定一個(gè)隨機(jī)延遲缸浦,最大為N秒〉可防止網(wǎng)絡(luò)阻塞裂逐。如果為0,則關(guān)閉該功能泣栈。
retry <INIT>:重試次數(shù)卜高。默認(rèn)是1次。
delay_before_retry <INT>:默認(rèn)是1秒南片。在重試之前延遲多少秒掺涛。
}
SMTP_CHECK {
connect_ip <IP ADDRESS>:連接的IP地址。默認(rèn)是real server的ip地址铃绒。
connect_port <PORT>:連接的端口鸽照。默認(rèn)是real server的端口。 默認(rèn)是25端口
bindto <IP ADDRESS>:發(fā)起連接的接口的地址颠悬。
bind_port <PORT>:發(fā)起連接的源端口。
connect_timeout <INT>:連接超時(shí)時(shí)間定血。默認(rèn)是5s赔癌。
fwmark <INTEGER>:使用fwmark對(duì)所有出去的檢查數(shù)據(jù)包進(jìn)行標(biāo)記。
warmup <INT>:指定一個(gè)隨機(jī)延遲澜沟,最大為N秒灾票。可防止網(wǎng)絡(luò)阻塞茫虽。如果為0刊苍,則關(guān)閉該功能。
retry <INT>:重試次數(shù)濒析。
delay_before_retry <INT>:在重試之前延遲多少秒正什。
helo_name <STRING>:用于SMTP HELO請(qǐng)求的字符串。
}
DNS_CHECK {
connect_ip <IP ADDRESS>:連接的IP地址号杏。默認(rèn)是real server的ip地址婴氮。
connect_port <PORT>:連接的端口。默認(rèn)是real server的端口。 默認(rèn)是25端口
bindto <IP ADDRESS>:發(fā)起連接的接口的地址主经。
bind_port <PORT>:發(fā)起連接的源端口荣暮。
connect_timeout <INT>:連接超時(shí)時(shí)間。默認(rèn)是5s罩驻。
fwmark <INTEGER>:使用fwmark對(duì)所有出去的檢查數(shù)據(jù)包進(jìn)行標(biāo)記穗酥。
warmup <INT>:指定一個(gè)隨機(jī)延遲,最大為N秒惠遏±荆可防止網(wǎng)絡(luò)阻塞。如果為0爽哎,則關(guān)閉該功能蜓席。
retry <INT>:重試次數(shù)。默認(rèn)是3次课锌。
type <STRING>:DNS query type厨内。A/NS/CNAME/SOA/MX/TXT/AAAA
name <STRING>:DNS查詢的域名。默認(rèn)是(.)
}
MISC_CHECK {
misc_path <STRING>:外部的腳本或程序路徑渺贤。
misc_timeout <INT>:腳本執(zhí)行超時(shí)時(shí)間雏胃。
user USERNAME [GROUPNAME]:指定運(yùn)行該腳本的用戶和組。如果沒(méi)有指定GROUPNAME志鞍,則GROUPNAME同USERNAME瞭亮。
misc_dynamic:根據(jù)退出狀態(tài)碼動(dòng)態(tài)調(diào)整權(quán)重。
0固棚,健康檢查成功统翩,權(quán)重不變。
1此洲,健康檢查失敗厂汗。
2-255,健康檢查成功呜师。權(quán)重設(shè)置為退出狀態(tài)碼減去2.如退出狀態(tài)碼是250娶桦,則權(quán)重調(diào)整為248
warmup <INT>:指定一個(gè)隨機(jī)延遲,最大為N秒汁汗≈云瑁可防止網(wǎng)絡(luò)阻塞。如果為0知牌,則關(guān)閉該功能祈争。
}
RS 配置
#!/bin/bash
SNS_VIP=172.19.112.101
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0