實現基於Haproxy+Keepalived負載均衡高可用架構

一:環境準備

centos系統服務器4臺,兩臺用於做haproxy主從架構,

兩臺作爲後端server,服務器配置好yum源,防火牆關閉,

關閉selinux,各節點時鐘服務同步,各節點之間可以通過主機名互相通信。

二:安裝步驟

1.iptables –F &&setenforing 清空防火牆策略,關閉selinux.

2.拿兩臺服務器都使用yum方式安haproxy,keepalived

服務

3.後端服務器配置好基於LNMP架構的web服務

當準備工作做好之後,就可以修改配置文件啦,第一個我們要修改的配置文件是

/etc/keepalived/keepalived.conf配置文件內容

在state裏面定義主或從

在virtual_route_id 定義id號,請注意,主和從定義的id號一定要相同

在priority 定義優先級

在virtual_ipaddress定義一個虛擬的vip 172.17.252.53

50e5b7202ad1cb1b52281ea31e6236ab.png


然後在另一臺haproxy的服務器上做配置

20fecbd1a3be924362dfb5e86a3a9406.png

保存退出

然後啓動服務:在centos6裏面 service keepalived  start

在centos7裏面,systemctl   start keepalived

啓動了服務之後,因爲主的優先級高,所以我們看到在主裏面那個虛擬的vip

f56544480253f2d99ca8e503ab3b204d.png

  當我們把主裏面的服務停了,我們在從裏面就可以看到那個虛擬的vip,說明已經實現了vip的漂移。實現了高可用

8984de460249d65ce54a72d443ec4f17.png


62246170fbc2479b461cac794dff0094.png

修改主haproxy配置文件,定義全局配置,配置日誌,啓動用戶,pid文件等

在修改之前呢,我們先學習一下haproxy的配置文件結構

global # 全局配置
daemon #讓haproxy以守護進程的方式工作於後臺,其等同於“-D”選項的功能,
當然,也可以在命令行中以“-db”選項將其禁用;
maxconn 25600 #設定每個haproxy進程所接受的最大併發連接數,其等同於命令行
選項“-n”;“ulimit -n”自動計算的結果正是參照此參數設定的

defaults # 默認配置
mode http #設定實例的運行模式或協議。當實現內容交換時,前端和後端必須工作
於同一種模式

frontend http-in # 定義前端server
bind *:80 #此指令僅能用於frontend和listen區段,用於定義一個或幾個監聽的套接字
default_backend servers #設置後端服務器組

backend servers # 定義後端服務器組
server server1 127.0.0.1:8080 check #服務器組中包含的主機

global #全局配置 (進程管理及安全相關的參數)
- chroot <jail dir>:修改haproxy的工作目錄至指定的目錄並在放棄權限之前執行
chroot()操作,可以提升haproxy的安全級別,
- daemon:讓haproxy以守護進程的方式工作於後臺,其等同於“-D”選項的功能,
當然,也可以在命令行中以“-db”選項將其禁用;
- gid <number>:以指定的GID運行haproxy,建議使用專用於運行haproxy的GID,
以免因權限問題帶來風險;
- group <group name>:同gid,不過指定的組名;
- log <address> <facility> [max level [min level]]:定義全局的syslog服務器,最
多可以定義兩個;
- nbproc <number>:指定啓動的haproxy進程個數,只能用於守護進程模式的
haproxy;默認只啓動一個進程,
- uid:以指定的UID身份運行haproxy進程;
- user:同uid,但使用的是用戶名;
- ulimit-n:設定每進程所能夠打開的最大文件描述符數目,默認情況下其會自動進行計
算,因此不推薦修改此選項;
- stats:可開啓一個unix socket管理接口

proxies 代理相關的配置可以如下:
- defaults <name>
- frontend <name>
- backend <name>
- listen <name>
“defaults”段用於爲所有其它配置段提供默認參數,這配置默認配置參數可由下一個
“defaults”所重新設定。
“frontend”段用於定義一系列監聽的套接字,這些套接字可接受客戶端請求並與之建立連接。
“backend”段用於定義一系列“後端”服務器,代理將會將對應客戶端的請求轉發至這些服務器

“listen段通過關聯“前端”和“後端”定義了一個完整的代理,frontend和backend 塊的結合體
所有代理的名稱只能使用大寫字母、小寫字母、數字、-(中線)、_(下劃線)、.(點號)和:(冒號)。此
外,ACL名稱會區分字母大小寫。

