Linux CentOs集群LVS負載均衡的實現
準備工作
環境:Win10下Centos6.4虛擬機。
負載均衡:兩臺(一主一備) LVS + Keepalived。
HTTP服務器:3臺。
給每臺服務器配置IP
1、VIP(virtual ip):用來提供Virtual Server服務的ip地址。分別綁定在Director一個物理網卡上(對外接收請求包)和RS的回環設備上(回環設備需要綁定兩個ip,一個是127.0.0.1,另一個就是vip)。
粗俗的講,負載均衡就是Linux虛擬服務器,也就是再加一個虛擬機,虛擬機有一個IP,也就稱之為VIP;Linux虛擬機本身自己也有一個IP,也就是本地IP,這兩個IP是同等地位。
2、DIP(director ip):與vip綁定在一個物理網卡上,用來轉發請求包到RS的RIP對應的mac上,此設備可以通過arp請求獲取RIP對應的mac地址。
3、RIP(real server ip):綁定在RS上的一個物理網卡上,用來接收從Directory轉發過來的請求包。也就是真實服務器的IP。
說一下我測試的每臺服務器的IP:
LVS負載均衡主(192.168.132.244)、LVS負載均衡備(192.168.132.245)
HTTP1(192.168.132.251)、HTTP2(192.168.132.252)、HTTP3(192.168.132.242)
先給每臺HTTP服務器關閉防火墻試著訪問,啟動httpd服務,然後給出一個明顯區分的標示。這裏把每臺服務器的index.html頁面輸出當前IP。
在每臺臺(HTTP服務器)真實服務器網上上添加LO:0接口,並設置虛擬IP在此接口上
#cd /etc/init.d/ #vim realserver
SNS_VIP=192.168.132.200 #定義VIP變量192.168.132.200 . /etc/rc.d/init.d/functions #導腳本庫 case "$1" in #case語句 $1傳遞給該shell腳本的第一個參數 start) ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP #設置Lo:0 VIP netmask 及廣播/sbin/route add -host $SNS_VIP dev lo:0 #route del 增加本地路由 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 # -p <file(default /etc/sysctl.conf) 將標準信息輸入設備空文件 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $SNS_VIP >/dev/null 2>&1 #route del 刪除本地路由 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}" #$0 是腳本本身的名字 exit 1 #表示進程正常退出 esac #case結束 exit 0 #表示進程非正常退出
#chmod 750 realserver #給此腳本賦予權限 #chkconfig realserver on #設置開機自啟動此腳本 #service realserver start #開啟此腳本 RealServer Start OK #表示啟動成功! #ifconfig #查看一下是否真的成功添加了lo:0接口
OK,查看一下三臺HTTP服務器是否都正常,那麽繼續進行下一步
開始搭建負載均衡
LVS中提供了八種不同的調度算法
詳情請參考:http://blog.csdn.net/u014649204/article/details/25115039
1:輪叫調度(Round-Robin Scheduling)
2: 加權輪叫調度(Weighted Round-Robin Scheduling)
3:最小連接調度(Least-Connection Scheduling)
4:加權最小連接調度(Weighted Least-Connection Scheduling)
5:基於局部性的最少鏈接(Locality-Based Least Connections Scheduling)
6:帶復制的基於局部性最少鏈接(Locality-Based Least Connections with Replication Scheduling)
7:目標地址散列調度(Destination Hashing Scheduling)
8:源地址散列調度(Source Hashing Scheduling)
9:最短預期延時調度(Shortest Expected Delay Scheduling)
10:不排隊調度(Never Queue Scheduling)
對應: rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
LVS負載均衡主機:
先看一下CentOs內核,如果內核是2.6版本以後,那麽LVS虛擬機已經存在於內核中。
在這裏使用Yum安裝Keepalived
yum -y install keepalived
安裝完成之後,使用rpm -ql 命令,查看一下Keepalived的安裝信息
rpm -ql keepalived
根據提示信息裏Keepalived的配置文件路徑,覆蓋配置文件,寫入以下命令。詳細說明在最後說明。
global_defs { # notification_email { # [email protected] # } # notification_email_from [email protected] # smtp_server smtp.exmail.qq.com # smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER #主 interface eth1 #在負載均衡主機上查看一下ip,這裏是eth1。這裏要註意。 virtual_router_id 51 priority 100 #優先級 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.132.200 } } virtual_server 192.168.132.200 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 0 protocol TCP real_server 192.168.132.251 80 { #第一臺HTTP weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.132.252 80 { #第二臺HTTP weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.132.242 80 { #第三臺HTTP weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
然後啟動Keepalived服務,有時候雖然提示啟動成功,但是未必,因為Keepalive並沒有對配置文件的校驗功能,最好查看一下日誌。
service keepalived start //啟動服務 tail -f /var/log/message //查看日誌
啟動成功之後,瀏覽器訪問192.168.132.200觀察變化。
OK,分流成功。
然後我們試著關掉一臺HTTP服務器,觀察訪問發現,其他兩臺仍然可以正常訪問,然後再啟動一下剛才關閉的服務器,又恢復了之前。
LVS負載均衡備機:
global_defs { # notification_email { # [email protected] # } # notification_email_from [email protected] # smtp_server smtp.exmail.qq.com # smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state BACKUP #備 interface eth1 #在負載均衡主機上查看一下ip,這裏是eth1。這裏要註意。 virtual_router_id 51 priority 99 #優先級,低於主機 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.132.200 } } virtual_server 192.168.132.200 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 0 protocol TCP real_server 192.168.132.251 80 { #第一臺HTTP weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.132.252 80 { #第二臺HTTP weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.132.242 80 { #第三臺HTTP weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
配置完成之後,然後試著關掉主機,繼續訪問192.168.132.200,一切正常,主機開機之後,主機繼續做大哥,備機繼續待命。
完畢!
Linux CentOs集群LVS負載均衡的實現