使用Haproxy搭建負載均衡高可用羣集

    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集羣,以下所示:緩存

楊書凡09.png

主機
角色
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進行測試,以下圖所示:

楊書凡10.png

楊書凡11.png




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,以下圖所示:

楊書凡12.png


(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

參考文檔:http://www.javashuo.com/article/p-tbdkmewf-dr.html

相關文章
相關標籤/搜索