日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Haproxy + Pacemaker 实现高可用负载均衡(一)

發(fā)布時(shí)間:2025/3/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Haproxy + Pacemaker 实现高可用负载均衡(一) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

pacemaker+corosync+haproxy

> 高可用架構(gòu)由兩個(gè)核心部分組成,一個(gè)是心跳檢測(cè),判斷服務(wù)器是否正常運(yùn)行;一個(gè)是資源轉(zhuǎn)移,用來(lái)將公共資源在正常服務(wù)器和故障服務(wù)器之間搬動(dòng)。兩個(gè)結(jié)合起來(lái)使用,可以實(shí)現(xiàn)對(duì)高可用架構(gòu)的自動(dòng)管理。 整個(gè)運(yùn)行模式就是心跳檢測(cè)不斷的在網(wǎng)絡(luò)中檢測(cè)各個(gè)指定的設(shè)備是否能夠正常響應(yīng),如果一旦發(fā)生設(shè)備故障,就由資源轉(zhuǎn)移功能進(jìn)行應(yīng)用的切換,以繼續(xù)提供服務(wù)。 corosync提供集群的信息層(messaging layer)的功能,傳遞心跳信息和集群事務(wù)信息,多臺(tái)機(jī)器之間通過(guò)組播的方式監(jiān)測(cè)心跳 pacemaker工作在資源分配層,提供資源管理器的功能,并以crmsh這個(gè)資源配置的命令接口來(lái)配置資源 心跳檢測(cè)是用來(lái)檢測(cè)服務(wù)器是否還在提供服務(wù),只要出現(xiàn)異常不能提供服務(wù)了,就認(rèn)為它掛掉了。 當(dāng)檢測(cè)出服務(wù)器掛掉之后,就要對(duì)服務(wù)資源進(jìn)行轉(zhuǎn)移。 CoroSync是運(yùn)行于心跳層的開(kāi)源軟件。 PaceMaker是運(yùn)行于資源轉(zhuǎn)移層的開(kāi)源軟件。 使用corosync監(jiān)控心跳,pacemaker時(shí)先資源轉(zhuǎn)移,crmsh實(shí)現(xiàn)集群資源配置 使用fence檢查節(jié)點(diǎn)健康狀況,實(shí)行跳電保護(hù) - 實(shí)驗(yàn)環(huán)境:四臺(tái)主機(jī)(可以是虛擬機(jī)),架構(gòu)如下圖: ![這里寫(xiě)圖片描述](https://img-blog.csdn.net/2018080612165915?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hoNTgyMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

一、Haproxy

- server1:172.25.54.5 - server2:172.25.54.6

以下的配置均需要在 server1 和 server2 上進(jìn)行,并且兩臺(tái)主機(jī)需要時(shí)間同步

[root@server1 ~]# ls haproxy-1.6.11.tar.gz [root@server1 ~]# yum install -y rpm-build ##安裝rpm包制作工具 [root@server1 ~]# rpmbuild -tb haproxy-1.6.11.tar.gz ##制作rpm包 error: Failed build dependencies:pcre-devel is needed by haproxy-1.6.11-1.x86_64 [root@server1 ~]# yum install pcre-devel -y ##解決依賴性 [root@server1 ~]# rpmbuild -tb haproxy-1.6.11.tar.gz make: gcc: Command not found [root@server1 ~]# yum install -y gcc ##解決Error [root@server1 ~]# rpmbuild -tb haproxy-1.6.11.tar.gz [root@server1 ~]# cd [root@server1 ~]# ls rpmbuild/ BUILD BUILDROOT RPMS SOURCES SPECS SRPMS [root@server1 ~]# cd rpmbuild/RPMS/ [root@server1 RPMS]# ls x86_64 [root@server1 RPMS]# cd x86_64/ [root@server1 x86_64]# ls haproxy-1.6.11-1.x86_64.rpm ##所制作的rpm包 [root@server1 x86_64]# rpm -qpl haproxy-1.6.11-1.x86_64.rpm ##查看安裝haproxy會(huì)生成的文件, 沒(méi)有主配置文件, 需要將壓縮包解壓獲取 /etc/haproxy /etc/rc.d/init.d/haproxy /usr/sbin/haproxy /usr/share/doc/haproxy-1.6.11 /usr/share/doc/haproxy-1.6.11/CHANGELOG /usr/share/doc/haproxy-1.6.11/README /usr/share/doc/haproxy-1.6.11/architecture.txt /usr/share/doc/haproxy-1.6.11/configuration.txt /usr/share/doc/haproxy-1.6.11/intro.txt /usr/share/doc/haproxy-1.6.11/management.txt /usr/share/doc/haproxy-1.6.11/proxy-protocol.txt /usr/share/man/man1/haproxy.1.gz [root@server1 x86_64]# rpm -ivh haproxy-1.6.11-1.x86_64.rpm ##安裝haproxy [root@server1 x86_64]# cd [root@server1 ~]# tar zxf haproxy-1.6.11.tar.gz [root@server1 ~]# cd haproxy-1.6.11 [root@server1 haproxy-1.6.11]# ls CHANGELOG CONTRIBUTING ebtree include MAINTAINERS README src tests VERSION contrib doc examples LICENSE Makefile ROADMAP SUBVERS VERDATE [root@server1 haproxy-1.6.11]# find -name *.spec ## 存在.spec文件, 才可以制作rpm包 ./examples/haproxy.spec [root@server1 haproxy-1.6.11]# cp examples/content-sw-sample.cfg /etc/haproxy/haproxy.cfg ##將配置文件模板復(fù)制到 /etc/haproxy/haproxy.cfg ##因?yàn)樵趆aproxy啟動(dòng)腳本中讀取的配置文件是/etc/haproxy/haproxy.cfg ##所以起的名字要一致 [root@server1 haproxy-1.6.11]# ls /etc/haproxy/ haproxy.cfg [root@server1 haproxy-1.6.11]#

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg uid 200gid 200 ##所以需要?jiǎng)?chuàng)建用戶 [root@server1 ~]# groupadd -g 200 haproxy [root@server1 ~]# useradd -u 200 -g 200 -M haproxy [root@server1 ~]# id haproxy uid=200(haproxy) gid=200(haproxy) groups=200(haproxy) [root@server1 ~]# vim /etc/security/limits.conf [root@server1 ~]# cat /etc/security/limits.conf | tail -n 1 haproxy - nofile 10000 ##配置文件要求10000 [root@server1 ~]# vim /etc/haproxy/haproxy.cfg [root@server1 ~]# cat /etc/haproxy/haproxy.cfg ##配置文件中其他的都是注釋,我這里就不列出來(lái)了 globalmaxconn 10000 ##最大連接數(shù)stats socket /var/run/haproxy.stat mode 600 level adminlog 127.0.0.1 local0 ##local:日志設(shè)備uid 200 ##默認(rèn)用戶UIDgid 200 ##默認(rèn)用戶GIDchroot /var/empty ##安全設(shè)置,根目錄切換,鎖在/var/empty下 daemon ##設(shè)置為后臺(tái)進(jìn)程defaults ##默認(rèn)配置,被frontend,backend,listen段繼承使用mode http ##Haproxy工作模式,四層工作模式為T(mén)CP,七層為HTTPlog globaloption httplog ##啟用http日志option dontlognullmonitor-uri /monitoruri maxconn 8000 ##每個(gè)進(jìn)程的最大連接數(shù),會(huì)覆蓋global中的maxconntimeout client 30s ##客戶端非活動(dòng)狀態(tài)的超時(shí)時(shí)長(zhǎng)stats uri /admin/stats ##監(jiān)控頁(yè)面的URLretries 2 ##服務(wù)器連接失敗后的重試次數(shù)option redispatch ##如果cookie中寫(xiě)入ServerID而客戶端不會(huì)刷新Cookie,那么當(dāng)ServerID對(duì)應(yīng)的服務(wù)器宕機(jī)后,將強(qiáng)制定向到其它健康的服務(wù)器上timeout connect 5s ##連接最大超時(shí)時(shí)間,默認(rèn)毫秒timeout server 5s ##服務(wù)端超時(shí)時(shí)間frontend public ##前端接口設(shè)置bind *:80 name clear ##允許訪問(wèn)本機(jī)所有的IP#bind 192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem#use_backend static if { hdr_beg(host) -i img }#use_backend static if { path_beg /img /css }default_backend staticbackend staticbalance roundrobin ##負(fù)載均衡算法為輪詢server statsrv1 172.25.54.7:80 check inter 1000 ##對(duì)后端服務(wù)器的健康狀況檢查間隔為1000毫秒server statsrv2 172.25.54.8:80 check inter 1000 [root@server1 ~]#

測(cè)試Haproxy是否可用

  • server1 打開(kāi)Haproxy服務(wù)
    此時(shí)server1 、 server2的Haproxy服務(wù)均未打開(kāi)
[root@server1 ~]# /etc/init.d/haproxy start Starting haproxy: [ OK ] [root@server1 ~]#

  • server3
[root@server3 ~]# vim /var/www/html/index.html [root@server3 ~]# cat /var/www/html/index.html <h1>server3<h1> [root@server3 ~]# /etc/init.d/httpd start Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.54.3 for ServerName[ OK ] [root@server3 ~]#
  • server4
[root@server4 ~]# vim /var/www/html/index.html [root@server4 ~]# cat /var/www/html/index.html <h1>server4<h1> [root@server4 ~]# /etc/init.d/httpd start Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.54.4 for ServerName[ OK ] [root@server4 ~]#

刷新網(wǎng)頁(yè),會(huì)在server3 和 server4頁(yè)面來(lái)回切換


將server4的http服務(wù)關(guān)閉

[root@server4 ~]# /etc/init.d/httpd stop Stopping httpd: [ OK ] [root@server4 ~]#

刷新網(wǎng)頁(yè),頁(yè)面一直在server3

將server3的http服務(wù)關(guān)閉,將server4的http服務(wù)開(kāi)啟

[root@server3 ~]# /etc/init.d/httpd start Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.54.3 for ServerName[ OK ] [root@server3 ~]# [root@server4 ~]# /etc/init.d/httpd start Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.54.4 for ServerName[ OK ] [root@server4 ~]#

刷新網(wǎng)頁(yè),頁(yè)面一直在server4

設(shè)置日志采集目錄

[root@server1 ~]# vim /etc/rsyslog.conf ##配置采集規(guī)則文件13 $ModLoad imudp14 $UDPServerRun 51442 *.info;mail.none;authpriv.none;cron.none;local0.none /var/log/messages62 local0.* /var/log/haproxy.log[root@server1 ~]# /etc/init.d/rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ] [root@server1 ~]# ll /var/log/haproxy.log -rw------- 1 root root 0 Aug 4 10:58 /var/log/haproxy.log [root@server1 ~]# cat /var/log/haproxy.log [root@server1 ~]# ##瀏覽器訪問(wèn) 172.25.54.5,刷新幾次 [root@server1 ~]# cat /var/log/haproxy.log Aug 4 10:59:41 localhost haproxy[1537]: 172.25.54.250:51174 [04/Aug/2018:10:59:41.871] public static/statsrv2 0/0/0/1/1 304 150 - - ---- 1/1/0/0/0 0/0 "GET / HTTP/1.1" Aug 4 10:59:43 localhost haproxy[1537]: 172.25.54.250:51174 [04/Aug/2018:10:59:41.872] public static/statsrv1 1831/0/0/1/1832 200 284 - - ---- 1/1/0/1/0 0/0 "GET / HTTP/1.1" Aug 4 10:59:44 localhost haproxy[1537]: 172.25.54.250:51174 [04/Aug/2018:10:59:43.703] public static/statsrv2 525/0/0/1/526 200 284 - - ---- 1/1/0/1/0 0/0 "GET / HTTP/1.1" [root@server1 ~]#

Haproxy采用的八種算法

`roundrobin`, 簡(jiǎn)單的輪詢 `static-rr`, 根據(jù)權(quán)重 `leastconn`, 最少連接者先處理 `source`, 根據(jù)請(qǐng)求源IP `uri`, 根據(jù)請(qǐng)求的URI `url_param`, 根據(jù)請(qǐng)求的URl參數(shù) `hdr(name)`, 根據(jù)HTTP請(qǐng)求頭來(lái)鎖定每一次HTTP請(qǐng)求 `rdp-cookie(name)`, 很據(jù)cookie(name)來(lái)鎖定并哈希每一次TCP請(qǐng)求

動(dòng)靜頁(yè)面分離

- server1 ``` [root@server1 ~]# vim /etc/haproxy/haproxy.cfg 43 use_backend static2 if { path_end -i .php } 45 # The static backend backend for 'Host: img', /img and /css. 46 backend static1 47 balance roundrobin 48 #balance source 49 server statsrv1 172.25.54.7:80 check inter 1000 50 51 backend static2 52 balance roundrobin 53 server[root@server1 ~]# /etc/init.d/haproxy reload [root@server1 ~]# /etc/init.d/haproxy reload ##刷新策略 [root@server1 ~]# ``` - server4配置動(dòng)態(tài)網(wǎng)頁(yè) [root@server4 html]# yum install php -y //安裝php [root@server4 ~]# vim /var/www/html/index.php [root@server4 ~]# cat /var/www/html/index.php <?php phpinfo() ?> [root@server4 ~]# /etc/init.d/httpd restart Stopping httpd: [ OK ] Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.54.4 for ServerName[ OK ] [root@server4 ~]#



訪問(wèn)控制

[root@server1 ~]# vim /etc/haproxy/haproxy.cfg 45 acl blacklist src 172.25.54.25046 47 http-request deny if blacklist [root@server1 ~]# /etc/init.d/haproxy reload [root@server1 ~]#


這樣的界面不好,用戶體驗(yàn)差

  • 修改——報(bào)錯(cuò)訪問(wèn)重定向
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg 49 errorloc 403 http://172.25.54.5:8080##當(dāng)403報(bào)錯(cuò)時(shí)重定向到172.25.54.5:8080上 [root@server1 ~]# /etc/init.d/haproxy reload [root@server1 ~]# [root@server1 ~]# yum install -y httpd [root@server1 ~]# vim /etc/httpd/conf/httpd.conf 136 Listen 8080 [root@server1 ~]# vim /var/www/html/index.html [root@server1 ~]# cat /var/www/html/index.html 網(wǎng)站正在維護(hù)中.... [root@server1 ~]# /etc/init.d/httpd start Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.54.1 for ServerName[ OK ] [root@server1 ~]#

訪問(wèn)172.25.54.5

[kiosk@foundation54 ~]$ curl 172.25.54.5 [kiosk@foundation54 ~]$ curl 172.25.54.5 -I HTTP/1.1 302 Found Cache-Control: no-cache Content-length: 0 Location: http://172.25.54.5:8080[kiosk@foundation54 ~]$
  • 修改——報(bào)錯(cuò)直接訪問(wèn)重定向
[root@server1 ~]# vim /etc/haproxy/haproxy.cfg45 acl blacklist src 172.25.54.25046 47 #http-request deny if blacklist48 49 #errorloc 403 http://172.25.54.5:808050 51 redirect location http://172.25.54.5:8080[root@server1 ~]# /etc/init.d/haproxy reload //刷新策略

訪問(wèn)172.25.54.5

[kiosk@foundation2 ~]$ curl -I 172.25.54.1 //查看響應(yīng)信息 HTTP/1.1 302 Found Cache-Control: no-cache Content-length: 0 Location: http://172.25.54.8:80 //訪問(wèn)被重定向到server4 Connection: close

讀寫(xiě)分離

-

server1配置

``` [root@server1 ~]# vim /etc/haproxy/haproxy.cfg 45 acl blacklist src 172.25.54.250 46 47 acl write method POST ##寫(xiě)控制 48 acl write method PUT 49 #http-request deny if blacklist 50 51 #errorloc 403 http://172.25.54.5:8080 52 53 #redirect location http://www.baidu.com 54 55 use_backend static2 if { path_end -i .php } 56 use_backend static2 if write ##如果執(zhí)行寫(xiě)操作則調(diào)轉(zhuǎn)到server4 57 default_backend static1 [root@server1 ~]# /etc/init.d/haproxy reload [root@server1 ~]# ``` -

后端server3、server4配置動(dòng)態(tài)上傳網(wǎng)頁(yè)

該實(shí)驗(yàn)還需要一個(gè)PHP的目錄,此處我直接分享出來(lái),鏈接是:[PHPupload](https://pan.baidu.com/s/1lbnWvi2caUhiNZy-lTfy3A) [root@server3 ~]# yum install php -y //安裝php [root@server3 ~]# cd /var/www/html/ [root@server3 html]# ls index.html upload ##upload就是需要的目錄 [root@server3 html]# cd upload/ [root@server3 upload]# ls index.php upload_file.php [root@server3 upload]# mv * .. [root@server3 upload]# cd .. [root@server3 html]# ls index.html index.php upload upload_file.php [root@server3 html]# chmod 777 upload //加讀寫(xiě)權(quán)限 [root@server3 html]# vim upload_file.php //修改上傳圖片限定大小

[root@server3 html]# /etc/init.d/httpd restart //重啟服務(wù) Stopping httpd: [ OK ] Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.54.7 for ServerName[ OK ]

將默認(rèn)發(fā)布文檔修改成index.php后


[root@server3 html]# cd upload [root@server3 upload]# ls ##圖片未上傳到server3[root@server4 html]# cd upload [root@server4 upload]# ls redhat.jpg ##圖片上傳到server4

總結(jié)

以上是生活随笔為你收集整理的Haproxy + Pacemaker 实现高可用负载均衡(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。