四臺centos5.5
VIP 192.168.0.82
lvs 192.168.0.81 192.168.0.74
web 192.168.0.72 192.168.0.73
LVS服務器(DR模式,所有IP都在內網)
ln -s /usr/src/kernels/2.6.18-53.e15-i686/ /usr/src/linux
#如果/usr/src/kernels/目錄空先安裝kernel-devel
#yum install kernel-devel
yum install ipvsadm
ipvsadm
lsmod |grep ip_vs
echo "1" > /proc/sys/net/ipv4/ip_forward
#/bin/bash
VIP=192.168.0.82
WEB1=192.168.0.72
WEB2=192.168.0.73
case "$1" in
start)
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:0
/sbin/ipvsadm -C
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $WEB1 -g
/sbin/ipvsadm -a -t $VIP:80 -r $WEB2 -g
touch /var/lock/subsys/ipvsadm >/dev/null 2>&1
echo "lvs status-------------------[OK]"
;;
stop)
/sbin/ipvsadm -C
/sbin/ifconfig eth0:0 down
route del $VIP
rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1
echo "lvs stop"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "lvs stop"
exit 1
else
echo "lvs status-------------------[OK]"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
;;
esac
WEB服務器(兩臺一致)
#!/bin/bash
#description:start realserver
#chkconfig
VIP=192.168.0.82
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up
/sbin/route add -host $VIP1 dev lo:0
echo "1" >/proc/sys/net/ipv4/ip_forward
echo "1" >/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/eth0/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
echo "0" >/proc/sys/net/ipv4/ip_forward
echo "0" >/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/eth0/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
編譯 keepalived-1.1.17(版本不可過高)
yum install libnl-devel
./configure
make
make install
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ #設置爲service方式啓動
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/
/etc/init.d/keepalived start #啓動keepalived
vi /etc/rc.local #添加爲開機自啓動
/usr/local/sbin/keepalived -D -f /etc/keepalived/keepalived.conf
# sed -i 's#net.ipv4.ip_forward = 0#net.ipv4.ip_forward = 1#' /etc/sysctl.conf #開啓內核轉發功能
# sysctl -p #查看是否開啓內核轉發
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bak #備份原始配置文件
vi /etc/keepalived/keepalived.conf
========================================================
!Configuration File for keepalived
global_defs {
#notification_email {
# [email protected] #填寫自己的郵箱出現故障接收報警郵件用
#}
#notification_email_from [email protected]
#smtp_server 127.0.0.1
#smtp_connect_timeout 30
router_id LVS_01 #備份服務器改爲LVS_02
}
vrrp_instance VI_1 {
state MASTER #備份服務器上MASTER爲BACKUP
interface eth0
#lvs_sync_daemon_inteface eth1
virtual_router_id 51
priority 100 #備份服務上優先級要低於100,如改爲90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.82 #這裏填寫VIP地址,也可添加多個VIP
}
}
virtual_server 192.168.0.82 80 { #這裏填寫VIP地址
delay_loop 6
lb_algo rr
lb_kind DR
#nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.0.72 80 { #這裏是真實服務器的IP
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.0.73 80 { #這裏是第二臺真實服務器的IP
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
========================================================
keepalived.conf 文件詳解
安裝完成之後,生成的配置文件放置於:/usr/local/keepalived/etc/keepalived/keepalived.conf
官方提供了不少模板性的配置文件:/usr/local/keepalived/etc/keepalived/samples
建議將配置文件放置於: /etc/keepalived/keepalived.conf
如果運用不指定配置文件,他可以直接調用/etc/keepalived/keepalived.conf中的配置文件
接下來,詳細說明配置文件中的各項含義:
#全局定義塊,以下模塊不可省略,必須存在。
global_defs {
notification_email {
email #如有故障,發郵件報警的地址,一般不採用,可以隨意填寫
}
notification_email_from email
smtp_server host
smtp_connect_timeout num #郵件服務鏈接超時的最長時間
lvs_id string #Lvs負載均衡器標識,在一個網絡裏面,請保持他是唯一性。
}
#VRRP實例定義塊
vrrp_sync_group string { #確定失敗切換(FailOver)包含的路由實例個數。即在有2個負載均衡器的場景,一旦某個負載均衡器失效
group {
string #備用的負載均衡的服務器名
string
}
vrrp_instance string { #前面定義的後備的負載均衡的服務器名
state MASTER|BACKUP #只有MASTER和BACKUP兩種狀態,都必須保持大寫。
interface string #進行通信的端口,如eth0,eth1
mcast_src_ip @IP #真實的IP地址
lvs_sync_daemon_interface string #負載均衡器之間的監控接口。如果採用DR模式,可以保持和通信端口一致。
virtual_router_id num #這個標識是同一個vrrp實例使用唯一的標識。即同一個vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的,同時在整個vrrp內是唯一的。
priority num #權重,數值越大,權重越大,Master大於Slave。
advert_int num #Master和Slave負載均衡器之間同步檢查的時間間隔,單位:秒
smtp_alert
authentication { #Master和Slave之間認證的方式
auth_type PASS|AH
auth_pass string #認證的祕密
}
virtual_ipaddress { # Block limited to 20 IP addresses
IP
IP
IP
}
virtual_ipaddress_excluded { # Unlimited IP addresses number
IP
IP
IP
}
#虛擬服務器定義塊
virtual_server (@IP PORT)|(fwmark num) { #上面定義的virtual_ipaddress,需要添加端口
delay_loop num #服務健康檢查週期,單位:秒
lb_algo rr|wrr|lc|wlc|sh|dh|lblc #負載均衡的調度算法方式,一般使用rr或者wlc。
lb_kind NAT|DR|TUN #負載均衡轉發規則,一般採用DR
(nat_mask @IP) #地址掩碼,可不填
persistence_timeout num #會話保持時間,單位:秒。如果是動態服務,建議開啓。
persistence_granularity @IP
virtualhost string
protocol TCP|UDP #通信協議,有
sorry_server @IP PORT
real_server @IP PORT { #真實IP地址
weight num #權重值,數值越大,權重越高,分發的可能越大。
TCP_CHECK {
connect_port num #檢查端口
connect_timeout num #檢查超時時間
}
}
real_server @IP PORT {
weight num
MISC_CHECK {
misc_path /path_to_script/script.sh
(or misc_path “/path_to_script/script.sh ”)
}
}
real_server @IP PORT {
weight num
HTTP_GET|SSL_GET {
url { # You can add multiple url block
path alphanum
digest alphanum
}
connect_port num
connect_timeout num
nb_get_retry num
delay_before_retry num
}
}
}
keepalived 實例
Master 服務器
#guration File for keepalived (Master Server)
#writed by eric.w.t 2011/04/12
###################################
# global define
###################################
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
####################################
# vrrp define
####################################
vrrp_sync_group VGM {
group {
VI_1
}
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 110
priority 100
advert_int 1
virtual_ipaddress {
10.249.0.208
}
}
#####################################
# virtual machine setting
#####################################
virtual_server 10.249.0.208 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
protocol TCP
persistence_timeout 20
real_server 10.249.0.254 80 {
weight 10
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
Slave 服務器配置
#guration File for keepalived (Slave Server)
#writed by eric.w.t 2011/04/12
###################################
# global define
###################################
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
####################################
# vrrp define
####################################
vrrp_sync_group VGM {
group {
VI_1
}
}
vrrp_instance VI_1 {
state SLAVE
interface eth0
virtual_router_id 110
priority 99
advert_int 1
virtual_ipaddress {
10.249.0.208
}
}
#####################################
# virtual machine setting
#####################################
virtual_server 10.249.0.208 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
protocol TCP
persistence_timeout 20
real_server 10.249.0.254 80 {
weight 10
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
參考文檔 :
http://www.keepalived.org/documentation.html
#調用檢測腳本
vrrp_script check_run {
script "/root/keepalived_check_mysql.sh"
interval 5
}
LVS+keepalived
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.