项目实战4—HAProxy实现高级负载均衡实战和ACL控制
??轉自https://www.cnblogs.com/along21/
?haproxy實現高級負載均衡實戰
環境:隨著公司業務的發展,公司負載均衡服務已經實現四層負載均衡,但業務的復雜程度提升,公司要求把mobile手機站點作為單獨的服務提供,不在和pc站點一起提供服務,此時需要做7層規則負載均衡,運維總監要求,能否用一種服務同既能實現七層負載均衡,又能實現四層負載均衡,并且性能高效,配置管理容易,而且還是開源。
總項目流程圖,詳見?http://www.cnblogs.com/along21/p/8000812.html
Haproxy詳解和相關代碼段含義詳見,詳見?http://www.cnblogs.com/along21/p/7899771.html
實驗前準備:
① 兩臺服務器都使用yum 方式安裝haproxy 和 keepalived 服務
yum -y install haproxy
yum -y install keepalived
② iptables -F && setenforing 清空防火墻策略,關閉selinux
??
實戰一:實現基于Haproxy+Keepalived負載均衡高可用架構
1、環境準備:
| 機器名稱 | IP配置 | 服務角色 | 備注 |
| haproxy-server-master | VIP:172.17.100.100 DIP:172.17.1.6 | 負載均衡器 主服務器 | 配置keepalived |
| haproxy-server-backup | VIP:172.17.100.100 DIP:172.17.11.11 | 負載服務器 從服務器 | 配置keepalived |
| rs01 | RIP:172.17.1.7 | 后端服務器 | ? |
| rs02 | RIP:172.17.22.22 | 后端服務器 | ? |
?
2、先配置好keepalived的主從
(1)在haproxy-server-master 上:
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs {notification_email {root@localhost}notification_email_from root@along.comsmtp_server 127.0.0.1smtp_connect_timeout 30router_id keepalived_haproxy }vrrp_script chk_haproxy { #定義一個腳本,發現haproxy服務關閉就降優先級script "killall -0 haproxy"interval 2fall 2rise 2weight -4 }vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 191priority 100advert_int 1authentication {auth_type PASSauth_pass along}virtual_ipaddress {172.17.100.100} track_script { #執行腳本 chk_haproxy } }service keepalived start 開啟keepalived服務
開啟服務后可以查看,VIP已經生成
?
(2)在haproxy-server-backup 從上:只需把主換成從,優先級降低就好
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs {notification_email {root@localhost}notification_email_from root@along.comsmtp_server 127.0.0.1smtp_connect_timeout 30router_id keepalived_haproxy }vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 191priority 98advert_int 1authentication {auth_type PASSauth_pass along}virtual_ipaddress {172.17.100.100} }?
service keepalived start 開啟keepalived服務
?
3、配置haproxy ,總共有兩大段,和第二大段的4小段,兩個haproxy可以配置的一樣
(1)第一大段:global 全局段
globallog 127.0.0.1 local2chroot /var/lib/haproxypidfile /var/run/haproxy.pidmaxconn 40000user haproxygroup haproxydaemonstats socket /var/lib/haproxy/stats(2)第二大段:proxies 對代理的設定
① defaults 默認參數設置段 defaultsmode httplog globaloption httplogoption dontlognulloption http-server-closeoption forwardfor except 127.0.0.0/8option redispatchretries 3timeout http-request 10stimeout queue 1mtimeout connect 10stimeout client 1mtimeout server 1mtimeout http-keep-alive 10stimeout check 10smaxconn 3000② listen 段 listen stats bind 0.0.0.0:1080 stats enable stats hide-version stats uri /haproxyadmin stats auth along:along stats admin if TRUE③ frontend 與客戶端建立連接,打開服務監聽端口段 frontend web bind :80 default_backend lnmp-server④ backend 與后端服務器聯系段 backend lnmp-serverbalance roundrobinoption httpchk GET /index.htmlserver lnmpserver1 172.17.1.7:80 check inter 3000 rise 3 fall 5server lnmpserver2 172.17.22.22:80 check inter 3000 rise 3 fall 5?
開啟服務 service haproxy start
?
4、在后端server·打開事先準備好的web server
systemctl start nginx
systemctl start php-fpm
systemctl start mariadb
?
5、測試
(1)網頁訪問?http://172.17.100.100:1080/haproxyadmin 進入狀態監控頁面,可以控制自己的后端服務
?
(2)可以壞2臺不是一組的機器
一臺后端server宕機,haproxy會調度到另一個server,繼續提供服務
一個主的haproxy宕機,keepalived會把VIP漂移到從上,繼續提供服務
?
實戰二:基于ACL控制實現動靜分離
原理:acl:訪問控制列表,用于實現基于請求報文的首部、響應報文的內容或其它的環境狀態信息來做出轉發決策,這大大增強了其配置彈性。其配置法則通常分為兩步,首先去定義ACL?,即定義一個測試條件,而后在條件得到滿足時執行某特定的動作,如阻止請求或轉發至某特定的后端。
1、環境準備:
?
| 機器名稱 | IP配置 | 服務角色 | 備注 |
| haproxy-server | 172.17.2.7 | 負載均衡器 | 配置keepalived ACL控制 |
| rs01 | RIP:192.168.30.107 | 靜態服務器 | ?小米網頁 |
| rs02 | RIP:192.168.30.7 | 動態服務器 | ?小米網頁 |
2、在haproxy 上定義ACL和后端服務器
vim /etc/haproxy/haproxy.cfg? 前面global 全局段和default 段不用修改
① 定義web 監控頁面 listen stats bind 0.0.0.0:1080 stats enable stats hide-version stats uri /haproxyadmin stats auth along:along stats admin if TRUE② 在frontend 段定義ACL frontend webbind :80acl staticfile path_end .jpg .png .bmp .htm .html .css .jsacl appfile path_end .phpuse_backend staticsrvs if staticfiledefault_backend appsrvs③ 設置backend 后端集群組 backend staticsrvsbalance roundrobinserver staticweb 192.168.30.107:80 check inter 3000 rise 3 fall 3backend appsrvsbalance roundrobinserver appweb 192.168.30.7:80 check inter 3000 rise 3 fall 3?
3、開啟后端web服務
systemctl start nginx
systemctl start php-fpm
systemctl start mariadb
?
4、測試結果
(1)后端服務器正常時
web 檢測頁面,一切正常
?
(2)當后端靜態頁面服務集群宕機,顯示不出靜態頁面,說明動靜分離成功
?
?
實戰三:基于ACL實現權限控制及會話保持
1、環境準備:
?
| 機器名稱 | IP配置 | 服務角色 | 備注 |
| haproxy-server | 172.17.2.7 | 負載均衡器 | 配置keepalived ACL控制 |
| rs01 | RIP:192.168.30.107 | 后端服務器 | ?小米網頁 |
| rs02 | RIP:192.168.30.7 | 后端服務器 | ?小米網頁 |
2、這haproxy 上定義ACL和后端服務器
vim /etc/haproxy/haproxy.cfg? 前面global 全局段和default 段不用修改
① 定義web 監控頁面 listen stats bind 0.0.0.0:1080 stats enable stats hide-version stats uri /haproxyadmin stats auth along:along stats admin if TRUE② 在frontend 段定義ACL,用戶權限控制 frontend webbind :80acl allow_src src 172.17.0.0/16block unless allow_srcdefault_backend appsrvs③ 設置backend 后端集群組,設置cookie,會話保持 backend staticsrvsbalance roundrobincookie SRV insert nocacheserver appweb1 192.168.30.107:80 check inter 3000 rise 3 fall 3 cookie srv1server appweb2 192.168.30.7:80 check inter 3000 rise 3 fall 3 cookie srv2?
3、開啟后端web服務
systemctl start nginx
systemctl start php-fpm
systemctl start mariadb
?
4、檢測結果
(1)檢測權限控制
① 在172.17.0.0 段的機器訪問,正常
?
?② 在這個網段外的機器訪問,拒絕
?
?
(2)檢測會話保持
① 分別在兩個后端創建兩個測試頁面
vim ../test.html
server 1/2
② 測試
curl 測試需加-b SRV= 指定的對應cookie訪問
curl -b SRV=srv1 172.17.2.7/test.html
curl -b SRV=srv2 172.17.2.7/test.html
?
?
實戰四:實現haproxy的ssl加密
1、自簽生成證書
cd /etc/pki/tls/certs
make /etc/haproxy/haproxy.pem
ls /etc/haproxy/haproxy.pem 確實生成了證書和秘鑰的文件
?
2、在haproxy 中設置
frontend webbind :80bind :443 ssl crt /etc/haproxy/haproxy.pem 監聽443端口,且是ssl加密redirect scheme https if !{ ssl_fc } 實現302重定向,將80跳轉到443端口3、網頁訪問?https://172.17.11.11/
?
轉載于:https://www.cnblogs.com/skyhu365/p/10636145.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的项目实战4—HAProxy实现高级负载均衡实战和ACL控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fork/Join 框架介绍
- 下一篇: Rainbond v5.1.2发布,微服