天天看點

Linux系統架構-----Haproxy與Nginx群集

一.Haproxy簡介

  • Haproxy是一個使用C語言編寫的自由及開放源代碼軟體,其提供高可用性、負載均衡,以及基于TCP和HTTP的應用的程式代理。
  • Haproxy特别适用于負載特大的web站點,這些站點通常又需要會話保持或七層處理。Haproxy運作在目前的硬體上,完全可以支援數以萬計的并發連接配接。并且它的運作模式使得它可以很簡單安全的整合進您目前的架構中,同時可以保護你的web伺服器不被暴露在網絡上
  • Haproxy實作了一種事件驅動,單一程序模型,此模型支援非常大的并發連接配接數。多進行或線程模型受記憶體的限制,系統排程器限制以及無處不在的鎖限制,很少能處理數千并發連接配接。事件驅動模型因為在有更好的資源和時間管理的使用者空間實作所有這些任務,是以沒有這些問題。此模型的弊端是,在多核系統上,這些程式通常擴充性較差。這就是為什麼他們必須進行優化以使每個cpu時間片做更多的工作
  • 此外,包括GItHub、Bitbucket、Stack Overflow、Reddit、Tumber、Twitter、Tuenti在内的知名網站,以及亞馬遜網絡服務系統使用了Haproxy

二.Haproxy搭建web群集分析

  • Haproxy是目前比較流行的一種群集排程工具,同類群集排程工具也有很多,比如LVS和Nginx.相對而言,LVS的性能最好,但是搭建相對複雜,Nginx的upstream子產品支援群集功能,但是對群集節點的健康檢查功能不強,性能沒有Haproxy好
  • Haproxy官網是http://haproxy.1wt.eu/
  • 目前常見的web群集排程器分為軟體和硬體兩類,軟體通常使用開源的LVS、Haproxy、Nginx,硬體一般使用比較多的是F5,當然國内也有一些産品,比如:梭子魚、綠盟等。
  • Haproxy配置檔案的分析
[[email protected] ~]# cd haproxy-1.5.19/examples
[[email protected] examples]# vim haproxy.cfg 
##Haproxy配置檔案通常分為三個部分,即global、defaults、listen
##global為全局配置,defaults為預設配置,listen為應用元件配置
           
global
        log 127.0.0.1   local0  //配置日志記錄,local0為日志裝置,預設存放到系統日志
        log 127.0.0.1   local1 notice //notice為日志級别
        #log loghost    local0 info
        maxconn 4096       //最大連接配接數
        chroot /usr/share/haproxy
        uid 99  //使用者uid
        gid 99  //使用者gid
        daemon
        #debug
        #quiet

defaults
        log     global   //定義日志為global配置中的日志定義
        mode    http     //模式為http
        option  httplog  //采用http日志格式記錄日志
        option  dontlognull 
        retries 3    //檢查節點伺服器失敗次數,連續達到三次失敗,則節點不可用
        redispatch
        maxconn 2000    //最大連接配接數
        contimeout      5000    //連接配接逾時時間
        clitimeout      50000    //用戶端逾時時間
        srvtimeout      50000    //伺服器逾時時間

listen  appli1-rewrite 0.0.0.0:10001  //定義一個appli1-rewrite的應用
        cookie  SERVERID rewrite
        balance roundrobin //負載均衡算法使用輪詢算法
        server  app1_1 192.168.34.23:8080 cookie app1inst1 check inter 2000 rise 2 fall 5
        server  app1_2 192.168.34.32:8080 cookie app1inst2 check inter 2000 rise 2 fall 5
        server  app1_3 192.168.34.27:8080 cookie app1inst3 check inter 2000 rise 2 fall 5
        server  app1_4 192.168.34.42:8080 cookie app1inst4 check inter 2000 rise 2 fall 5

listen  appli2-insert 0.0.0.0:10002
        option  httpchk  //檢查伺服器的檔案
        balance roundrobin
        cookie  SERVERID insert indirect nocache
        server  inst1 192.168.114.56:80 cookie server01 check inter 2000 fall 3
        server  inst2 192.168.114.56:81 cookie server02 check inter 2000 fall 3
        capture cookie vgnvisitor= len 32

        option  httpclose               # disable keep-alive
        rspidel ^Set-cookie:\ IP=       # do not let this cookie tell our internal IP address

listen  appli3-relais 0.0.0.0:10003
        dispatch 192.168.135.17:80
           
注:日志的級别,0(EMERG,緊急),1(ALERT,警告),2(CRIT,嚴重),3(ERR,錯誤),4(WARNING,提醒),5(NOTICE,注意),6(INFO,資訊),7(DEBUG,調試)

三.搭建Nginx和Haproxy群集架構

  • 網絡拓補圖
Linux系統架構-----Haproxy與Nginx群集
  • 實驗環境
