Haproxy是目前比較流行的一種集羣調度工具,同類的集羣工具備不少,前面已經介紹了LVS、Nginx。相比較而言,LVS性能最好,可是搭建相對複雜,Nginx的upstream模塊支持集羣功能,可是對集羣節點健康檢查功能不強,性能沒有Haproxy好。本篇博客將介紹haproxy搭建Web羣集的安裝配置和日誌配置
html
常見的Web集羣調度器前端
Nginx:nginx是一款輕量級,能實現緩存、webserver、郵件、負載均衡等功能,但nginx的許多功能都須要第三方的模塊,但對集羣節點健康檢查功能不強linux
Haproxy:轉發能力比nginx有更強更靈活的定製性,能夠運用splice實現0複製的轉發,而且有更直觀的圖形化管理界面,不過通用性不如nginx,並沒有緩存功能nginx
lvs:lvs是工做在內核空間上直接轉發的,無緩存功能,性能好,配置較複雜web
負載均衡經常使用調度算法算法
RR(Round Robin):輪詢調度,輪詢分配訪問請求實現負載均衡效果vim
LC(Least Connections):最小鏈接數,根據後端的節點鏈接數大小動態分配前端請求後端
SH(Source Hashing):基於來源的IP、Cookie等作集羣調度,好處是實現會話保持,但某些IP訪問量很大時可能影響負載不均衡
案例環境瀏覽器
本案例使用三臺服務器模擬搭建一套Web集羣,以下所示:緩存
主機 |
角色 |
IP |
web1 |
real server-1 |
192.168.1.1/24 |
web2 |
real server-2 |
192.168.1.2/24 |
haproxy |
代理服務器 |
192.168.1.10/24 |
win7 |
客戶端 |
192.168.1.100/24 |
實驗步驟以下:
1. 編輯安裝nginx服務器
(1)搭建nginx1
[root@localhost ~]# yum -y install pcre-devel zlib-devel [root@localhost ~]# tar zxf nginx-1.6.2.tar.gz [root@localhost nginx-1.6.2]# ./configure --prefix=/usr/local/nginx [root@localhost nginx-1.6.2]# make && make install [root@localhost nginx-1.6.2]# cd /usr/local/nginx/html [root@localhost html]# echo "this is 192.168.1.1" > index.html //創建測試頁面 [root@localhost html]# /usr/local/nginx/sbin/nginx //啓動nginx [root@localhost html]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT //創建防火牆規則
(2)搭建nginx2,步驟與nginx1相同,創建不一樣的測試頁面
安裝完成後,在客戶端訪問nginx進行測試,以下圖所示:
2. 安裝配置haproxy
[root@localhost ~]# yum -y install pcre-devel bzip2-devel [root@localhost ~]# tar zxf haproxy-1.4.24.tar.gz [root@localhost ~]# cd haproxy-1.4.24 [root@localhost haproxy-1.4.24]# make TARGET=linux26 [root@localhost haproxy-1.4.24]# make install [root@localhost haproxy-1.4.24]# mkdir /etc/haproxy //建立配置文件目錄 [root@localhost haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy/ //將樣本複製到配置文件目錄
3. 根據目前集羣設計,將haproxy.cfg配置文件修改以下:
[root@localhost haproxy-1.4.24]# vim /etc/haproxy/haproxy.cfg global //全局配置 log 127.0.0.1 local0 //配置日誌記錄,默認存放到系統日誌 log 127.0.0.1 local1 notice //notice爲日誌級別,一般有24個級別 maxconn 4096 //最大鏈接數 uid 99 //用戶uid gid 99 //用戶gid daemon //後臺運行 #debug #quiet defaults //默認配置 log global //定義全局配置日誌格式 mode http //模式爲http option httplog //採用http日誌格式記錄日誌 option dontlognull //不記錄健康檢查的日誌信息 retries 3 //檢查節點的失敗次數,連續失敗三次則認爲節點不可用 maxconn 2000 //最大鏈接數 contimeout 5000 //鏈接超時時間 clitimeout 50000 //客戶端超時時間 srvtimeout 50000 //服務器超時時間 listen webcluster 0.0.0.0:80 //定義一個webcluster應用模塊 option httpchk GET /index.html //檢查服務器的index.html文件 balance roundrobin //負載均衡的調度算法採用輪詢算法 server inst1 192.168.1.1:80 check inter 2000 fall 3 //定義在線節點,每間隔2秒檢查3次 server inst2 192.168.1.2:80 check inter 2000 fall 3 //定義備份節點
4. 建立自啓動腳本
[root@localhost haproxy-1.4.24]# cp examples/haproxy.init /etc/init.d/haproxy [root@localhost haproxy-1.4.24]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy [root@localhost haproxy-1.4.24]# chmod +x /etc/init.d/haproxy [root@localhost haproxy-1.4.24]# /etc/init.d/haproxy start Starting haproxy: [肯定] [root@localhost haproxy-1.4.24]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
5. 測試Web集羣
經過上面的步驟,已經搭建完成Haproxy的Web集羣,下面驗證一下集羣是否正常工做,一個集羣通常具有兩個特性:高性能與高可用
(1)測試高性能
在客戶端使用瀏覽器打開http://192.168.1.10,以下圖所示:
(2)測試高可用
如今將nginx1服務停用,在客戶端訪問代理服務器,瀏覽器會顯示nginx2網頁內容,不會影響集羣的使用,知足了集羣的高可用性
6. 配置haproxy日誌
Haproxy的日誌默認是保存到系統的syslog中,查看起來不方便,因此咱們在生產環境中能夠將日誌單獨存儲到不一樣的文件中,配置以下:
(1)修改配置文件
[root@localhost ~]# vim /etc/haproxy/haproxy.cfg log /dev/log local0 info //將info、notice日誌記錄分別記錄到不一樣的日誌文件中 log /dev/log local0 notice [root@localhost ~]# service haproxy restart Shutting down haproxy: [肯定] Starting haproxy: [肯定]
(2)修改rsyslog配置
將haproxy相關的配置獨立定義到haproxy.conf,並放到/etc/rsyslog.d下,rsyslog啓動時會自動加載此目錄下全部的配置文件
[root@localhost ~]# touch /etc/rsyslog.d/haproxy.conf [root@localhost ~]# vim /etc/rsyslog.d/haproxy.conf if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log & ~ if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log & ~ [root@localhost ~]# service rsyslog restart 關閉系統日誌記錄器: [肯定] 啓動系統日誌記錄器: [肯定]
7. 測試日誌信息
[root@localhost ~]# tail -f /var/log/haproxy/haproxy-info.log //查看haproxy的訪問請求日誌信息 Feb 28 19:37:38 localhost haproxy[8432]: 192.168.1.111:61757 [28/Feb/2018:19:37:38.000] webcluster webcluster/inst1 0/0/0/1/3 304 150 - - ---- 2/2/0/0/0 0/0 "GET / HTTP/1.1"
若是haproxy服務器出現故障,依然會影響集羣的使用,能夠增長一臺haproxy安裝keepalived保證haproxy服務器自己的高可用,注意防火牆開啓224.0.0.18端口,這是keepalived的組播地址。
iptables -I INPUT -p ip -d 224.0.0.18 -j ACCEPT