Haproxy+Nginx負載均衡群集及調度日誌管理
- 就性能而言,Nginx的upstream模塊支持群集功能,但是對群集節點的健康檢查功能不強。
- LVS的兩種模式性能較好,由於搭建過程較為復雜,後期維護也較為繁瑣。
- haproxy是一種輕量級調度服務軟件,HAProxy實現了一種事件驅動, 單一進程模型,此模型支持非常大的並發連接數。且搭建配置較為簡單。
常用負載均衡調度算法:
- RR(Round Robin)較為簡單的一種輪詢算法,即輪詢調度;在輪詢調度中還有一種加權輪詢,即根據每個節點所分配權重輪詢分配訪問請求。
- LC(Least Connections)即最小連接數算法,這種算法會根據節點服務器已存在鏈接服務數比較,會將訪問請求首先分配到鏈接數較少的節點服務器上,由於實際情況節點服務器的連接數會動態釋放,很難會出現鏈接數一樣的情況,因此LC算法較RR算法有較大改進。
- SH(Source Hashing)基於來源訪問的調度算法,此算法用於一些有session會話記錄在服務器端的場景,可以基於來源的IP地址Cookie等做群集調度。
實驗模型
實驗環境
服務器 | 系統環境 | IP地址 | 所需軟件 |
---|---|---|---|
haproxy服務器 | centos7.3 | 192.168.100.101 | haproxy |
節點web1 | centos7.3 | 192.168.100.201 | Nginx |
節點web2 | centos7.3 | 192.168.100.202 | Nginx |
實驗部署
1、haproxy服務器
-
這裏服務器都是托管在IDC機房中,若是公網訪問需要利用防火墻NAT規則制作映射訪問內網服務器IP。
- 編譯安裝haproxy調度軟件,使得可以調度節點服務器。
yum install pcre pcre-devel bzip2-devel gcc gcc-c++ make -y //安裝編譯所需環境包
tar zxvf haproxy-1.5.19.tar.gz -C /opt/ //解壓haproxy軟件包
cd /opt/haproxy-1.5.19/
make TARGET=linux26 //編譯64位版本
make install //編譯安裝,默認路徑為/etc下
mkdir /etc/haproxy //創建haproxy工作目錄
cp /opt/haproxy-1.5.19/examples/haproxy.cfg /etc/haproxy/ //創建haproxy的配置文件
- 編輯haproxy主配置文件:
cd /etc/haproxy/
vim haproxy.cfg
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
# chroot /usr/share/haproxy //當前工作路徑,因為直接make install默認在/etc/haproxy,故此行無需存在
uid 99
gid 99
daemon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
#redispatch //註釋掉;調度服務器強會重復發送請求給節點服務器
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webcluster 0.0.0.0:80 //定義haproxy監聽頁面
option httpchk GET /test.html //調度網頁形式
balance roundrobin //采用輪詢調度算法
server inst1 192.168.100.201:80 check inter 2000 fall 3
server inst2 192.168.100.202:80 check inter 2000 fall 3
(···刪除其他listen區域)
- 復制服務啟動腳本
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy 復制服務啟動腳本
chmod +x haproxy 增加執行權限
chkconfig --add /etc/init.d/haproxy 加入服務啟動項
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy 加入系統命令隊列,可以不添加,因為都在環境變量
- 啟動服務
service haproxy start
2、節點服務器
- 解壓安裝Nginx服務
tar zxvf nginx-1.12 -C /opt
cd /opt/nginx-1.12
- 創建進程用戶
useradd -M -s /sbin/nologin nginx
- 配置安裝
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx
-
編譯安裝
make && make install
- 創建測試首頁
此處創建首頁格式為test.html,因為在haproxy配置文件中有註明調度網頁形式。為區分調度節點服務器,測試首頁需要不同。
cd /usr/local/nginx/html
echo "this is first test web" > test.html
- 建立Nginx啟動命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
- 啟動服務
systemctl stop firewalld.service
setenforce 0
nginx -t 檢查配置文件
nginx 啟動服務
對於節點服務器二,配置方式同節點服務器一,僅需要在測試頁面區分。
3、調度測試
4、調度日誌管理
由於haproxy調度軟件的日誌文件默認輸出到和系統日誌syslog中,而在生產環境中,這樣的結果容易導致日誌混亂且不便管理查詢,因此需要將haproxy日誌文件單獨定義出來。
- 修改haproxy配置文件
vim /etc/haproxy/haproxy.cfg
global
log /dev/log local0 info //調度日誌為info類型及存放位置
log /dev/log local0 notice //調度日誌為notice類型及存放位置
- 編寫系統日誌管理haproxy日誌的配置文件,方便系統日誌進行管理
touch /etc/rsyslog.d/haproxy.conf
vim haproxy.conf
if ($programname == ‘haproxy‘ and $syslogseverity-text == ‘info‘)
then -/var/log/haproxy/haproxy-info.log //定義新的haproxy日誌文件位置
&~
if ($programname == ‘haproxy‘ and $syslogseverity-text == ‘notice‘)
then -/var/log/haproxy/haproxy-notice.log
&~
-
重啟服務
service haproxy start
systemctl restart rsyslog.service - 日誌訪問測試
當使用客戶端再次訪問時,可以觀察到/var/log/haproxy/下已經生成相應日誌文件。
Haproxy+Nginx負載均衡群集及調度日誌管理