類型 IP位址 系統 軟體包
Haproxy排程器 192.168.43.101 centos7 haproxy-1.5.19.tar.gz
Nginx伺服器1 192.168.43.102 centos7 nginx-1.12.2.tar.gz
Nginx伺服器2 192.168.43.103 centos7 nginx-1.12.2.tar.gz
cilent 192.168.43.105 cents7
注:以上軟體包可至官網下載下傳
  • 配置Nginx伺服器1
Nginx web server 1
1.下載下傳相關軟體包
yum install -y pcre-devel zlib-devel gcc gcc-c++ make
2.建立nginx的賬戶
useradd -M -s /sbin/nologin nginx
3.解壓軟體包
tar zxvf nginx-1.12.2.tar.gz -C /opt
4.配置環境,編譯且安裝
cd /opt/nginx-1.12.0/

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx

make && make install

5.設定首頁面
[[email protected] nginx-1.12.2]# cd /usr/local/nginx/html
[[email protected] html]# ls
50x.html  index.html
[[email protected] html]# rz

[[email protected] html]# ls
1.jpg  50x.html  index.html
[[email protected] html]# vim index.html 

<img height=200px src="1.jpg"/>

6.将執行腳本建立軟連結
[[email protected] html]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
7.驗證文法錯誤
[[email protected] html]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
8.開啟nginx服務,關閉防火牆
[[email protected] html]# nginx 
[[email protected] html]# systemctl stop firewalld
[[email protected] html]# setenforce 0
           
  • 驗證Nginx伺服器1的配置
Linux系統架構-----Haproxy與Nginx群集
  • 配置Nginx伺服器2
Nginx web server 2
1.下載下傳相關軟體包
yum install -y pcre-devel zlib-devel gcc gcc-c++ make
2.建立nginx的賬戶
useradd -M -s /sbin/nologin nginx
3.解壓軟體包
tar zxvf nginx-1.12.2.tar.gz -C /opt
4.配置環境,編譯且安裝
cd /opt/nginx-1.12.0/

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx

make && make install

5.設定首頁面
[[email protected] nginx-1.12.2]# cd /usr/local/nginx/html
[[email protected] html]# ls
50x.html  index.html
[[email protected] html]# rz

[[email protected] html]# ls
1.jpg  50x.html  index.html
[[email protected] html]# vim index.html 

<img height=200px src="1.jpg"/>

6.将執行腳本建立軟連結
[[email protected] html]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
7.驗證文法錯誤
[[email protected] html]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
8.開啟nginx服務,關閉防火牆
[[email protected] html]# nginx 
[[email protected] html]# systemctl stop firewalld
[[email protected] html]# setenforce 0
           
  • 驗證Nginx伺服器2的配置
Linux系統架構-----Haproxy與Nginx群集
  • 配置haproxy排程器
1.下載下傳軟體包
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
2.解壓haproxy軟體包
tar zxvf haproxy-1.5.19.tar.gz
3.編譯安裝haproxy
cd haproxy-1.5.19/

make TARGET=linux26        //64位系統
make install
4.建立配置檔案的目錄,且複制模闆
[[email protected] ~]# mkdir /etc/haproxy
[[email protected] ~]# cd haproxy-1.5.19
[[email protected] haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/

5.編輯配置檔案
vim /etc/haproxy/haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1

global
        log /dev/log    local0 info   //開啟日志記錄功能
        log /dev/log    local0 notice
        #log loghost    local0 info
        maxconn 4096
#       chroot /usr/share/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  //監聽任意網段的80端口
        option httpchk GET /index.html   
        balance roundrobin
##兩個節點伺服器,2000毫秒進行健康檢查,如果三次沒有回應則認為節點故障   
        server inst1 192.168.43.102:80 check inter 2000 fall 3
        server inst1 192.168.43.103:80 check inter 2000 fall 3

6.配置服務控制方式
[[email protected] ~]# cp /root/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
[[email protected] ~]# chmod +x /etc/init.d/haproxy
[[email protected] ~]# chkconfig --add /etc/init.d/haproxy 
[[email protected] ~]# ln -s /usr/local/sbin/haproxy /usr/sbin

7.配置日志記錄,添加腳本
[[email protected] haproxy]# touch /etc/rsyslog.d/haproxy.conf
[[email protected] haproxy]# cd /etc/rsyslog.d/
[[email protected] rsyslog.d]# ls
haproxy.conf  listen.conf
[[email protected] rsyslog.d]# vim 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
&~
8.關閉安全性功能,開啟服務
systemctl stop firewalld
setenforce 0
service haproxy start
systemctl restart rsyslog.service    //重新開機系統日志

           
  • 驗證haproxy配置,排程與日志記錄是否成功
Linux系統架構-----Haproxy與Nginx群集
Linux系統架構-----Haproxy與Nginx群集
Linux系統架構-----Haproxy與Nginx群集
注:在使用客戶機通路時,可能不會調轉到另外一台伺服器,可以選擇不同IP位址的客戶機通路

繼續閱讀