keepalived热备 keepalived+LVS Haproxy
keepalived熱備
keepalived概述
- 調度器出現單點故障,如何解決?
- keepalived實現了高可用集群
- keepalived最初是為了LVS設計的,專門監控個服務器節點的狀態
- keepalived后來加入了VRRP功能,防止單點故障
- 因此,keepalived除了能夠管理LVS軟件外,還可以作為其他服務(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟件。
keepalived運行原理
- keepalived檢測每個服務器節點狀態
- 服務器節點異常或工作出現故障,keepalived將故障節點從集群系統中剔除
- 故障節點恢復后,keepalived再將其加入到集群系統中
- 所有工作自動完成,無需人工干預
keepalived功能
1.VRRP熱備(FTP,MySQL,HTTP,Nginx,LVS)
2.自動配置LVS規則(enable)
3.Keepalived自帶健康檢查功能
配置文件解析
高可用web拓撲
Keepalived高可用服務器
問題
準備三臺Linux服務器,兩臺做Web服務器,并部署Keepalived高可用軟件,一臺作為客戶端主機,實現如下功能:
- 使用Keepalived實現web服務器的高可用
- Web服務器IP地址分別為192.168.4.100和192.168.4.200
- Web服務器的浮動VIP地址為192.168.4.80
- 客戶端通過訪問VIP地址訪問Web頁面
方案
使用3臺虛擬機,2臺作為Web服務器,并部署Keepalived、1臺作為客戶端,拓撲結構如圖所示,主機配置如表所示。
步驟
- 步驟一:配置網絡環境(如果已經完成該配置,可以忽略此步驟)
1)設置Web1服務器網絡參數、配置Web服務
[root@web1 ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.100/24 connection.autoconnect yes [root@web1 ~]# nmcli connection up eth0 [root@web1 ~]# yum -y install httpd [root@web1 ~]# echo "123123" > /var/www/html/index.html [root@web1 ~]# systemctl restart httpd2)設置Web2服務器網絡參數、配置Web服務
[root@web2 ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.200/24 connection.autoconnect yes [root@web2 ~]# nmcli connection up eth0 [root@web2 ~]# yum -y install httpd [root@web2 ~]# echo "456456" > /var/www/html/index.html [root@web2 ~]# systemctl restart httpd3)配置proxy主機的網絡參數(如果已經設置,可以忽略此步驟)
[root@proxy ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.5/24 connection.autoconnect yes [root@proxy ~]# nmcli connection up eth04 )客戶端測試
[root@proxy ~]# curl 192.168.4.200 456456 [root@proxy ~]# curl 192.168.4.100 123123- 步驟二:安裝Keepalived軟件
注意:兩臺Web服務器做相同的操作。
[root@web1 ~]# yum -y install keepalived [root@web2 ~]# yum -y install keepalived- 步驟三:部署Keepalived服務
1)修改web1服務器Keepalived配置文件
[root@web1 ~]# vim /etc/keepalived/keepalived.conf *12 router_id web1 ##設置路由ID號(實驗需要修改)19 vrrp_instance VI_1 {20 state MASTER ##主服務器為MASTER(備服務器需要修改為BACKUP)21 interface eth0 ##定義網絡接口22 virtual_router_id 51 ##主備服務器VRID號必須一致23 priority 100 ##服務器優先級,優先級高優先獲取VIP24 advert_int 125 authentication {26 auth_type PASS27 auth_pass 1111 ##主備服務器密碼必須一致28 }29 virtual_ipaddress { ##誰是主服務器誰獲得該VIP(實驗需要修改)*30 192.168.4.80 ##vip31 }32 } 注:有*號的行需修改 ##33行往下是集群本次實驗只涉及VRRP2)修改web2服務器Keepalived配置文件
[root@web2 ~]# vim /etc/keepalived/keepalived.conf 12 router_id web2 20 state BACKUP 23 priority 50 30 192.168.4.803)啟動服務
[root@web1 ~]# systemctl start keepalived [root@web2 ~]# systemctl start keepalived [root@web1 ~]# ip a s eth0 ##查看vip 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 52:54:00:ea:6b:dd brd ff:ff:ff:ff:ff:ffinet 192.168.4.100/24 brd 192.168.4.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.4.80/32 scope global eth0valid_lft forever preferred_lft forever [root@web1 ~]# systemctl stop keepalived.service [root@web2 ~]# ip a s eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 52:54:00:34:9f:a9 brd ff:ff:ff:ff:ff:ffinet 192.168.4.200/24 brd 192.168.4.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.4.80/32 scope global eth0valid_lft forever preferred_lft forever [root@web1 ~]# systemctl start keepalived.service [root@web1 ~]# ip a s eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 52:54:00:ea:6b:dd brd ff:ff:ff:ff:ff:ffinet 192.168.4.100/24 brd 192.168.4.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.4.80/32 scope global eth0valid_lft forever preferred_lft forever4)配置防火墻和SELinux
啟動keepalived會自動添加一個drop的防火墻規則,需要清空!
- 步驟四:測試
1 ) 登錄兩臺Web服務器查看VIP信息
[root@web1 ~]# ip a s eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 52:54:00:c2:bd:f0 brd ff:ff:ff:ff:ff:ffinet 192.168.4.100/24 brd 192.168.4.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.4.80/32 scope global eth0valid_lft forever preferred_lft forever[root@web2 ~]# ip a s eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 52:54:00:3e:8d:bf brd ff:ff:ff:ff:ff:ffinet 192.168.4.200/24 brd 192.168.4.255 scope global noprefixroute eth0valid_lft forever preferred_lft forever #此時vip為浮動IP,優先級在web1上,所以在web1上面出現192.168.4.80的vip ####################################################################################### [root@web1 ~]# systemctl stop keepalived.service #停掉web1的服務 [root@web1 ~]# ip a s eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 52:54:00:c2:bd:f0 brd ff:ff:ff:ff:ff:ffinet 192.168.4.100/24 brd 192.168.4.255 scope global noprefixroute eth0valid_lft forever preferred_lft forever [root@web2 ~]# ip a s eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 52:54:00:3e:8d:bf brd ff:ff:ff:ff:ff:ffinet 192.168.4.200/24 brd 192.168.4.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.4.80/32 scope global eth0valid_lft forever preferred_lft forever #####此時vip去到web2 [root@web1 ~]# systemctl start keepalived.service [root@web1 ~]# ip a s eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 52:54:00:c2:bd:f0 brd ff:ff:ff:ff:ff:ffinet 192.168.4.100/24 brd 192.168.4.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.4.80/32 scope global eth0valid_lft forever preferred_lft forever #####此時vip又再次回到web12 ) 客戶端訪問
客戶端使用curl命令連接http://192.168.4.80,查看Web頁面;關閉Web1服務器的網卡,客戶端再次訪問http://192.168.4.80,驗證是否可以正常訪問服務。
高可用調度器
keepalived+LVS拓撲
- 使用Keepalived高可用解決調度器單點故障的問題
- 主,備調度器上配置LVS
- 主調度器異常時,Keepalived啟用備用調度器
Keepalived配置說明
- LVS相關信息通過Keepalived配置即可
- 主要配置文件說明如下:
Real Server配置
- 真實服務器運行在DR模式下
- 修改內核參數,并附加VIP
Keepalived+LVS服務器
問題
使用Keepalived為LVS調度器提供高可用功能,防止調度器單點故障,為用戶提供Web服務:
- LVS1調度器真實IP地址為192.168.4.5
- LVS2調度器真實IP地址為192.168.4.6
- 服務器VIP地址設置為192.168.4.15
- 真實Web服務器地址分別為192.168.4.100、192.168.4.200
- 使用加權輪詢調度算法,真實web服務器權重不同
方案
使用5臺虛擬機,1臺作為客戶端主機、2臺作為LVS調度器、2臺作為Real Server,實驗拓撲環境結構如圖所示,基礎環境配置如表所示。
注意:所有主機都需要配置IP地址與有效的YUM源
步驟
- 步驟一:配置網絡環境
1)設置Web1服務器的網絡參數
注:先關閉上一個實驗的keepalived服務 [root@web1 ~]# systemctl stop keepalived.service [root@web2 ~]# systemctl stop keepalived.service [root@web1 ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.100/24 connection.autoconnect yes [root@web1 ~]# nmcli connection up eth0接下來給web1配置VIP地址
注意:這里的子網掩碼必須是32(也就是全255),網絡地址與IP地址一樣,廣播地址與IP地址也一樣。
注意:這里因為web1也配置與調度器一樣的VIP地址,默認肯定會出現地址沖突。
寫入這四行的主要目的就是訪問192.168.4.15的數據包,只有調度器會響應,其他主機都不做任何響應。
重啟網絡服務,設置防火墻與SELinux
[root@web1 ~]# systemctl stop NetworkManager [root@web1 ~]# systemctl disable NetworkManager [root@web1 ~]# systemctl restart network [root@web1 ~]# ifconfig [root@web1 ~]# systemctl stop firewalld [root@web1 ~]# setenforce 02)設置Web2服務器的網絡參數
[root@web2 ~]# nmcli connection modify eth0 ipv4.method manual \ ipv4.addresses 192.168.4.200/24 connection.autoconnect yes [root@web2 ~]# nmcli connection up eth0接下來給web2配置VIP地址
注意:這里的子網掩碼必須是32(也就是全255),網絡地址與IP地址一樣,廣播地址與IP地址也一樣。
注意:這里因為web2也配置與代理一樣的VIP地址,默認肯定會出現地址沖突。
寫入這四行的主要目的就是訪問192.168.4.15的數據包,只有調度器會響應,其他主機都不做任何響應。
重啟網絡服務,設置防火墻與SELinux
[root@web2 ~]# systemctl stop NetworkManager [root@web1 ~]# systemctl disable NetworkManager [root@web2 ~]# systemctl restart network [root@web2 ~]# ifconfig [root@web2 ~]# systemctl stop firewalld [root@web2 ~]# setenforce 03)配置proxy主機的網絡參數(不配置VIP,由keepalvied自動配置)
[root@proxy ~]# nmcli connection modify eth0 ipv4.method manual \ ipv4.addresses 192.168.4.5/24 connection.autoconnect yes [root@proxy ~]# nmcli connection up eth04)配置proxy2主機的網絡參數(不配置VIP,由keepalvied自動配置)
注意:按照前面的課程環境,默認沒有該虛擬機,需要重新建一臺虛擬機proxy2。
- 步驟二:配置后臺web服務
1)安裝軟件,自定義Web頁面(web1和web2主機)
[root@web1 ~]# yum -y install httpd [root@web1 ~]# echo "123123" > /var/www/html/index.html [root@web2 ~]# yum -y install httpd [root@web2 ~]# echo "456456" > /var/www/html/index.html2)啟動Web服務器軟件(web1和web2主機)
[root@web1 ~]# systemctl start httpd ; systemctl enable httpd [root@web2 ~]# systemctl start httpd ; systemctl enable httpd- 步驟三:調度器安裝Keepalived與ipvsadm軟件
注意:兩臺LVS調度器執行相同的操作(如何已經安裝軟件,可用忽略此步驟)。
安裝軟件
- 步驟四:部署Keepalived實現LVS-DR模式調度器的高可用
1)LVS1調度器設置Keepalived,并啟動服務(在192.168.4.5主機操作)
12 router_id proxy1 30 192.168.4.15 34 virtual_server 192.168.4.15 80 { ##設置ipvsadm的VIP規則(實驗需要修改) 35 delay_loop 6 36 lb_algo rr ##設置LVS調度算法為RR 37 lb_kind DR ##設置LVS的模式為DR(實驗需要修改) 38 #persistence_timeout 50 ##(實驗需要注釋或dd) #注意這樣的作用是保持連接,開啟后,客戶端在一定時間內始終訪問相同服務器 39 protocol TCP 40 41 real_server 192.168.4.100 80 { ##設置后端web服務器真實IP(實驗需要修改) 42 weight 1 ##設置權重為1 43 TCP_CHECK { ##對后臺real_server做健康檢查(實驗需要修改) 44 connect_timeout 3 ##超時時間 45 nb_get_retry 3 ##失敗后嘗試連接3次,3次失敗代表壞了 46 delay_before_retry 3 ##健康檢查,每隔3秒檢查一次 47 } 48 } 49 50 real_server 192.168.4.200 80 { ##設置后端web服務器真實IP(實驗需要修改) 51 weight 2 ##設置權重為1 52 TCP_CHECK { ##對后臺real_server做健康檢查(實驗需要修改) 52 connect_timeout 3 53 nb_get_retry 3 54 delay_before_retry 3 55 } 56 } 57}...[root@proxy ~]# systemctl start keepalived [root@proxy ~]# ipvsadm -Ln #查看LVS規則 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.4.15:80 rr-> 192.168.4.100:80 Route 1 0 0 -> 192.168.4.200:80 Route 1 0 0 [root@proxy ~]# ip a s eth0 #查看VIP配置 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 52:54:00:86:73:d1 brd ff:ff:ff:ff:ff:ffinet 192.168.4.5/24 brd 192.168.4.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.4.15/32 scope global eth0valid_lft forever preferred_lft foreverinet 192.168.4.15/24 brd 192.168.4.255 scope global secondary noprefixroute eth0:0valid_lft forever preferred_lft forever [root@proxy ~]# iptables -F [root@client ~]# curl 192.168.4.15 123123 [root@client ~]# curl 192.168.4.15 4564562)LVS2調度器設置Keepalived(在192.168.4.6主機操作)
[root@proxy ~]# scp /etc/keepalived/keepalived.conf root@192.168.4.6:/etc/keepalived/keepalived.conf [root@proxy2 ~]# vim /etc/keepalived/keepalived.conf 12 router_id proxy2 20 state BACKUP 23 priority 50 [root@proxy2 ~]# systemctl restart keepalived.service [root@proxy2 ~]# iptables -F [root@proxy2 ~]# yum -y install ipvsadm [root@proxy2 ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.4.15:80 rr-> 192.168.4.100:80 Route 1 0 0 -> 192.168.4.200:80 Route 1 0 0 [root@proxy2 ~]# ip a s eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 52:54:00:67:2e:b5 brd ff:ff:ff:ff:ff:ffinet 192.168.4.6/24 brd 192.168.4.255 scope global noprefixroute eth0valid_lft forever preferred_lft forever步驟五:客戶端測試
客戶端使用curl命令反復連接http://192.168.4.15,查看訪問的頁面是否會輪詢到不同的后端真實服務器。
Haproxy概述
- 它是免費,快速并且可靠的一種解決方案
- 適用于那些負載特大的web站點,這些站點通常又需要會話保持或七層代理
- 提供高可用性,負載均衡以及基于TCP和HTTP應用的代理
衡量負責均衡器性能的因素
- Session rate 會話率
- 每秒鐘產生的會話數
- Session concurrent 并發會話數
- 服務器處理會話的時間越長,并發會話數越多
- data rate 數據速率
- 以MB/s或Mbps衡量
- 大的對象導致并發會話數增加
- 高會話數,搞數據速率要求更多的內存
HAProxy工作模式
- mode http
- 客戶端請求被深度分析后再發往服務器
- mode tcp
- 4層調度,不檢查第七層信息
- mode health
- 僅做健康狀態檢查,已經不建議使用
配置文件說明
- HAproxy配置參數來源
- 命令行: 總是具有最高優先級
- global部分: 全局設置進程級別參數
- 理聲明部分
- 來自于default, listen, frontend和backend
- 配置文件可由如下部分構成:
- default
- 為后續的其他部分設置缺省參數
- 缺省參數可以被后續部分重置
- rontend
- 描述接收客戶端偵聽套接字(socket)集
- backend
- 描述轉發連接的服務器集
- listen
- 把frontend和backend結合到一起的完整聲明
管理服務
[root@proxy ~]# sysetmctl start haproxy ##開啟
[root@proxy ~]#sysetmctl stop haproxy ##關閉
[root@proxy ~]# systemctl status haproxy##重啟
配置HAProxy負載平衡集群
問題
準備4臺Linux服務器,兩臺做Web服務器,1臺安裝HAProxy,1臺做客戶端,實現如下功能:
- 客戶端訪問HAProxy,HAProxy分發請求到后端Real Server
- 開啟HAProxy監控頁面,及時查看調度器狀態
- 設置HAProxy為開機啟動
方案
使用4臺虛擬機,1臺作為HAProxy調度器、2臺作為Real Server、1臺作為客戶端,拓撲結構如圖所示,具體配置如表所示
步驟
注意事項:
將前面實驗VIP、LVS等實驗的內容清理干凈!!!!!!
刪除所有設備的VIP,清空所有LVS設置,關閉keepalived!!!
web1關閉多余的網卡與VIP,配置本地真實IP地址。
[root@web1 ~]# ifdown lo:0 #臨時處理 [root@web1 ~]# cd /etc/sysconfig/network-scripts/ [root@web1 network-scripts]# rm -rf ifcfg-lo:0 #永久處理 [root@web1 network-scripts]# systemctl restart network [root@web1 ~]# nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.2.100/24 connection.autoconnect yes [root@web1 ~]# nmcli connection up eth1Web2關閉多余的網卡與VIP,配置本地真實IP地址。
[root@web2 ~]# ifdown lo:0 #臨時處理 [root@web2 ~]# cd /etc/sysconfig/network-scripts/ [root@web2 network-scripts]# rm -rf ifcfg-lo:0 #;永久處理 [root@web2 network-scripts]# systemctl restart networkproxy關閉keepalived服務,清理LVS規則。
[root@proxy ~]# systemctl stop keepalived [root@proxy ~]# systemctl disable keepalived [root@proxy ~]# ipvsadm -C [root@proxy ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.5/24 connection.autoconnect yes [root@proxy ~]# nmcli connection up eth0 [root@proxy ~]# nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.2.5/24 connection.autoconnect yes [root@proxy ~]# nmcli connection up eth1 [root@proxy ~]# ip a s eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 52:54:00:2f:40:71 brd ff:ff:ff:ff:ff:ffinet 192.168.4.5/24 brd 192.168.4.255 scope global noprefixroute eth0valid_lft forever preferred_lft forever [root@proxy ~]# ip a s eth1 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 52:54:00:55:a9:d1 brd ff:ff:ff:ff:ff:ffinet 192.168.2.5/24 brd 192.168.2.255 scope global noprefixroute eth1valid_lft forever preferred_lft forever配置后端web服務器(如果已經配置完成,可用忽略此步驟)
[root@web1 ~]# ss -anutlp | grep 80 tcp LISTEN 0 128 *:80 *:* users:(("httpd",pid=1948,fd=3),("httpd",pid=1947,fd=3),("httpd",pid=1946,fd=3),("httpd",pid=1945,fd=3),("httpd",pid=1944,fd=3),("httpd",pid=1942,fd=3)) [root@web1 ~]# curl 192.168.2.100 123123 [root@web2 ~]# ss -anutlp | grep 80 tcp LISTEN 0 128 *:80 *:* users:(("httpd",pid=1307,fd=3),("httpd",pid=1306,fd=3),("httpd",pid=1305,fd=3),("httpd",pid=1304,fd=3),("httpd",pid=1303,fd=3),("httpd",pid=1301,fd=3)) [root@web2 ~]# curl 192.168.2.200 456456部署HAProxy服務器
[root@proxy ~]# yum -y install haproxy2)修改配置文件
[root@proxy ~]# vim /etc/haproxy/haproxy.cfg globallog 127.0.0.1 local2 ##[err warning info debug]chroot /usr/local/haproxypidfile /var/run/haproxy.pid ##haproxy的pid存放路徑maxconn 4000 ##最大連接數,默認4000user haproxygroup haproxydaemon ##創建1個進程進入deamon模式運行 defaultsmode http ##默認的模式mode { tcp|http|health } option dontlognull ##不記錄健康檢查的日志信息option httpclose ##每次請求完畢后主動關閉http通道option httplog ##日志類別http日志格式option forwardfor ##后端服務器可以從Http Header中獲得客戶端ipoption redispatch ##serverid服務器掛掉后強制定向到其他健康服務器timeout connect 10000 #如果backend沒有指定,默認為10stimeout client 300000 ##客戶端連接超時timeout server 300000 ##服務器連接超時maxconn 3000 ##最大連接數retries 3 ##3次連接失敗就認為服務不可用,也可以通過后面設置-----------------------------------------------------------------------------##案例參考 listen stats 0.0.0.0:1080 #監聽端口stats refresh 30s #統計頁面自動刷新時間stats uri /stats #統計頁面urlstats realm Haproxy Manager #進入管理解面查看狀態信息stats auth admin:admin #統計頁面用戶名和密碼設置---------------------------------------------------------------------------- ##案例參考 listen websrv-rewrite 0.0.0.0:80balance roundrobinserver web1 192.168.2.100:80 check inter 2000 rise 2 fall 5server web2 192.168.2.200:80 check inter 2000 rise 2 fall 5--------------------------------------------------------------------------- ##63行以下全刪除 ##添加: 63 listen webs 0.0.0.0:80 ##也可以打(*:80)64 balance roundrobin 65 server web1 192.168.2.100:80 check ##(加一個check帶健康檢查功能)66 server web2 192.168.2.200:80 check ##沒寫算法,默認輪詢 ##inter 2000 rise 2 fall 5 不寫默認2~3次3)啟動服務器并設置開機啟動
[root@proxy ~]# systemctl start haproxy [root@proxy ~]# systemctl enable haproxy [root@client ~]# curl 192.168.4.5 192.168.2.200 [root@client ~]# curl 192.168.4.5 192.168.2.100 [root@client ~]# curl 192.168.4.5 192.168.2.200 [root@client ~]# curl 192.168.4.5 192.168.2.100 默認輪詢效果修改配置文件,設置狀態頁面
注:全文最后添加: listen stats 0.0.0.0:1080 #監聽端口stats refresh 30s #統計頁面自動刷新時間stats uri /stats #統計頁面urlstats realm Haproxy Manager #進入管理解面查看狀態信息stats auth admin:admin #統計頁面用戶名和密碼設置[root@proxy ~]# systemctl restart haproxy客戶端配置與HAProxy相同網絡的IP地址,并使用火狐瀏覽器訪問http://192.168.4.5,測試調度器是否正常工作,客戶端訪問http://192.168.4.5:1080/stats測試狀態監控頁面是否正常。訪問狀態監控頁的內容,參考圖所示
備注:
Queue隊列數據的信息(當前隊列數量,最大值,隊列限制數量);
Session rate每秒會話率(當前值,最大值,限制數量);
Sessions總會話量(當前值,最大值,總量,Lbtot: total number of times a server was selected選中一臺服務器所用的總時間);
Bytes(入站、出站流量);
Denied(拒絕請求、拒絕回應);
Errors(錯誤請求、錯誤連接、錯誤回應);
Warnings(重新嘗試警告retry、重新連接redispatches);
Server(狀態、最后檢查的時間(多久前執行的最后一次檢查)、權重、備份服務器數量、down機服務器數量、down機時長)。
集群調度軟件對比
性能:
- LVS>Haproxy>Nginx
功能:
- LVS<Haproxy<Nginx
Nginx分析
優點
- 工作在7層,可以針對http做分流策略
- 1.9版本開始支持4層代理
- 正則表達式比HAProxy強大
- 安裝,配置,測試簡單,通過日志可以解決多數問題
- 并發量可以達到幾萬次
- Nginx還可以作為web服務器使用
缺點
- 7層代理僅支持http,https,mails協議,應用面小
- 監控檢查僅通過端口,無法使用url檢查
LVS分析
優點
- 負載能力強,工作在4層,對內存,CPU消耗低
- 配置性低,沒有太多可配置性,減少人為錯誤
- 應用面廣,幾乎可以為所有應用提供負載均衡功能
缺點
- 不支持正則表達式,不能實現動靜分離
- 如果網站架構強大,沒有做自動化運維,LVS-DR配置比較繁瑣
HAProxy分析
優點
- 支持Session,Cookie檢查功能
- 可以通過url進行健康檢查
- 效率,負載均衡速度,高于Nginx,低于LVS
- HAProxy支持TCP,可以對MySQL進行負載均衡
- 調度算法豐富
缺點
- 正則弱于Nginx
- 日志依賴于syslogd
安全加密功能
TCP_CHECK {} 僅檢查端口 (網頁內容不檢查)HTTP_GET {}檢查不加密頁面SSL_GET {}檢查加密頁面總結
以上是生活随笔為你收集整理的keepalived热备 keepalived+LVS Haproxy的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 集群与存储 LVS的集群
- 下一篇: ceph