企業級負載均衡集羣-----LVS(二)-----DR模式下的健康檢查和DR模式之調度器高可用
當後端服務器掛了…
1.爲什麼要做健康檢查呢?
如果我們的後端服務器掛了,那麼會出現什麼情況呢?下面我們通過實驗說明一下
第一步:
宕掉server2的apache
第二步:
再次測試:
總結:
從上面的實驗我們發現,如果後端真實服務器出現問題之後,當客戶去訪問時,會返回一個錯誤的頁面,返回錯誤的就是出現問題的後端服務器。所以我們需要對後端服務器做健康檢查,保證只返回正確的頁面提供給用戶。
那麼,我們應該怎樣操作才能保證不會出現問題呢?
2.實驗環境部署
給sever1配置高可用的yum源:
3.部署ldirectord
rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
cd /etc/ha.d/
ls
4.編輯 ldirectord的配置文件
vim ldirectord.cf
# Global Directives #全局設置
checktimeout=3 #指定定real server出錯的時間間隔
checkinterval=1 #指定ldirectord在兩次檢查之間的時間間隔
autoreload=yes #自動重載配置文件(選yes時,當配置文件發生變化,自動載入配置信息)
quiescent=no
#當一個節點在 checktimeout 設置的時間週期內沒有響應是它是 “ 靜止的 ” (它的權重爲0),當你設置了這個選項後,ldirectord 將 會從 IPVS 表中移除真實服務器而不是 “ 停止 ” 它,從 IPVS 表移除節點將中斷現有的客戶端連接,並使 LVS 丟掉所有的連接跟蹤記錄和持續連接模板,如果 你不將這個選項設置爲 no,當某個節點崩潰時,對某些客戶端計算機而言可能會顯示爲集羣關閉了,因爲在這個節點崩潰前這些客戶端計算機被分配給它了,而連接跟蹤記錄和程序連接模板仍然保留在Director上。
logfile="/var/log/ldirectord.log" #設定ldirectord日誌輸出文件路徑
# Sample for an http virtual service
virtual=192.168.43.100:80 #VIP 地址和端口號
real=192.168.43.72:80 gate #指定RealServer地址和端口,同時設定LVS工作模式,gate表示DR模式,ipip表示TUNL模式,masq表示NAT模式。
real=192.168.43.73:80 gate #當所有的real server節點不能工作時,web服務重定向的地址
fallback=127.0.0.1:80 gate #當所有的real server節點不能工作時,web服務重定向的地址
service=http #指定服務類型,對http服務做負載均衡
scheduler=rr #指定調度算法,這裏是rr(輪詢)算法
#persistent=600
#netmask=255.255.255.255
protocol=tcp #指出該服務使用的協議:tcp、udp 或 fwm
checktype=negotiate #指定Ldirectord的檢測類型,默認爲negotiate
checkport=80 #健康檢查使用的端口是 80
request="index.html"
#receive="Test Page" #指定請求和應答字串
#virtualhost=www.x.y.z #虛擬服務器的名稱
5.清除ipvsadm策略&開啓ldirectord服務
我們沒有看到server2的策略,因爲之前我們宕掉了2
6.測試
宕掉server2 :
server2的策略自動消失
重新開啓server2:
server2 的策略自動添加上了
宕掉全部後端服務器
他就會訪問調度器server1的apache,所以我們在默認發佈頁面寫好內容
DR模式之調度器高可用
當調度器掛了…
1.keepalived
keepalived起初是爲LVS設計的,專門用來監控集羣系統中各個服務節點的狀態。如果某個服務器節點出現異常,或者工作出現故障,keepalived將監測到,並將出現的故障的服務器節點從集羣系統中剔除,這些工作全部是自動完成的,不需要人工干涉,需要人工完成的只是修復出現故障的服務節點。
keepalived:保持存活,在網絡裏面即爲保持在線。也就是所謂的高可用或熱備,用來防止單點故障的發生(單點故障是指一旦某一點出現故障就會導致整個系統架構的不可用)
特點:
- 主要提供 loadbalancing(負載均衡)和 high-availability(高可用)功能
- 負載均衡實現需要依賴Linux的虛擬服務內核模塊(ipvs)
- 高可用是通過VRRP協議實現多臺機器之間的故障轉移服務
- 採用多進程的設計模式,每個進程負責不同的功能
2.keepalived工作原理
keepalived是以VRRP協議爲實現基礎的,VRRP全程Virtual Router Redundancy Protocal,即虛擬路由冗餘協議。
VRRP 協議:
- 用於實現路由器冗餘的協議
- 解決靜態路由單點故障問題
- 通過一種競選(election)協議來實現虛擬路由器的功能
虛擬路由冗餘協議,可以認爲是實現高路由高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組裏面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其他機器的默認路由爲該vip),master會發組播,當backup受不到vrrp包時就認爲master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master這樣就可以保證路由器的高可用了。
3.keepalived高可用故障切換轉移原理
在keepalived服務正常工作時,主master節點會不斷地向備節點發送(多播的方式)心跳消息,用以告訴備backup節點自己還活着,當主master節點發生故障時,就無法發送心跳消息,備節點也就因此無法繼續檢測到來自主master節點的心跳了,於是調用自身的接管程序,接管主master節點的IP資源及服務。而主master節點恢復時,備backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢復到原來的備用角色。
4.安裝keepalived
此實驗需要4臺虛擬機,相對於之前的實驗多出一臺server4作爲backup節點
首先,在server1和server4中安裝編譯keepalived:
1. tar zxf keepalived-2.0.20.tar.gz
2. ls
3. cd keepalived-2.0.20
4. ls
5. yum install gcc openssl-devel -y #解決依賴性
6. ./configure --prefix=/usr/local/keepalived --with-init=systemd #編譯keepalived的源碼包
7. make && make install
在server1和server4中安裝編譯keepalived成功
在 server1 和 server4 上面製作軟連接方便keepalived的管理與設置:
1. ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig
2. ln -s /usr/local/keepalived/etc/keepalived/ /etc/
3. ln -s /usr/local/keepalived/sbin/keepalived/ /sbin/
5.還原之前實驗部分內容
因爲keepalived也存在健康檢查,所以在server1中刪除VIP並關閉ldirectord服務:
1. systemctl stop ldirectord.service
2. systemctl disable ldirectord.service
3. ip addr del 172.25.254.100/32 dev eth0
4. ip addr show
6.keepalived的配置文件
在server1中:
[root@server1 keepalived-2.0.20]# cd /etc/keepalived/
[root@server1 keepalived]# ls
keepalived.conf samples
[root@server1 keepalived]# vim keepalived.conf
1 ! Configuration File for keepalived
2 ## 全局配置 ##
3 global_defs { ##全局定義塊
4 notification_email { ##郵件通知
5 root@localhost
6 } ## 設置郵件的發送地址 ##
7 notification_email_from Alexandre.Cassen@firewall.loc
8 smtp_server 127.0.0.1 ##設置 smtp server 地址
9 smtp_connect_timeout 30 ##設置連接 smtp 服務器超時時間
10 router_id LVS_DEVEL ##load balancer 的標識 ID,用於 email 警報
11 vrrp_skip_check_adv_addr
12 # vrrp_strict
13 vrrp_garp_interval 0
14 vrrp_gna_interval 0
15 }
16 ## VRRPD配置 ##
17 vrrp_instance VI_1 {
18 state MASTER #備機改爲 BACKUP,此狀態是由 priority 的值來決定的,當前priority 的值小於備機的值,那麼將會失去 MASTER 狀態
19 interface eth0 #HA 監測網絡接口
20 virtual_router_id 51 #主、備機的 virtual_router_id 必須相同,取值 0-255
21 priority 100 #主機的優先級,備份機改爲 50,主機優先級一定要大於備機
22 advert_int 1 #主備之間的通告間隔秒數
23 authentication {
24 auth_type PASS #設置驗證類型,主要有 PASS 和 AH 兩種
25 auth_pass 1111
26 }
27 virtual_ipaddress { ##指定VIP,即切換到MASTER時,這些IP會被添加,切換到BACKUP時,這些IP會被刪除(傳給ip addr命令),所以每臺服務器可以不用綁定任何的虛擬地址。
28 192.168.43.100
29 }
30 }
31 ## 虛擬服務配置 ##
32 virtual_server 192.168.43.100 80 { #定義虛擬服務器
33 delay_loop 3 #定義虛擬服務器
34 lb_algo rr #lvs 調度算法,這裏使用輪詢
35 lb_kind DR #LVS 是用 DR 模式
36 # persistence_timeout 50 #註釋掉
37 protocol TCP #指定轉發協議類型,有 tcp 和 udp 兩種
38
39 real_server 192.168.43.72 80 { #配置服務節點
40 TCP_CHECK{ ##TCP方式的健康檢查,realserve 的狀態檢測設置部分,單位是秒
41 weight 1 ##默認爲1,0爲失效
42 connect_port 80 #重試次數
43 connect_timeout 3 #重試間隔
44 }
45 }
46
47 real_server 192.168.43.73 80 {
48 TCP_CHECK {
49 weight 1
50 connect_port 80
51 connect_timeout 3
52 }
53 }
server1的配置文件配置完成後,發給備用機server4並修改:
在server1和server4中開啓服務:
systemctl start keepalived
測試
開啓服務後在server1中可以看到VIP(自動分配vip地址)和寫好的策略(server4中也會有策略):
-
server1正常工作時:
-
server1宕掉時:
發現並不會影響訪問
這時候,,,在server4中查看到VIP(vip地址漂移到server4):
發現server1的VIP消失了
在server4 中發現了VIP,,,
- 再次開啓server1:
發現server1又重新配置上VIP
server4 VIP下線