Linux CentOS7:LVS+Keepalived負載平衡安裝配置教程,centos7keepalived
一、LVS(Linux Virtual Server)
LVS是Linux Virtual Server的簡寫,意即Linux虛擬伺服器,是一個虛擬伺服器叢集系統,LVS工作在ISO模型中的第四層,由於其工作在第四層,因此與iptables類似,必須工作在核心空間上。因此lvs與iptables一樣,是直接工作在核心中的,叫ipvs,主流的linux發行版預設都已經整合了ipvs,因此使用者只需安裝一個管理工具ipvsadm即可。
ipvs中實現了三種負載平衡技術:
1、VS/NAT ---Virtual Server via Network Address Translation
通過網路位址轉譯,調度器重寫請求報文的目標地址,根據預設的調度演算法,將請求指派給後端真實伺服器;真實伺服器的響應報文通過調度器時,報文源地址被重寫再返回給客戶,完成整個負載調度過程。但通常在流量比較大的情況下會造成調度器的瓶頸。因為服務資料的返回必須通過調度器出去。
2、VS/TUN ---Virtual Server via IP Tunneling
採用NAT技術時,由於請求和響應報文都必須經過調度器地址修正,當客戶請求越來越多時,調度器的處理能力將成為瓶頸。為瞭解決這個問題,調度器 把請求報文通過IP隧道轉寄至真實伺服器,而真實伺服器將響應直接返回給客戶,所以調度器只處理請求報文。由於一般網路服務應答比請求報文大許多,採用 VS/TUN技術後,叢集系統的最大輸送量可以提高10倍。但是目前支援TUN 只有Linux系統
3、VS/DR ---Virtual Server via Direct Routing
VS/DR通過改寫請求報文的MAC地址,將請求發送到真實伺服器,而真實伺服器將響應直接返回給客戶。同VS/TUN技術一樣,VS/DR技術 可極大地提高叢集系統的伸縮性。這種方法沒有IP隧道的開銷,對叢集中的真實伺服器也沒有必須支援IP隧道協議的要求,但是要求調度器與真實伺服器都有一塊網卡連在同一物理網段上。也就是說,在這種結構中,資料從外部到內部真實伺服器的訪問會通過調度器進來,但是真實伺服器對其的應答不是通過調度器出去。 即在大多數情況下,真實伺服器可以通過各自的網關或者專用的網關對資料進行外發,從而降低調度器負載。
LVS優點:
1、抗負載能力強,因為lvs工作方式的邏輯是非常之簡單,而且工作在網路4層僅做請求分發之用,沒有流量,所以在效率上基本不需要太過考慮。在我手裡的 lvs,僅僅出過一次問題:在並發最高的一小段時間內均衡器出現丟包現象,據分析為網路問題,即網卡或linux2.4核心的承載能力已到上限,記憶體和 cpu方面基本無消耗。
2、配置性低,這通常是一大劣勢,但同時也是一大優勢,因為沒有太多可配置的選項,所以除了增減伺服器,並不需要經常去觸碰它,大大減少了人為出錯的幾率。
3、工作穩定,因為其本身抗負載能力很強,所以穩定性高也是順理成章,另外各種lvs都有完整的雙機熱備方案,所以一點不用擔心均衡器本身會出什麼問題,節點出現故障的話,lvs會自動判別,所以系統整體是非常穩定的。
4、無流量,上面已經有所提及了。lvs僅僅分發請求,而流量並不從它本身出去,所以可以利用它這點來做一些線路分流之用。沒有流量同時也保住了均衡器的IO效能不會受到大流量的影響。
5、基本上能支援所有應用,因為lvs工作在4層,所以它可以對幾乎所有應用做負載平衡,包括http、資料庫、聊天室等等。
但是LVS需要手工動態增加命令,所以需要Keepalived來實現自動配合。
二、Keepalived
Keepalived的作用是檢測伺服器的狀態,如果有一台web伺服器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的伺服器從系統中剔除,同時使用其他伺服器代替該伺服器的工作,當伺服器工作正常後Keepalived自動將伺服器加入到伺服器群中,這些工作全部自動完成,不需要人工幹涉,需要人工做的只是修複故障的伺服器。
Keepalived根據設定檔進行監控,向LVS提供資訊,自動檢測各調度器可用性,從而實現虛擬IP(即master機)由哪台機器服務。就是指定哪些機器一塊虛擬出哪個IP。還有在虛擬IP上提供哪個連接埠映射到哪些後端真實伺服器從而實現後端服務的負載平衡(可自動檢測出哪些不可用)
三、環境準備
一般需要4台機器,2台做為雙機備份的調度器(VIP同時只能存在其中一台機上,另一台閑著的),另2台做為真實應用伺服器(realserver)如web伺服器。其中調度器可以增加為多台(浪費),realserver也可以增加為多台。
1、CentOS01 --- MASTER,ip:192.168.1.103
2、CentOS02 --- realserver,ip:192.168.1.104
3、CentOS03 --- realserver,ip:192.168.1.104
4、CentOS04 ---BACKUP,ip:192.168.1.102
四、LVS + Keepalive安裝配置
1、CentOS02中安裝httpd伺服器
yum install httpd
2、CentOS02中啟動httpd
service httpd start
3、CentOS02中http的項目發布到目錄/var/www/html,建立index.html檔案
touch index.html
4、關閉防火牆 --- 所有伺服器
systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall開機啟動firewall-cmd --state #查看預設防火牆狀態(關閉後顯示notrunning,開啟後顯示running)
關閉防火牆後,訪問index.html
5、CentOS02中進入/etc/init.d/目錄,建立realserver指令碼
touch realserver
realserver指令碼內容如下:--- 配置虛擬IP(VIP)
#!/bin/bash#description:realserverSNS_VIP=192.168.1.135 #定義虛IP(VIP). /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_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p >/dev/null 2>&1# -p (default /etc/sysctl.conf) 將標準資訊輸入裝置空檔案echo "RealServer Start OK";;stop)ifconfig lo:0 downroute del $SNS_VIP >/dev/null 2>&1 #route del 刪除本地路由echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/all/arp_announceecho "RealServer Stoped";;*)echo "Usage: $0 {start|stop}" #$0 是指令碼本身的名字exit 1#表示進程正常退出esac#case結束exit 0#表示進程非正常退出
參數說明:arp_ignore、arp_announce,用於
arp_ignore:用來配置對arp請求的響應模式,每種模式表示的含義如下:
0 :(預設值)回應任何網路介面上對任何本地IP地址的arp查詢請求
1 :只回答目標IP地址是來訪網路介面本地IP地址的ARP查詢請求
2 :只回答目標IP地址是來訪網路介面本地IP地址的ARP查詢請求,且來訪IP必須在該網路介面的子網段內
3 :不回應該網路介面的arp請求,而只對設定的唯一和串連地址做出回應
4-7 :保留未使用
8 :不回應所有(本地地址)的arp查詢
arp_announce:用來配置發送arp請求的模式,每種模式含義如下:
0:(預設值)使用任何interface上的任何本地地址,在此模式下無論使用哪個介面發送arp請求,arp請求包裡的源ip地址在arp層不會做修改,也就是arp請求包裡的源ip地址為即將發送ip資料包的源ip地址。
1:避免這個interface的不在目標子網裡的本地地址,當ARP請求包裡的目的IP地址是需要經過路由達到的時候很有用,此時會檢查來訪IP是否為所有介面上的子網段內ip之一,如果該來訪IP不屬於各個網路介面上的子網段內,那麼將採用層級2的方式來進行處理。
2:對arp請求包使用最適當的本地IP地址,在此模式下將忽略即將發送IP資料包的源地址,並嘗試選擇與能與該目的地址通訊的本地地址,首先是選擇與目標IP地址屬於同一子網的介面IP地址。如果沒有合適的地址被發現,將選擇當前的發送網路介面或其他的有可能接受到該ARP回應的網路介面來進行發送,當內網的機器要發送一個到外部的ip包,那麼它就會請求路由器的Mac地址,發送一個arp請求,這個arp請求裡麵包括了自己的ip地址和Mac地址,而linux預設是使用即將發送ip包的源ip地址作為arp裡面的源ip地址(0模式),而不是使用發送裝置上面的,如果設定arp_announce為2,則使用發送裝置上的ip地址。
6、CentOS02中給realserver指令碼授權
chmod 775 /etc/init.d/realserver
7、CentOS02啟動realserver
/etc/init.d/realserver start
8、CentOS03中執行1-7步驟
9、CentOS01中安裝keepalived
yum -y install ipvsadmin keepalived
10、CentOS01中修改/etc/keepalived/keepalived.conf設定檔
global_defs { ##全域配置部分# notification_email { ##下面幾行均為全域通知配置,可以實現出現問題後警示,但功能有限,因此注釋掉,並採用Nagios監視lvs運行情況# admin@toxingwang.com# }# notification_email_from master@toxingwang.com# smtp_server smtp.exmail.qq.com# smtp_connect_timeout 30router_id LVS_DEVEL ##設定lvs的id,在一個網路內應該是唯一的}vrrp_instance VI_1 { ##設定vrrp組,唯一且同一LVS伺服器組要相同state MASTER ##主機LVS伺服器設定為MASTER,備機LVS伺服器設定為BACKUPinterface ens33 # #設定對外服務的介面virtual_router_id 51 ##設定虛擬路由辨別碼priority 100 #設定優先權,數值越大,優先順序越高,backup設定為99,這樣就能實現當master宕機後自動將backup變為master,而當原master恢複正常時,則現在的master再次變為backup。advert_int 1 ##設定同步時間間隔authentication { ##設定驗證類型和密碼,master和buckup一定要設定一樣auth_type PASSauth_pass 1111}virtual_ipaddress { ##設定VIP,可以多個,每個佔一行192.168.1.135}}virtual_server 192.168.1.135 80 {delay_loop 6 ##健全狀態檢查時間間隔,單位slb_algo wrr ##負載平衡調度演算法設定為加權輪叫,詳細調度演算法查看本文中第五項介紹lb_kind DR ##負載平衡轉寄規則nat_mask 255.255.255.0 ##網路遮罩,DR模式要保障真實伺服器和lvs在同一網段persistence_timeout 50 ##會話保持時間,單位s,在會話保持的時間內,繼續訪問虛IP,對應的real_server不變化protocol TCP ##協議real_server 192.168.1.104 80 { ##真實伺服器配置,80表示連接埠weight 3 ##權重TCP_CHECK { ##伺服器檢測方式設定 keepalived的健全狀態檢查方式 有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECKconnect_timeout 5 ##連線逾時時間nb_get_retry 3 ##失敗重試次數delay_before_retry 3 ##失敗重試的間隔時間connect_port 80 ##串連的後端連接埠}}real_server 192.168.1.105 80 {weight 3TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3connect_port 80}}}
11、CentOS01中啟動keepalived
service keepalived start
12、訪問CentOS01中配置的虛IP(VIP)
如果無法訪問,查看日誌:
tail -f /var/log/messages
13、CentOS04中執行9-11 建立備機,注意如下幾點:
(1)步驟10中keepalived.conf檔案中的MASTER改成BACKUP
(2)步驟10中priority的值由100改成99(只要比100下就可以)
五、LVS中的調度演算法
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