defaults相關的配置可以如下:
defaults
mode http #實現http的7層規則
log global #日誌定義
option httplog #啓用日誌記錄HTTP請求,默認haproxy日誌記錄是
不記錄HTTP請求
option dontlognull #日誌中將不會記錄空連接。
option httpclose # 強制短連接,每次收發完包後都把連接關閉
option forwardfor #添加xforward日誌標記
retries 3 # 定義連接後端服務器的失敗重連次數
timeout http-request 10s # 請求超時
timeout queue 1m #隊列超時
timeout connect 10s #連接超時
timeout client 1m #客戶端超時

listen 相關的配置可以如下:
listen段通過關聯“前端”和“後端”定義了一個完整的代理,frontend
和backend 塊的結合體
listen stats #定義一個統計報告服務
mode http #基於http協議
bind 0.0.0.0:1080 #監聽1080端口
stats enable #開啓統計報告服務
stats hide-version #隱藏統計報告版本信息
stats uri /haproxyadmin?stats #統計報告訪問url
stats realm Haproxy\ Statistics #頁面登陸信息
stats auth admin:admin #驗證賬號信息
stats admin if TRUE #驗證模式

server #定義服務主機
server <name> <address>[:port] [param*]
[param*]:爲此服務器設定的一系參數;其可用的參數非常多,具體請參考官方文檔中的說明,下面僅說明幾個常用的參數;
服務器或默認服務器參數:
backup:設定爲備用服務器,僅在負載均衡場景中的其它server均不可用於啓用此server;
check:啓動對此server執行健康狀態檢查,其可以藉助於額外的其它參數完成更精細的設定,如:
inter <delay>:設定健康狀態檢查的時間間隔,單位爲毫秒,默認爲2000;也可以使用fastinter和downinter來根據服務器端狀態優化此時間延遲;
rise <count>:設定健康狀態檢查中,某離線的server從離線狀態轉換至正常狀態需要成功檢查的次數;
fall <count>:確認server從正常狀態轉換爲不可用狀態需要檢查的次數;
cookie <value>:爲指定server設定cookie值,此處指定的值將在請求入站時被檢查,第一次爲此值挑選的
server將在後續的請求中被選中,其目的在於實現持久連接的功能;
maxconn <maxconn>:指定此服務器接受的最大併發連接數;如果發往此服務器的連接數目高於此處指定的值,其將被放置於請求隊列,以等待其它連接被釋放;
maxqueue <maxqueue>:設定請求隊列的最大長度;
observe <mode>:通過觀察服務器的通信狀況來判定其健康狀態,默認爲禁用,其支持的類型有“layer4”和“layer7”,“layer7”僅能用於http代理場景;
redir <prefix>:啓用重定向功能,將發往此服務器的GET和HEAD請求均以302狀態碼響應;需要注意的是,在prefix後面不能使用/,且不能使用相對地址,以免造成循環;例如:
server srv1 172.16.100.6:80 redir http://p_w_picpathserver.magedu.com check
weight <weight>:權重,默認爲1,最大值爲256,0表示不參與負載均衡;

學習了haproxy的配置文件結構和內容之後,接下來,我們就要繼續修改配置文件了,首先我們可以定義一個統計報告服務的頁面

mode http:基於http協議

bind *:1090 監聽1090端口

stats uri 統計報告訪問url

stats auth  驗證賬號信息

stats  admin if TRUE(一定要大寫)驗證模式

bf83bc00a3501c6a8ddd6084d00d148b.png

然後通過那個虛擬的vip進行訪問

3b343c8d63bb33adcaca49f4a16fdd72.png




可以通過如下圖形界面進行管理

53b44bda7fec777f280d4ef9fdfd0336.png

配置一個frontend, 並關聯到後端backend rs-server

628bbfee1f00b15cda2c277c846f2af3.png


配置後端backend rs-server,添加兩臺web服務,並配置健康狀態檢查,實現負載均衡

dea2e538e40c84585bd44bf57694582c.png

然後保存退出,重啓服務

ec8cc04556da8a488423c4cdcc386f3a.png

配置主haproxy完成後,同步配置到從haproxy,並啓動所有服務。

然後就可以了。你學會了嗎?


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章