項目實戰4—haproxy 負載均衡和ACL控制

来源:http://www.cnblogs.com/along21/archive/2017/11/26/7873998.html
-Advertisement-
Play Games

haproxy實現高級負載均衡實戰 環境:隨著公司業務的發展,公司負載均衡服務已經實現四層負載均衡,但業務的複雜程度提升,公司要求把mobile手機站點作為單獨的服務提供,不在和pc站點一起提供服務,此時需要做7層規則負載均衡,運維總監要求,能否用一種服務同既能實現七層負載均衡,又能實現四層負載均衡 ...


 

 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 keepalived
global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from [email protected]
   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 keepalived
global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from [email protected]
   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 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-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 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 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 3

backend 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 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 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/

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.創建mysql用戶,mysql組. # useradd -s /bin/nologin -M mysql 查看是否創建成功. # id mysql 2.講mysql的二進位包解壓到/usr/local/目錄下. # cd /usr/local/ # tar -zxvf mysql-5.7.20- ...
  • Mysql的許可權 mysql中存在4個控制許可權的表,分別為user表,db表,tables_priv表,columns_priv表。 mysql許可權表的驗證過程為: 先從user表中的Host,User,Password這3個欄位中判斷連接的ip、用戶名、密碼是否存在,存在則通過驗證。 通過身份認證 ...
  • grep 簡介 grep(Global search REgular expression and Print out the line)是Linux上的文本處理三劍客之一,另外兩個是sed和awk. grep是文本搜索工具,根據用戶指定的pattern(由文本字元及正則表達式元字元編寫的過濾條件) ...
  • 首先安裝expect # yum -y install expect 命令格式 # ./expect IP COMM #expect是獨立的工具,所以不能用sh來執行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #!/usr/bin/expect ...
  • zabbix入門知識 zabbix中文手冊 https://www.zabbix.com/documentation/3.4/manual/ 1.zabbix介紹 2.zabbix系統架構圖 3.zabbix的組件 4.zabbix支持的通訊協議 5.zabbix的工作模式 6.zabbix的監控過 ...
  • 系統環境:Centos7.4 今天在安裝 Nodejs8.7 的時候,報了一個警告: WARNING: C++ Compiler too old, need g++ 4.9.4 or clang++ 3.4.2 (CXX=g++) 然後,查了一下自己系統上安裝的版本:4.8.5 好吧,不能用 yum ...
  • ls 顯示當前目錄內容 1)ls / (顯示根目錄下所有的目錄和文件) 2)ls l / (以列表的形式顯示根目錄下所有的目錄和文件) 絕對路徑和相對路徑 1)絕對路徑,以/開頭的都是絕對路徑,比如/home/pzm 2)相對路徑,以./ 或者../開頭的,./是指當前目錄,../是指上一層目錄 m ...
  • I.STM32 DWT時間戳功能實現 1.m3、m4實測可用。 2.精度:1/內核頻率(s)。 3.實現流程: a.先使能DWT外設,由內核調試寄存器DEM_CR的位24控制,寫1使能。 b.使能CYCCNT寄存器之前,先清0。 c.使能CYCCNT寄存器,由DWT_CTRL的位0控制,寫1使能。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...