Keepalived熱備 Keepalived+LVS 、 HAProxy伺服器
案例1:Keepalived高可用伺服器 案例3:Keepalived+LVS伺服器 案例1:配置HAProxy負載平衡叢集 1 案例1:Keepalived高可用伺服器 1.1 問題
準備三臺Linux伺服器,兩臺做Web伺服器,並部署Keepalived高可用軟體,一臺作為客戶端主機,實現如下功能: 使用Keepalived實現web伺服器的高可用 Web伺服器IP地址分別為192.168.4.10和192.168.4.20 Web伺服器的漂移VIP地址為192.168.4.80 客戶端通過訪問VIP地址訪問Web頁面 1.2 方案
使用3臺虛擬機器,2臺作為Web伺服器,並部署Keepalived、1臺作為客戶端,拓撲結構如圖-1所示,主機配置如表-1所示。
實現此案例需要按照如下步驟進行。 步驟一:配置網路環境
1)設定Web1伺服器網路引數、配置Web服務 [[email protected] ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.10/24 connection.autoconnect yes [[email protected] ~]# nmcli connection up eth0 [[email protected] ~]# yum -y install httpd [[email protected]
注意:兩臺Web伺服器做相同的操作。 [[email protected] ~]# yum install -y keepalived [[email protected] ~]# yum install -y keepalived 步驟三:部署Keepalived服務
1)修改web1伺服器Keepalived配置檔案 [[email protected] ~]# vim /etc/keepalived/keepalived.conf global_defs { notification_email { [email protected] //設定報警收件人郵箱 } notification_email_from [email protected] //設定發件人 smtp_server 127.0.0.1 //定義郵件伺服器 smtp_connect_timeout 30 router_id web1 //設定路由ID號(實驗需要修改) } vrrp_instance VI_1 { state MASTER //主伺服器為MASTER(實驗需要修改) interface eth0 //定義網路介面(實驗需要修改) virtual_router_id 50 //主輔VRID號必須一致(實驗需要修改) priority 100 //伺服器優先順序,優先順序高優先獲取VIP(實驗需要修改) advert_int 1 authentication { auth_type pass auth_pass forlvs //主輔伺服器密碼必須一致 } virtual_ipaddress { 192.168.4.80 } //誰是主伺服器誰獲得該VIP(實驗需要修改) } 2)修改web2伺服器Keepalived配置檔案 [[email protected] ~]# vim /etc/keepalived/keepalived.conf global_defs { notification_email { [email protected] //設定報警收件人郵箱 } notification_email_from [email protected] //設定發件人 smtp_server 127.0.0.1 //定義郵件伺服器 smtp_connect_timeout 30 router_id web2 //設定路由ID號(實驗需要修改) } vrrp_instance VI_1 { state BACKUP //從伺服器為BACKUP(實驗需要修改) interface eth0 //定義網路介面(實驗需要修改) virtual_router_id 50 //主輔VRID號必須一致(實驗需要修改) priority 50 //伺服器優先順序(實驗需要修改) advert_int 1 authentication { auth_type pass auth_pass forlvs //主輔伺服器密碼必須一致(實驗需要修改) } virtual_ipaddress { 192.168.4.80 } //誰是主伺服器誰配置VIP(實驗需要修改) } 3)啟動服務 [[email protected] ~]# systemctl start keepalived [[email protected] ~]# systemctl start keepalived 4)配置防火牆和SELinux [[email protected] ~]# systemctl stop firewalld [[email protected] ~]# setenforce 0 [[email protected] ~]# systemctl stop firewalld [[email protected] ~]# setenforce 0 步驟四:測試
1)登入兩臺Web伺服器檢視VIP資訊 [[email protected] ~]# ip addr show [[email protected] ~]# ip addr show 2) 客戶端訪問 客戶端使用curl命令連線http://192.168.4.80,檢視Web頁面;關閉Web1伺服器的網絡卡,客戶端再次訪問http://192.168.4.80,驗證是否可以正常訪問服務。 2 案例3:Keepalived+LVS伺服器 2.1 問題
使用Keepalived為LVS排程器提供高可用功能,防止排程器單點故障,為使用者提供Web服務: LVS1排程器真實IP地址為192.168.0.10 LVS2排程器真實IP地址為192.168.0.20 伺服器VIP地址設定為192.168.4.5 真實Web伺服器地址分別為192.168.4.10、192.168.4.20 使用加權輪詢排程演算法,真實web伺服器權重不同 2.2 方案
使用5臺虛擬機器,1臺作為客戶端主機、2臺作為LVS排程器、2臺作為Real Server,拓撲結構如圖-2所示,具體配置如表-2所示。 2.3 步驟
實現此案例需要按照如下步驟進行。 步驟一:配置網路環境
1)設定Web1伺服器的網路引數 [[email protected] ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.10/24 connection.autoconnect yes [[email protected] ~]# nmcli connection up eth0 接下來給web1配置VIP地址 注意:這裡的子網掩碼必須是32(也就是全255),網路地址與IP地址一樣,廣播地址與IP地址也一樣。 [[email protected] ~]# cd /etc/sysconfig/network-scripts/ [[email protected] ~]# cp ifcfg-lo{,:0} [[email protected] ~]# vim ifcfg-lo:0 DEVICE=lo:0 IPADDR=192.168.4.5 NETMASK=255.255.255.255 NETWORK=192.168.4.5 BROADCAST=192.168.4.5 ONBOOT=yes NAME=lo:0 注意:這裡因為web1也配置與代理一樣的VIP地址,預設肯定會出現地址衝突。 寫入這四行的主要目的就是訪問192.168.4.5的資料包,只有排程器會響應,其他主機都不做任何響應。 [[email protected] ~]# vim /etc/sysctl.conf #手動寫入如下4行內容 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_announce = 2 #當有arp廣播問誰是192.168.4.5時,本機忽略該ARP廣播,不做任何迴應 #本機不要向外宣告自己的lo迴環地址是192.168.4.5 重啟網路服務,設定防火牆與SELinux [[email protected] ~]# systemctl restart network [[email protected] ~]# ifconfig [[email protected] ~]# systemctl stop firewalld [[email protected] ~]# setenforce 0 2)設定Web2伺服器的網路引數 [[email protected] ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.20/24 connection.autoconnect yes [[email protected] ~]# nmcli connection up eth0 接下來給web1配置VIP地址 注意:這裡的子網掩碼必須是32(也就是全255),網路地址與IP地址一樣,廣播地址與IP地址也一樣。 [[email protected] ~]# cd /etc/sysconfig/network-scripts/ [[email protected] ~]# cp ifcfg-lo{,:0} [[email protected] ~]# vim ifcfg-lo:0 DEVICE=lo:0 IPADDR=192.168.4.5 NETMASK=255.255.255.255 NETWORK=192.168.4.5 BROADCAST=192.168.4.5 ONBOOT=yes NAME=lo:0 注意:這裡因為web1也配置與代理一樣的VIP地址,預設肯定會出現地址衝突。 寫入這四行的主要目的就是訪問192.168.4.5的資料包,只有排程器會響應,其他主機都不做任何響應。 [[email protected] ~]# vim /etc/sysctl.conf #手動寫入如下4行內容 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_announce = 2 #當有arp廣播問誰是192.168.4.5時,本機忽略該ARP廣播,不做任何迴應 #本機不要向外宣告自己的lo迴環地址是192.168.4.5 重啟網路服務,設定防火牆與SELinux [[email protected] ~]# systemctl restart network [[email protected] ~]# ifconfig [[email protected] ~]# systemctl stop firewalld [[email protected] ~]# setenforce 0 3)配置proxy1主機的網路引數(不配置VIP,有keepalvied自動配置) [[email protected] ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.15/24 connection.autoconnect yes [[email protected] ~]# nmcli connection up eth0 [[email protected] ~]# ipvsadm -C #清空前面所有的規則 4)配置proxy2主機的網路引數(不配置VIP,有keepalvied自動配置) [[email protected] ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.16/24 connection.autoconnect yes [[email protected] ~]# nmcli connection up eth0 [[email protected] ~]# ipvsadm -C #清空前面所有的規則 步驟二:配置後臺web服務
1)安裝軟體,自定義Web頁面(web1和web2主機) [[email protected] ~]# yum -y install httpd [[email protected] ~]# echo “192.168.4.10” > /var/www/html/index.html [[email protected] ~]# yum -y install httpd [[email protected] ~]# echo “192.168.4.10” > /var/www/html/index.html 3)啟動Web伺服器軟體(web1和web2主機) [[email protected] ~]# systemctl start httpd ; systemctl enable httpd [[email protected] ~]# systemctl start httpd ; systemctl enable httpd 步驟三:排程器安裝Keepalived與ipvsadm軟體
注意:兩臺LVS排程器執行相同的操作(如何已經安裝軟體,可用忽略此步驟)。 安裝軟體 [[email protected] ~]# yum install -y keepalived [[email protected] ~]# systemctl enable keepalived [[email protected] ~]# yum install -y ipvsadm [[email protected] ~]# yum install -y keepalived [[email protected] ~]# systemctl enable keepalived [[email protected] ~]# yum install -y ipvsadm 步驟四:部署Keepalived實現LVS-DR模式排程器的高可用
1)LVS1排程器設定Keepalived,並啟動服務 [[email protected] ~]# vim /etc/keepalived/keepalived.conf global_defs { notification_email { [email protected] //設定報警收件人郵箱 } notification_email_from [email protected] //設定發件人 smtp_server 127.0.0.1 //定義郵件伺服器 smtp_connect_timeout 30 router_id lvs1 //設定路由ID號(實驗需要修改) } vrrp_instance VI_1 { state MASTER //主伺服器為MASTER(實驗需要修改) interface eth0 //定義網路介面(實驗需要修改) virtual_router_id 50 //主輔VRID號必須一致(實驗需要修改) priority 100 //伺服器優先順序(實驗需要修改) advert_int 1 authentication { auth_type pass auth_pass forlvs //主輔伺服器密碼必須一致(實驗需要修改) } virtual_ipaddress { 192.168.4.5 } //配置VIP(實驗需要修改) } virtual_server 192.168.4.5 80 { //設定ipvsadm的VIP規則(實驗需要修改) delay_loop 6 lb_algo wrr //設定LVS排程演算法為WRR lb_kind DR //設定LVS的模式為DR persistence_timeout 1 protocol TCP real_server 192.168.4.10 80 { //設定後端web伺服器真實IP(實驗需要修改) weight 1 //設定權重為1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.4.20 80 { //設定後端web伺服器真實IP(實驗需要修改) weight 2 //設定權重為2 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } [[email protected] ~]# systemctl start keepalived [[email protected] ~]# ipvsadm -Ln #檢視LVS規則 [[email protected] ~]# ip a s #檢視VIP配置 2)LVS2排程器設定Keepalived [[email protected] ~]# vim /etc/keepalived/keepalived.conf global_defs { notification_email { [email protected] //設定報警收件人郵箱 } notification_email_from [email protected] //設定發件人 smtp_server 127.0.0.1 //定義郵件伺服器 smtp_connect_timeout 30 router_id lvs2 //設定路由ID號(實驗需要修改) } vrrp_instance VI_1 { state BACKUP //從伺服器為BACKUP(實驗需要修改) interface eth0 //定義網路介面(實驗需要修改) virtual_router_id 50 //主輔VRID號必須一致(實驗需要修改) priority 50 //伺服器優先順序(實驗需要修改) advert_int 1 authentication { auth_type pass auth_pass forlvs //主輔伺服器密碼必須一致(實驗需要修改) } virtual_ipaddress { 192.168.4.5 } //設定VIP(實驗需要修改) } virtual_server 192.168.4.5 80 { //自動設定LVS規則(實驗需要修改) delay_loop 6 lb_algo wrr //設定LVS排程演算法為WRR lb_kind DR //設定LVS的模式為DR persistence_timeout 1 protocol TCP real_server 192.168.4.10 80 { //設定後端web伺服器的真實IP(實驗需要修改) weight 1 //設定權重為1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.4.20 80 { //設定後端web伺服器的真實IP(實驗需要修改) weight 2 //設定權重為2 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } [[email protected] ~]# systemctl start keepalived [[email protected] ~]# ipvsadm -Ln #檢視LVS規則 [[email protected] ~]# ip a s #檢視VIP設定 步驟五:客戶端測試
客戶端使用curl命令反覆連線http://192.168.4.5,檢視訪問的頁面是否會輪詢到不同的後端真實伺服器。 3 案例1:配置HAProxy負載平衡叢集 3.1 問題
準備4臺Linux伺服器,兩臺做Web伺服器,1檯安裝HAProxy,1臺做客戶端,實現如下功能: 客戶端訪問HAProxy,HAProxy分發請求到後端Real Server 要求HAProxy可以根據Cookie為客戶端分配固定後端伺服器 開啟HAProxy監控頁面,及時檢視排程器狀態 設定HAProxy為開機啟動 3.2 方案
使用4臺虛擬機器,1臺作為HAProxy排程器、2臺作為Real Server、1臺作為客戶端,拓撲結構如圖-3所示,具體配置如表-3所示。 3.3 步驟
實現此案例需要按照如下步驟進行。 注意事項:
將前面實驗VIP、LVS等實驗的內容清理乾淨!!!!!!
刪除所有裝置的VIP,清空所有LVS設定,關閉keepalived!!!
web1關閉多餘的網絡卡與VIP,配置本地真實IP地址。 [[email protected] ~]# ifdown eth0 [[email protected] ~]# ifdown lo:0 [[email protected] ~]# nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.2.100/24 connection.autoconnect yes [[email protected] ~]# nmcli connection up eth1 Web2關閉多餘的網絡卡與VIP,配置本地真實IP地址。 [[email protected] ~]# ifdown eth0 [[email protected] ~]# ifdown lo:0 [[email protected] ~]# nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.2.200/24 connection.autoconnect yes [[email protected] ~]# nmcli connection up eth1 proxy關閉keepalived服務,清理LVS規則。 [[email protected] ~]# systemctl stop keepalived [[email protected] ~]# systemctl disable keepalived [[email protected] ~]# ipvsadm -C [[email protected] ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.5/24 connection.autoconnect yes [[email protected] ~]# nmcli connection up eth0 [[email protected] ~]# nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.2.5/24 connection.autoconnect yes [[email protected] ~]# nmcli connection up eth1 步驟一:配置後端Web伺服器
設定兩臺後端Web服務(如果已經配置完成,可用忽略此步驟) [[email protected] ~]# yum -y install httpd [[email protected] ~]# systemctl start httpd [[email protected] ~]# echo “192.168.2.100” > /var/www/html/index.html [[email protected] ~]# yum -y install httpd [[email protected] ~]# systemctl start httpd [[email protected] ~]# echo “192.168.2.200” > /var/www/html/index.html 步驟二:部署HAProxy伺服器
1)配置網路,安裝軟體 [[email protected] ~]# sed -i ‘/ip_forward/s/0/1/’ sysctl.conf //開啟路由轉發 [[email protected] ~]# sysctl -p [[email protected] ~]# yum -y install haproxy 2)修改配置檔案 [[email protected] ~]# vim /etc/haproxy/haproxy.cfg global log 127.0.0.1 local2 ###[err warning info debug] chroot /usr/local/haproxy pidfile /var/run/haproxy.pid ###haproxy的pid存放路徑 maxconn 4000 ###最大連線數,預設4000 user haproxy group haproxy daemon ###建立1個程序進入deamon模式執行 defaults mode http ###預設的模式mode { tcp|http|health } log global ###採用全域性定義的日誌 option dontlognull ###不記錄健康檢查的日誌資訊 option httpclose ###每次請求完畢後主動關閉http通道 option httplog ###日誌類別http日誌格式 option forwardfor ###後端伺服器可以從Http Header中獲得客戶端ip option redispatch ###serverid伺服器掛掉後強制定向到其他健康伺服器 timeout connect 10000 #如果backend沒有指定,預設為10s timeout client 300000 ###客戶端連線超時 timeout server 300000 ###伺服器連線超時 maxconn 60000 ###最大連線數 retries 3 ###3次連線失敗就認為服務不可用,也可以通過後面設定 listen stats bind 0.0.0.0:1080 #監聽埠 stats refresh 30s #統計頁面自動重新整理時間 stats uri /stats #統計頁面url stats realm Haproxy Manager #統計頁面密碼框上提示文字 stats auth admin:admin #統計頁面使用者名稱和密碼設定 #stats hide-version #隱藏統計頁面上HAProxy的版本資訊 listen websrv-rewrite 0.0.0.0:80 cookie SERVERID rewrite balance roundrobin server web1 192.168.20.101:80 cookie app1inst1 check inter 2000 rise 2 fall 5 server web2 192.168.20.102:80 cookie app1inst2 check inter 2000 rise 2 fall 5 3)啟動伺服器並設定開機啟動 [[email protected] ~]# systemctl start haproxy [[email protected] ~]# systemctl enable haproxy 步驟三:客戶端驗證
客戶端配置與HAProxy相同網路的IP地址,並使用火狐瀏覽器訪問http://192.168.4.5,測試排程器是否正常工作,客戶端訪問http://192.168.4.5/haproxy-admin測試狀態監控頁面是否正常。 訪問狀態監控頁的內容,參考圖-4所示。
備註: Queue佇列資料的資訊(當前佇列數量,最大值,佇列限制數量); Session rate每秒會話率(當前值,最大值,限制數量); Sessions總會話量(當前值,最大值,總量,Lbtot: total number of times a server was selected選中一臺伺服器所用的總時間); Bytes(入站、出站流量); Denied(拒絕請求、拒絕迴應); Errors(錯誤請求、錯誤連線、錯誤迴應); Warnings(重新嘗試警告retry、重新連線redispatches); Server(狀態、最後檢查的時間(多久前執行的最後一次檢查)、權重、備份伺服器數量、down機伺服器數量、down機時長)。