keepalived热备 keepalived+LVS Haproxy
keepalived熱備
keepalived概述
- 調(diào)度器出現(xiàn)單點(diǎn)故障,如何解決?
- keepalived實(shí)現(xiàn)了高可用集群
- keepalived最初是為了LVS設(shè)計(jì)的,專門監(jiān)控個(gè)服務(wù)器節(jié)點(diǎn)的狀態(tài)
- keepalived后來加入了VRRP功能,防止單點(diǎn)故障
- 因此,keepalived除了能夠管理LVS軟件外,還可以作為其他服務(wù)(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟件。
keepalived運(yùn)行原理
- keepalived檢測(cè)每個(gè)服務(wù)器節(jié)點(diǎn)狀態(tài)
- 服務(wù)器節(jié)點(diǎn)異常或工作出現(xiàn)故障,keepalived將故障節(jié)點(diǎn)從集群系統(tǒng)中剔除
- 故障節(jié)點(diǎn)恢復(fù)后,keepalived再將其加入到集群系統(tǒng)中
- 所有工作自動(dòng)完成,無需人工干預(yù)
keepalived功能
1.VRRP熱備(FTP,MySQL,HTTP,Nginx,LVS)
2.自動(dòng)配置LVS規(guī)則(enable)
3.Keepalived自帶健康檢查功能
配置文件解析
高可用web拓?fù)?/h2>
Keepalived高可用服務(wù)器
問題
準(zhǔn)備三臺(tái)Linux服務(wù)器,兩臺(tái)做Web服務(wù)器,并部署Keepalived高可用軟件,一臺(tái)作為客戶端主機(jī),實(shí)現(xiàn)如下功能:
- 使用Keepalived實(shí)現(xiàn)web服務(wù)器的高可用
- Web服務(wù)器IP地址分別為192.168.4.100和192.168.4.200
- Web服務(wù)器的浮動(dòng)VIP地址為192.168.4.80
- 客戶端通過訪問VIP地址訪問Web頁面
方案
使用3臺(tái)虛擬機(jī),2臺(tái)作為Web服務(wù)器,并部署Keepalived、1臺(tái)作為客戶端,拓?fù)浣Y(jié)構(gòu)如圖所示,主機(jī)配置如表所示。
步驟
- 步驟一:配置網(wǎng)絡(luò)環(huán)境(如果已經(jīng)完成該配置,可以忽略此步驟)
1)設(shè)置Web1服務(wù)器網(wǎng)絡(luò)參數(shù)、配置Web服務(wù)
[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)設(shè)置Web2服務(wù)器網(wǎng)絡(luò)參數(shù)、配置Web服務(wù)
[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主機(jī)的網(wǎng)絡(luò)參數(shù)(如果已經(jīng)設(shè)置,可以忽略此步驟)
[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 )客戶端測(cè)試
[root@proxy ~]# curl 192.168.4.200 456456 [root@proxy ~]# curl 192.168.4.100 123123- 步驟二:安裝Keepalived軟件
注意:兩臺(tái)Web服務(wù)器做相同的操作。
[root@web1 ~]# yum -y install keepalived [root@web2 ~]# yum -y install keepalived- 步驟三:部署Keepalived服務(wù)
1)修改web1服務(wù)器Keepalived配置文件
[root@web1 ~]# vim /etc/keepalived/keepalived.conf *12 router_id web1 ##設(shè)置路由ID號(hào)(實(shí)驗(yàn)需要修改)19 vrrp_instance VI_1 {20 state MASTER ##主服務(wù)器為MASTER(備服務(wù)器需要修改為BACKUP)21 interface eth0 ##定義網(wǎng)絡(luò)接口22 virtual_router_id 51 ##主備服務(wù)器VRID號(hào)必須一致23 priority 100 ##服務(wù)器優(yōu)先級(jí),優(yōu)先級(jí)高優(yōu)先獲取VIP24 advert_int 125 authentication {26 auth_type PASS27 auth_pass 1111 ##主備服務(wù)器密碼必須一致28 }29 virtual_ipaddress { ##誰是主服務(wù)器誰獲得該VIP(實(shí)驗(yàn)需要修改)*30 192.168.4.80 ##vip31 }32 } 注:有*號(hào)的行需修改 ##33行往下是集群本次實(shí)驗(yàn)只涉及VRRP2)修改web2服務(wù)器Keepalived配置文件
[root@web2 ~]# vim /etc/keepalived/keepalived.conf 12 router_id web2 20 state BACKUP 23 priority 50 30 192.168.4.803)啟動(dòng)服務(wù)
[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
啟動(dòng)keepalived會(huì)自動(dòng)添加一個(gè)drop的防火墻規(guī)則,需要清空!
- 步驟四:測(cè)試
1 ) 登錄兩臺(tái)Web服務(wù)器查看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 #此時(shí)vip為浮動(dòng)IP,優(yōu)先級(jí)在web1上,所以在web1上面出現(xiàn)192.168.4.80的vip ####################################################################################### [root@web1 ~]# systemctl stop keepalived.service #停掉web1的服務(wù) [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 #####此時(shí)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 #####此時(shí)vip又再次回到web12 ) 客戶端訪問
客戶端使用curl命令連接http://192.168.4.80,查看Web頁面;關(guān)閉Web1服務(wù)器的網(wǎng)卡,客戶端再次訪問http://192.168.4.80,驗(yàn)證是否可以正常訪問服務(wù)。
高可用調(diào)度器
keepalived+LVS拓?fù)?/h2>
- 使用Keepalived高可用解決調(diào)度器單點(diǎn)故障的問題
- 主,備調(diào)度器上配置LVS
- 主調(diào)度器異常時(shí),Keepalived啟用備用調(diào)度器
Keepalived配置說明
- LVS相關(guān)信息通過Keepalived配置即可
- 主要配置文件說明如下:
Real Server配置
- 真實(shí)服務(wù)器運(yùn)行在DR模式下
- 修改內(nèi)核參數(shù),并附加VIP
Keepalived+LVS服務(wù)器
問題
使用Keepalived為L(zhǎng)VS調(diào)度器提供高可用功能,防止調(diào)度器單點(diǎn)故障,為用戶提供Web服務(wù):
- LVS1調(diào)度器真實(shí)IP地址為192.168.4.5
- LVS2調(diào)度器真實(shí)IP地址為192.168.4.6
- 服務(wù)器VIP地址設(shè)置為192.168.4.15
- 真實(shí)Web服務(wù)器地址分別為192.168.4.100、192.168.4.200
- 使用加權(quán)輪詢調(diào)度算法,真實(shí)web服務(wù)器權(quán)重不同
方案
使用5臺(tái)虛擬機(jī),1臺(tái)作為客戶端主機(jī)、2臺(tái)作為L(zhǎng)VS調(diào)度器、2臺(tái)作為Real Server,實(shí)驗(yàn)拓?fù)洵h(huán)境結(jié)構(gòu)如圖所示,基礎(chǔ)環(huán)境配置如表所示。
注意:所有主機(jī)都需要配置IP地址與有效的YUM源
步驟
- 步驟一:配置網(wǎng)絡(luò)環(huán)境
1)設(shè)置Web1服務(wù)器的網(wǎng)絡(luò)參數(shù)
注:先關(guān)閉上一個(gè)實(shí)驗(yàn)的keepalived服務(wù) [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地址
注意:這里的子網(wǎng)掩碼必須是32(也就是全255),網(wǎng)絡(luò)地址與IP地址一樣,廣播地址與IP地址也一樣。
注意:這里因?yàn)閣eb1也配置與調(diào)度器一樣的VIP地址,默認(rèn)肯定會(huì)出現(xiàn)地址沖突。
寫入這四行的主要目的就是訪問192.168.4.15的數(shù)據(jù)包,只有調(diào)度器會(huì)響應(yīng),其他主機(jī)都不做任何響應(yīng)。
重啟網(wǎng)絡(luò)服務(wù),設(shè)置防火墻與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)設(shè)置Web2服務(wù)器的網(wǎng)絡(luò)參數(shù)
[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地址
注意:這里的子網(wǎng)掩碼必須是32(也就是全255),網(wǎng)絡(luò)地址與IP地址一樣,廣播地址與IP地址也一樣。
注意:這里因?yàn)閣eb2也配置與代理一樣的VIP地址,默認(rèn)肯定會(huì)出現(xiàn)地址沖突。
寫入這四行的主要目的就是訪問192.168.4.15的數(shù)據(jù)包,只有調(diào)度器會(huì)響應(yīng),其他主機(jī)都不做任何響應(yīng)。
重啟網(wǎng)絡(luò)服務(wù),設(shè)置防火墻與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主機(jī)的網(wǎng)絡(luò)參數(shù)(不配置VIP,由keepalvied自動(dòng)配置)
[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主機(jī)的網(wǎng)絡(luò)參數(shù)(不配置VIP,由keepalvied自動(dòng)配置)
注意:按照前面的課程環(huán)境,默認(rèn)沒有該虛擬機(jī),需要重新建一臺(tái)虛擬機(jī)proxy2。
- 步驟二:配置后臺(tái)web服務(wù)
1)安裝軟件,自定義Web頁面(web1和web2主機(jī))
[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)啟動(dòng)Web服務(wù)器軟件(web1和web2主機(jī))
[root@web1 ~]# systemctl start httpd ; systemctl enable httpd [root@web2 ~]# systemctl start httpd ; systemctl enable httpd- 步驟三:調(diào)度器安裝Keepalived與ipvsadm軟件
注意:兩臺(tái)LVS調(diào)度器執(zhí)行相同的操作(如何已經(jīng)安裝軟件,可用忽略此步驟)。
安裝軟件
- 步驟四:部署Keepalived實(shí)現(xiàn)LVS-DR模式調(diào)度器的高可用
1)LVS1調(diào)度器設(shè)置Keepalived,并啟動(dòng)服務(wù)(在192.168.4.5主機(jī)操作)
12 router_id proxy1 30 192.168.4.15 34 virtual_server 192.168.4.15 80 { ##設(shè)置ipvsadm的VIP規(guī)則(實(shí)驗(yàn)需要修改) 35 delay_loop 6 36 lb_algo rr ##設(shè)置LVS調(diào)度算法為RR 37 lb_kind DR ##設(shè)置LVS的模式為DR(實(shí)驗(yàn)需要修改) 38 #persistence_timeout 50 ##(實(shí)驗(yàn)需要注釋或dd) #注意這樣的作用是保持連接,開啟后,客戶端在一定時(shí)間內(nèi)始終訪問相同服務(wù)器 39 protocol TCP 40 41 real_server 192.168.4.100 80 { ##設(shè)置后端web服務(wù)器真實(shí)IP(實(shí)驗(yàn)需要修改) 42 weight 1 ##設(shè)置權(quán)重為1 43 TCP_CHECK { ##對(duì)后臺(tái)real_server做健康檢查(實(shí)驗(yàn)需要修改) 44 connect_timeout 3 ##超時(shí)時(shí)間 45 nb_get_retry 3 ##失敗后嘗試連接3次,3次失敗代表壞了 46 delay_before_retry 3 ##健康檢查,每隔3秒檢查一次 47 } 48 } 49 50 real_server 192.168.4.200 80 { ##設(shè)置后端web服務(wù)器真實(shí)IP(實(shí)驗(yàn)需要修改) 51 weight 2 ##設(shè)置權(quán)重為1 52 TCP_CHECK { ##對(duì)后臺(tái)real_server做健康檢查(實(shí)驗(yàn)需要修改) 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規(guī)則 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調(diào)度器設(shè)置Keepalived(在192.168.4.6主機(jī)操作)
[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步驟五:客戶端測(cè)試
客戶端使用curl命令反復(fù)連接http://192.168.4.15,查看訪問的頁面是否會(huì)輪詢到不同的后端真實(shí)服務(wù)器。
Haproxy概述
- 它是免費(fèi),快速并且可靠的一種解決方案
- 適用于那些負(fù)載特大的web站點(diǎn),這些站點(diǎn)通常又需要會(huì)話保持或七層代理
- 提供高可用性,負(fù)載均衡以及基于TCP和HTTP應(yīng)用的代理
衡量負(fù)責(zé)均衡器性能的因素
- Session rate 會(huì)話率
- 每秒鐘產(chǎn)生的會(huì)話數(shù)
- Session concurrent 并發(fā)會(huì)話數(shù)
- 服務(wù)器處理會(huì)話的時(shí)間越長(zhǎng),并發(fā)會(huì)話數(shù)越多
- data rate 數(shù)據(jù)速率
- 以MB/s或Mbps衡量
- 大的對(duì)象導(dǎo)致并發(fā)會(huì)話數(shù)增加
- 高會(huì)話數(shù),搞數(shù)據(jù)速率要求更多的內(nèi)存
HAProxy工作模式
- mode http
- 客戶端請(qǐng)求被深度分析后再發(fā)往服務(wù)器
- mode tcp
- 4層調(diào)度,不檢查第七層信息
- mode health
- 僅做健康狀態(tài)檢查,已經(jīng)不建議使用
配置文件說明
- HAproxy配置參數(shù)來源
- 命令行: 總是具有最高優(yōu)先級(jí)
- global部分: 全局設(shè)置進(jìn)程級(jí)別參數(shù)
- 理聲明部分
- 來自于default, listen, frontend和backend
- 配置文件可由如下部分構(gòu)成:
- default
- 為后續(xù)的其他部分設(shè)置缺省參數(shù)
- 缺省參數(shù)可以被后續(xù)部分重置
- rontend
- 描述接收客戶端偵聽套接字(socket)集
- backend
- 描述轉(zhuǎn)發(fā)連接的服務(wù)器集
- listen
- 把frontend和backend結(jié)合到一起的完整聲明
管理服務(wù)
[root@proxy ~]# sysetmctl start haproxy ##開啟
[root@proxy ~]#sysetmctl stop haproxy ##關(guān)閉
[root@proxy ~]# systemctl status haproxy##重啟
配置HAProxy負(fù)載平衡集群
問題
準(zhǔn)備4臺(tái)Linux服務(wù)器,兩臺(tái)做Web服務(wù)器,1臺(tái)安裝HAProxy,1臺(tái)做客戶端,實(shí)現(xiàn)如下功能:
- 客戶端訪問HAProxy,HAProxy分發(fā)請(qǐng)求到后端Real Server
- 開啟HAProxy監(jiān)控頁面,及時(shí)查看調(diào)度器狀態(tài)
- 設(shè)置HAProxy為開機(jī)啟動(dòng)
方案
使用4臺(tái)虛擬機(jī),1臺(tái)作為HAProxy調(diào)度器、2臺(tái)作為Real Server、1臺(tái)作為客戶端,拓?fù)浣Y(jié)構(gòu)如圖所示,具體配置如表所示
步驟
注意事項(xiàng):
將前面實(shí)驗(yàn)VIP、LVS等實(shí)驗(yàn)的內(nèi)容清理干凈!!!!!!
刪除所有設(shè)備的VIP,清空所有LVS設(shè)置,關(guān)閉keepalived!!!
web1關(guān)閉多余的網(wǎng)卡與VIP,配置本地真實(shí)IP地址。
[root@web1 ~]# ifdown lo:0 #臨時(shí)處理 [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關(guān)閉多余的網(wǎng)卡與VIP,配置本地真實(shí)IP地址。
[root@web2 ~]# ifdown lo:0 #臨時(shí)處理 [root@web2 ~]# cd /etc/sysconfig/network-scripts/ [root@web2 network-scripts]# rm -rf ifcfg-lo:0 #;永久處理 [root@web2 network-scripts]# systemctl restart networkproxy關(guān)閉keepalived服務(wù),清理LVS規(guī)則。
[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服務(wù)器(如果已經(jīng)配置完成,可用忽略此步驟)
[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服務(wù)器
[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 ##最大連接數(shù),默認(rèn)4000user haproxygroup haproxydaemon ##創(chuàng)建1個(gè)進(jìn)程進(jìn)入deamon模式運(yùn)行 defaultsmode http ##默認(rèn)的模式mode { tcp|http|health } option dontlognull ##不記錄健康檢查的日志信息option httpclose ##每次請(qǐng)求完畢后主動(dòng)關(guān)閉http通道option httplog ##日志類別http日志格式option forwardfor ##后端服務(wù)器可以從Http Header中獲得客戶端ipoption redispatch ##serverid服務(wù)器掛掉后強(qiáng)制定向到其他健康服務(wù)器timeout connect 10000 #如果backend沒有指定,默認(rèn)為10stimeout client 300000 ##客戶端連接超時(shí)timeout server 300000 ##服務(wù)器連接超時(shí)maxconn 3000 ##最大連接數(shù)retries 3 ##3次連接失敗就認(rèn)為服務(wù)不可用,也可以通過后面設(shè)置-----------------------------------------------------------------------------##案例參考 listen stats 0.0.0.0:1080 #監(jiān)聽端口stats refresh 30s #統(tǒng)計(jì)頁面自動(dòng)刷新時(shí)間stats uri /stats #統(tǒng)計(jì)頁面urlstats realm Haproxy Manager #進(jìn)入管理解面查看狀態(tài)信息stats auth admin:admin #統(tǒng)計(jì)頁面用戶名和密碼設(shè)置---------------------------------------------------------------------------- ##案例參考 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 ##(加一個(gè)check帶健康檢查功能)66 server web2 192.168.2.200:80 check ##沒寫算法,默認(rèn)輪詢 ##inter 2000 rise 2 fall 5 不寫默認(rèn)2~3次3)啟動(dòng)服務(wù)器并設(shè)置開機(jī)啟動(dòng)
[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 默認(rèn)輪詢效果修改配置文件,設(shè)置狀態(tài)頁面
注:全文最后添加: listen stats 0.0.0.0:1080 #監(jiān)聽端口stats refresh 30s #統(tǒng)計(jì)頁面自動(dòng)刷新時(shí)間stats uri /stats #統(tǒng)計(jì)頁面urlstats realm Haproxy Manager #進(jìn)入管理解面查看狀態(tài)信息stats auth admin:admin #統(tǒng)計(jì)頁面用戶名和密碼設(shè)置[root@proxy ~]# systemctl restart haproxy客戶端配置與HAProxy相同網(wǎng)絡(luò)的IP地址,并使用火狐瀏覽器訪問http://192.168.4.5,測(cè)試調(diào)度器是否正常工作,客戶端訪問http://192.168.4.5:1080/stats測(cè)試狀態(tài)監(jiān)控頁面是否正常。訪問狀態(tài)監(jiān)控頁的內(nèi)容,參考圖所示
備注:
Queue隊(duì)列數(shù)據(jù)的信息(當(dāng)前隊(duì)列數(shù)量,最大值,隊(duì)列限制數(shù)量);
Session rate每秒會(huì)話率(當(dāng)前值,最大值,限制數(shù)量);
Sessions總會(huì)話量(當(dāng)前值,最大值,總量,Lbtot: total number of times a server was selected選中一臺(tái)服務(wù)器所用的總時(shí)間);
Bytes(入站、出站流量);
Denied(拒絕請(qǐng)求、拒絕回應(yīng));
Errors(錯(cuò)誤請(qǐng)求、錯(cuò)誤連接、錯(cuò)誤回應(yīng));
Warnings(重新嘗試警告retry、重新連接redispatches);
Server(狀態(tài)、最后檢查的時(shí)間(多久前執(zhí)行的最后一次檢查)、權(quán)重、備份服務(wù)器數(shù)量、down機(jī)服務(wù)器數(shù)量、down機(jī)時(shí)長(zhǎng))。
集群調(diào)度軟件對(duì)比
性能:
- LVS>Haproxy>Nginx
功能:
- LVS<Haproxy<Nginx
Nginx分析
優(yōu)點(diǎn)
- 工作在7層,可以針對(duì)http做分流策略
- 1.9版本開始支持4層代理
- 正則表達(dá)式比HAProxy強(qiáng)大
- 安裝,配置,測(cè)試簡(jiǎn)單,通過日志可以解決多數(shù)問題
- 并發(fā)量可以達(dá)到幾萬次
- Nginx還可以作為web服務(wù)器使用
缺點(diǎn)
- 7層代理僅支持http,https,mails協(xié)議,應(yīng)用面小
- 監(jiān)控檢查僅通過端口,無法使用url檢查
LVS分析
優(yōu)點(diǎn)
- 負(fù)載能力強(qiáng),工作在4層,對(duì)內(nèi)存,CPU消耗低
- 配置性低,沒有太多可配置性,減少人為錯(cuò)誤
- 應(yīng)用面廣,幾乎可以為所有應(yīng)用提供負(fù)載均衡功能
缺點(diǎn)
- 不支持正則表達(dá)式,不能實(shí)現(xiàn)動(dòng)靜分離
- 如果網(wǎng)站架構(gòu)強(qiáng)大,沒有做自動(dòng)化運(yùn)維,LVS-DR配置比較繁瑣
HAProxy分析
優(yōu)點(diǎn)
- 支持Session,Cookie檢查功能
- 可以通過url進(jìn)行健康檢查
- 效率,負(fù)載均衡速度,高于Nginx,低于LVS
- HAProxy支持TCP,可以對(duì)MySQL進(jìn)行負(fù)載均衡
- 調(diào)度算法豐富
缺點(diǎn)
- 正則弱于Nginx
- 日志依賴于syslogd
安全加密功能
TCP_CHECK {} 僅檢查端口 (網(wǎng)頁內(nèi)容不檢查)HTTP_GET {}檢查不加密頁面SSL_GET {}檢查加密頁面總結(jié)
以上是生活随笔為你收集整理的keepalived热备 keepalived+LVS Haproxy的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 集群与存储 LVS的集群
- 下一篇: ceph