項目實戰4—haproxy 負載平衡和ACL控制,haproxyacl

來源:互聯網
上載者:User

項目實戰4—haproxy 負載平衡和ACL控制,haproxyacl

 

 haproxy實現進階負載平衡實戰

  環境:隨著公司業務的發展,公司負載平衡服務已經實現四層負載平衡,但業務的複雜程度提升,公司要求把mobile手機網站作為單獨的服務提供,不在和pc網站一起提供服務,此時需要做7層規則負載平衡,營運總監要求,能否用一種服務同既能實現七層負載平衡,又能實現四層負載平衡,並且效能高效,組態管理容易,而且還是開源。

總項目流程圖,詳見 http://www.cnblogs.com/along21/p/7435612.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 keepalivedglobal_defs {   notification_email {        root@localhost   }   notification_email_from root@along.com   smtp_server 127.0.0.1   smtp_connect_timeout 30   router_id keepalived_haproxy}vrrp_script chk_haproxy {   #定義一個指令碼,發現haproxy服務關閉就降優先順序        script "killall -0 haproxy"        interval 2        fall 2        rise 2        weight -4}vrrp_instance VI_1 {    state MASTER    interface eth0    virtual_router_id 191    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass along    }    virtual_ipaddress {        172.17.100.100    }track_script {   #執行指令碼chk_haproxy}}

service keepalived start 開啟keepalived服務

開啟服務後可以查看,VIP已經產生

 

(2)在haproxy-server-master 從上:只需把主換成從,優先順序降低就好

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalivedglobal_defs {   notification_email {        root@localhost   }   notification_email_from root@along.com   smtp_server 127.0.0.1   smtp_connect_timeout 30   router_id keepalived_haproxy}vrrp_instance VI_1 {    state BACKUP    interface eth0    virtual_router_id 191    priority 98    advert_int 1    authentication {        auth_type PASS        auth_pass along    }    virtual_ipaddress {        172.17.100.100    }}

 

service keepalived start 開啟keepalived服務

 

3、配置haproxy ,總共有兩大段,和第二大段的4小段,兩個haproxy可以配置的一樣

(1)第一大段:global 全域段

global    log         127.0.0.1 local2    chroot      /var/lib/haproxy    pidfile     /var/run/haproxy.pid    maxconn     40000    user        haproxy    group       haproxy    daemon    stats socket /var/lib/haproxy/stats

(2)第二大段:proxies 對代理的設定

① defaults 預設參數設定段defaults    mode                    http    log                     global    option                  httplog    option                  dontlognull    option http-server-close    option forwardfor       except 127.0.0.0/8    option                  redispatch    retries                 3    timeout http-request    10s    timeout queue           1m    timeout connect         10s    timeout client          1m    timeout server          1m    timeout http-keep-alive 10s    timeout check           10s    maxconn                 3000② listen 段listen statsbind 0.0.0.0:1080stats enablestats hide-versionstats uri /haproxyadminstats auth along:alongstats admin if TRUE③ frontend 與用戶端建立串連,開啟服務監聽連接埠段frontend  webbind :80default_backend         lnmp-server④ backend 與後端伺服器聯絡段backend lnmp-server    balance     roundrobin    option      httpchk GET /index.html    server  lnmpserver1 172.17.1.7:80 check inter 3000 rise 3 fall 5    server  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 statsbind 0.0.0.0:1080stats enablestats hide-versionstats uri /haproxyadminstats auth along:alongstats admin if TRUE② 在frontend 段定義ACLfrontend web        bind :80        acl staticfile path_end .jpg .png .bmp .htm .html .css .js        acl appfile path_end .php        use_backend staticsrvs if staticfile        default_backend appsrvs③ 設定backend 後端叢集組backend staticsrvs        balance roundrobin        server staticweb 192.168.30.107:80 check inter 3000 rise 3 fall 3backend appsrvs        balance roundrobin        server 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 statsbind 0.0.0.0:1080stats enablestats hide-versionstats uri /haproxyadminstats auth along:alongstats admin if TRUE② 在frontend 段定義ACL,使用者權限控制frontend web        bind :80        acl allow_src src 172.17.0.0/16        block unless allow_src        default_backend appsrvs③ 設定backend 後端叢集組,設定cookie,會話保持backend staticsrvs        balance roundrobin        cookie SRV insert nocache        server appweb1 192.168.30.107:80 check inter 3000 rise 3 fall 3 cookie srv1        server 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  web        bind :80        bind :443 ssl crt /etc/haproxy/haproxy.pem   監聽443連接埠,且是ssl加密        redirect scheme https if !{ ssl_fc }    實現302重新導向,將80跳轉到443連接埠
3、網頁訪問 https://172.17.11.11/

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.