(1)環境說明
三臺機器:
director(eth0192.168.31.166, vip eth0:0: 192.168.31.110)
real server1(eth0 rip: 192.168. 31.100, vip lo:0: 192.168.31.110)
real server2(eth0 rip: 192.168.31.101, vip lo:0: 192.168.31.110) html
(2)編寫腳本
Director 上執行
#vim /usr/local/sbin/lvs_dr.sh
增長以下內容:
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=192.168.31.110
rs1=192.168.31.100
rs2=192.168.31.101
ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev eth0:0
$ipv –C
$ipv -A -t $vip:80 -s rr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
保存後在兩臺rs上執行
#vim /usr/local/sbin/lvs_dr_rs.sh
增長以下內容:
#! /bin/bash
vip=192.168.31.110
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip 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 nginx
關於arp_ignore和 arp_announce 參考: http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html 算法
而後director上執行
#bash /usr/local/sbin/lvs_dr.sh
兩臺rs上執行
#bash /usr/local/sbin/lvs_dr_rs.sh
(3)測試
Windows下瀏覽器測試訪問 http://192.168.31.110 vim
由於前面咱們已經配置過一些操做,而下面咱們使用 keepaliave操做和以前的操做是有
些衝突的,因此先作一些預先處理。
在 dr上執行:
#ipvsadm –C
#ifconfig eth0:0 down
咱們先來看看爲何要引入 keepalived,前面的 lvs雖然已經配置成功也實現了負載均
衡,可是咱們測試的時候發現,當某臺real server把nginx停掉,那麼director照樣會把請
求轉發過去,這樣就形成了某些請求不正常。因此須要有一種機制用來檢測real server的狀
態,這就是keepalived。它的做用除了能夠檢測 RS狀態外,還能夠檢測備用director的狀態,
也就是說keepalived能夠實現 ha集羣的功能,固然了也須要一臺備用director服務器。備用
director也須要安裝一下 keepalived軟件。兩臺director上都執行以下命令:
#yum install -y keepalived
主 director上安裝好後,編輯配置文件
#vim /etc/keepalived/keepalived.conf
加入或更改以下配置:
vrrp_instance VI_1 {
state MASTER #若是是備用服務器,這裏改成BACKUP
interface eth0
virtual_router_id 51
priority 100 #若是是備用服務器,這裏改成 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.31.110
}
}
virtual_server 192.168.31.110 80 {
delay_loop 6 #(每隔10秒查詢 realserver狀態)
lb_algo wlc #(lvs 算法)
lb_kind DR #(Direct Route)
persistence_timeout 60 #(同一IP 的鏈接 60秒內被分配到同一臺realserver)
protocol TCP #(用TCP 協議檢查 realserver狀態)
real_server 192.168.31.100 80 {
weight 100 #(權重)
TCP_CHECK {
connect_timeout 10 #(10秒無響應超時)
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.31.101 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
} 瀏覽器
以上爲主director的配置文件,從director的配置文件只須要修改以下內容:
state MASTER -> state BACKUP
priority 100 -> priority 90
配置完keepalived 後,須要開啓端口轉發(主從都要作):
#echo 1 > /proc/sys/net/ipv4/ip_forward
而後,兩個rs上執行/usr/local/sbin/lvs_dr_rs.sh 腳本 bash
#bash /usr/local/sbin/lvs_dr_rs.sh
最後,兩個director上啓動keepalived服務(先主後從):
#/etc/init.d/keepalived start 服務器