1. 程式人生 > >實現基於Haproxy+Keepalived負載均衡高可用架構

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

keepalived+haproxy

一:環境準備

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

技術分享


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

技術分享

保存退出

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

在centos7裏面,systemctl start keepalived

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

技術分享

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

技術分享


技術分享

修改主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://imageserver.magedu.com check
weight <weight>:權重,默認為1,最大值為256,0表示不參與負載均衡;

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

mode http:基於http協議

bind *:1090 監聽1090端口

stats uri 統計報告訪問url

stats auth 驗證賬號信息

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

技術分享

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

技術分享




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

技術分享

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

技術分享


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

技術分享

然後保存退出,重啟服務

技術分享

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

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


本文出自 “13007865” 博客,請務必保留此出處http://13017865.blog.51cto.com/13007865/1981025

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