CentOS7.2 部署Haproxy 1.7.2,centos7.2haproxy

來源:互聯網
上載者:User

CentOS7.2 部署Haproxy 1.7.2,centos7.2haproxy

原文發表於cu:2017-03-16

參考文檔:

本文涉及haproxy的安裝,並做簡單配置。

一.環境準備1. 作業系統

CentOS-7-x86_64-Everything-1511

2. Haproxy版本

截至2017-02-23,haproxy穩定版本是1.7.2: http://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz

3. 拓撲圖

二.Haproxy安裝1. 下載
[root@elk-node2 ~]# cd /usr/local/src/[root@elk-node2 src]# wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz
2. 編譯安裝
#”TARGET”指定編譯對應的os對應的核心版本,通過”uname -r”查詢核心版本呢,README檔案可查詢對應關係[root@elk-node2 src]# tar -zxvf haproxy-1.7.2.tar.gz[root@elk-node2 src]# cd haproxy-1.7.2[root@elk-node2 haproxy-1.7.2]# make TARGET=linux2628 PREFIX=/usr/local/haproxy[root@elk-node2 haproxy-1.7.2]# make install PREFIX=/usr/local/haproxy
三.Haproxy配置1. 配置使用者
[root@elk-node2 ~]# groupadd haproxy[root@elk-node2 ~]# useradd -g haproxy haproxy -s /sbin/nologin
2. 設定檔1)設定檔詳解
#預設安裝目錄下沒有設定檔,只有”doc”,“sbin”,“share”三個目錄,可手工建立目錄及設定檔;#haproxy的設定檔主要是以下5部分:global全域配置、defaults預設配置、監控頁面配置、frontend配置、backend配置[root@elk-node2 ~]# mkdir -p /usr/local/haproxy/etc[root@elk-node2 ~]# cd /usr/local/haproxy/etc/[root@elk-node2 etc]# vim haproxy.cfg#全域配置, 用於設定義全域參數, 屬於進程級的配置, 通常與作業系統配置有關.global    #定義全域日誌, 配置在本地, 通過local0 輸出, 預設是info層級,可配置兩條    log         127.0.0.1 local0 warning    #定義記錄層級【error warning info debug】    #log         127.0.0.1 local1 info        #運行路徑    chroot      /usr/local/haproxy    #PID 檔案存放路徑    pidfile     /var/run/haproxy.pid        #設定每haproxy進程的最大並發串連數, 其等同於命令列選項“-n”; “ulimit -n”自動計算的結果參照此參數設定.    maxconn     4096        #運行haproxy 使用者, 或者使用關鍵字uid    user        haproxy    #運行haproxy 使用者組, 或者使用關鍵字gid    group       haproxy        #後台運行haproxy    daemon    #設定啟動的haproxy進程數量, 只能用於守護進程模式的haproxy;    #預設只啟動一個進程, 鑒於調試困難等多方面的原因, 一般只在單進程僅能開啟少數檔案描述符的情境中才使用多進程模式.    nbproc      1    #設定每進程所能夠開啟的最大檔案描述符數目, 預設情況其會自動進行計算, 因此不推薦修改此選項.    #ulimit-n 819200         #調試層級, 一般只在開啟單進程時調試, 且生產環境禁用.    #debug    #haproxy啟動後不會顯示任何相關資訊, 這與在命令列啟動haproxy時加上參數“-q”相同    #quiet        #定義統計資訊儲存位置    stats socket /usr/local/haproxy/stats#預設配置    defaults    #預設的模式【tcp:4層; http:7層; health:只返回OK】    mode        http        #繼承全域的記錄定義輸出    log         global        #日誌類別, httplog    #option      httplog     #如果後端伺服器需要記錄用戶端真實ip, 需要在HTTP請求中添加”X-Forwarded-For”欄位;    #但haproxy自身的健康檢測機制訪問後端伺服器時, 不應將記錄訪問日誌,可用except來排除127.0.0.0,即haproxy本身.    #option      forwardfor except 127.0.0.0/8    option      forwardfor     #開啟http協議中伺服器端關閉功能, 每個請求完畢後主動關閉http通道, 使得支援長串連,使得會話可以被重用,使得每一個日誌記錄都會被記錄.    option      httpclose     #如果產生了一個空串連,那這個空串連的日誌將不會記錄.    option      dontlognull    #當與後端伺服器的會話失敗(伺服器故障或其他原因)時, 把會話重新分發到其他健康的伺服器上; 當故障伺服器恢複時, 會話又被定向到已恢複的伺服器上;    #還可以用”retries”關鍵字來設定在判定會話失敗時的嘗試串連的次數    option      redispatch    retries     3        #當haproxy負載很高時, 自動結束掉當前隊列處理比較久的連結.    option      abortonclose    #預設http請求逾時時間    timeout http-request    10s    #預設隊列逾時時間, 後端伺服器在高負載時, 會將haproxy發來的請求放進一個隊列中.     timeout queue           1m    #haproxy與後端伺服器連線逾時時間.    timeout connect         5s    #用戶端與haproxy串連後, 資料轉送完畢, 不再有資料轉送, 即非活動串連的逾時時間.    timeout client          1m    #haproxy與後端伺服器非活動串連的逾時時間.    timeout server          1m    #預設新的http請求串連建立的逾時時間,時間較短時可以儘快釋放出資源,節約資源.    timeout http-keep-alive 10s    #心跳檢測逾時時間    timeout check           10s        #最大並發串連數    maxconn                 2000        #設定預設的負載平衡方式    #balance source     #balnace leastconn#統計頁面配置, frontend和backend的組合體, 監控組的名稱可按需自訂listen admin_status    #配置監控運行模式    mode http        #配置統計頁面訪問連接埠    bind 0.0.0.0:1080        #統計頁面預設最大串連數    maxconn 10        #http日誌格式    option httplog         #開啟統計    stats enable        #隱藏統計頁面上的haproxy版本資訊    stats hide-version        #監控頁面自動重新整理時間    stats refresh 30s        #統計頁面訪問url    stats uri /stats        #統計頁面密碼框提示文本    stats realm mCloud\ Haproxy        #監控頁面的使用者和密碼:admin, 可設定多個使用者名稱    stats auth admin:admin        #手工啟動/禁用後端伺服器, 可通過web管理節點    stats admin if TRUE    #設定haproxy錯誤頁面    errorfile 400 /usr/local/haproxy/errorfiles/400.http    errorfile 403 /usr/local/haproxy/errorfiles/403.http    errorfile 408 /usr/local/haproxy/errorfiles/408.http    errorfile 500 /usr/local/haproxy/errorfiles/500.http    errorfile 502 /usr/local/haproxy/errorfiles/502.http    errorfile 503 /usr/local/haproxy/errorfiles/503.http    errorfile 504 /usr/local/haproxy/errorfiles/504.http#監控haproxy後端伺服器的監控狀態listen site_status        bind 0.0.0.0:1081                       #監聽連接埠       mode http                               #http的7層模式       log 127.0.0.1 local2 err                #[err warning info debug]        monitor-uri /site_status                #網站健康檢測URL,用來檢測HAProxy管理的網站是否可以用,正常返回200,不正常返回503        acl site_dead nbsrv(php_server) lt 1    #定義網站down時的策略當掛在負載平衡上的指定backend的中有效機器數小於1台時返回true        acl site_dead nbsrv(html_server) lt 1        acl site_dead nbsrv(backend_default)  lt 1         monitor fail if site_dead               #當滿足策略的時候返回503,網上文檔說的是500,實際測試為503        monitor-net 192.168.4.171/32            #來自192.168.4.152的日誌資訊不會被記錄和轉寄       monitor-net 192.168.4.172/32    #frontend, 名字自訂frontend HAproxy_Cluster    #定義前端監聽連接埠, 建議採用bind *:80的形式,否則做叢集高可用的時候有問題,vip切換到其餘機器就不能訪問.    bind 0.0.0.0:80    #acl後面是規則名稱,當請求的url末尾是以.php結尾時,匹配觸發php_web規則,以下兩種寫法均可.    acl php_web url_reg /*.php    #當請求的url末尾是以.css、.jpg、.png、.jpeg、.js、.gif結尾時,匹配並觸發static_web規則.    #acl static_web path_end .gif .png .jpg .css .js .jpeg    #acl static_web url_reg /*.(css|jpg|png|jpeg|js|gif)$    #-i為忽略大小寫,當被請求的是以www.test.com開頭的主機時,匹配並觸發dns_name規則.    acl html_web hdr_beg(host) -i www.haproxytest.com    #acl html_web hdr_beg(host) 10.11.4.152    #當用戶端的IP是x.x.x.x時,匹配並觸發src_ip規則.    #acl src_ip src x.x.x.x    #如果匹配acl規則php_web,將請求轉交到php_server組處理;如果匹配acl規則html_web,將請求轉交到html_server組處理.    use_backend php_server if php_web    use_backend html_server if html_web    #如果以上規則都不匹配時,將請求轉交到default_backend組處理.    default_backend backend_default#backend後端配置, 配置php_server組與html_server組backend php_server    #定義負載平衡方式為roundrobin方式, 即基於權重進行輪詢調度的演算法, 在伺服器效能分布較均勻情況下推薦.    #另有如下幾種負載平衡方式:    #-- static-rr: 也是基於權重進行輪轉調度, 但屬於靜態方法, 運行時調整後端機組權重不會使用新的權重;    #-- source: 基於請求源IP進行hash運算匹配後端伺服器組;    #-- leastconn: 不適合會話較短的環境, 如基於http的應用;    #-- uri: 對整個URI進行hash運算;    #-- uri_param: 對URI中的參數進行轉寄;    #-- hdr(<name>):根據http頭進行轉寄, 無該頭部則轉為使用roundrobin.    balance roundrobin    mode http    #允許插入serverid到cookie中,serverid後面可定義    cookie SERVERID    #心跳檢測方式為檢測後端伺服器index.html檔案,還有其他方式    option httpchk GET /index.html    #後端伺服器定義, maxconn 1024表示該伺服器的最大串連數, cookie 1表示serverid為1, weight代表權重(預設1,最大為265,0則表示不參與負載平衡),     #check inter 1500是檢測心跳頻率, rise 2是2次正確認為伺服器可用, fall 3是3次失敗認為伺服器不可用.    server php1 192.168.4.171:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3backend html_server    balance source    mode http    server html1 192.168.4.172:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3backend backend_default    balance source    mode http    server default1 192.168.4.171:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3
2)error檔案
#設定檔中統計監控頁面部分定義了error檔案,將安裝包中的檔案複製到安裝目錄使用[root@elk-node2 ~]# cp -r /usr/local/src/haproxy-1.7.2/examples/errorfiles/ /usr/local/haproxy/
3)記錄檔建立檔案
[root@elk-node2 ~]# mkdir -p /usr/local/haproxy/log[root@elk-node2 ~]# touch /usr/local/haproxy/log/haproxy.log[root@elk-node2 ~]# ln -s /usr/local/haproxy/log/haproxy.log /var/log/[root@elk-node2 ~]# chown haproxy:haproxy /var/log/haproxy.log
rsyslog主設定檔
#修改”SYSLOGD_OPTIONS”參數,-c 2 使用相容模式,預設是 -c 5;-r 開啟遠程日誌;-m 0 標記時間戳記,單位是分鐘,0表示禁用該功能[root@elk-node2 ~]# vim /etc/sysconfig/rsyslogSYSLOGD_OPTIONS="-c 2 -r -m 0"
rsyslog檔案
#haproxy預設沒有日誌,依靠rsyslog收集日誌;#檔案最末尾的“&~”,如果沒有此配置,日誌除寫入指定檔案外,會同步寫入messages檔案[root@elk-node2 ~]# cd /etc/rsyslog.d/[root@elk-node2 rsyslog.d]# touch haproxy.conf[root@elk-node2 rsyslog.d]# chown haproxy:haproxy haproxy.conf[root@elk-node2 rsyslog.d]# vim haproxy.conf# Provides UDP syslog reception$ModLoad imudp$UDPServerRun 514# haproxy.log#  local0.*   /usr/local/haproxy/log/haproxy.log#local1.*   /usr/local/haproxy/log/haproxy.loglocal2.*   /usr/local/haproxy/log/haproxy.log&~[root@elk-node2 rsyslog.d]# systemctl restart rsyslog.service#關閉selinux,本文因沒有關閉selinux導致排查問題用了比較長的時間[root@elk-node2 rsyslog.d]# setenforce 0
4)設定檔許可權及軟連結
[root@elk-node2 ~]# chown -R haproxy:haproxy /usr/local/haproxy/[root@elk-node2 ~]# mkdir -p /etc/haproxy[root@elk-node2 ~]# ln -s /usr/local/haproxy/etc/haproxy.cfg /etc/haproxy/[root@elk-node2 ~]# chown -R haproxy:haproxy /etc/haproxy
3. 配置開機啟動
[root@elk-node2 ~]# cp /usr/local/src/haproxy-1.7.2/examples/haproxy.init /etc/rc.d/init.d/haproxy[root@elk-node2 ~]# chown haproxy:haproxy /etc/rc.d/init.d/haproxy[root@elk-node2 ~]# chmod +x /etc/rc.d/init.d/haproxy[root@elk-node2 ~]# chkconfig --add haproxy[root@elk-node2 ~]# chkconfig --level 35 haproxy on
4. 配置全域開機檔案
#採用軟連結方式[root@elk-node2 ~]# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/[root@elk-node2 ~]# chown haproxy:haproxy /usr/sbin/haproxy
5. 配置防火牆
#開放如上連接埠,均在設定檔中有定義,日誌連接埠在rsyslog.d/haproxy.conf檔案中定義[root@elk-node2 ~]# vim /etc/sysconfig/iptables-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport 1080 -j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport 1081 -j ACCEPT-A INPUT -p udp -m state --state NEW -m tcp --dport 514 -j ACCEPT[root@elk-node2 ~]# service iptables restart
6. 啟動並驗證
[root@elk-node2 ~]# service haproxy start
1)連接埠驗證
[root@elk-node2 ~]# netstat –tunlp

2)監控頁面

監控頁面展示資訊與賬戶/密碼在設定檔中已定義。

3)訪問頁面

觸發設定檔中定義的php_server組,如下:

觸發設定檔中定義的html_server組(在本地修改hosts檔案),如下:

觸發設定檔中定義的backend_default組,如下:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.