Haproxy結合Nginx實現Web負載平衡群集

來源:互聯網
上載者:User

標籤:server   strong   table   建立   檢查   安裝   改進   systemctl   ash   

簡介

Haproxy是一個使用C語言編寫的自由及開放原始碼軟體,其提供高可用性、負載平衡,以及基於TCP和HTTP的應用程式代理程式。Haproxy特別適用於那些負載特大的web網站,這些網站通常又需要會話保持或七層處理。Haproxy運行在當前的硬體上,完全可以支援數以萬計的並發串連。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web伺服器不被暴露到網路上。

Haproxy調度演算法原理一、RR(Round Robin)。輪詢調度

理解舉例:
有三個節點A、B、C,第一個使用者訪問會被指派到節點A,第二個使用者訪問會被指派到節點B,第三個使用者訪問會被指派到節點C,第四個使用者訪問繼續指派到節點A,輪詢分配訪問請求實現負載平衡效果。此演算法還有一種加權輪詢即根據每個節點的權重輪詢分配訪問請求

二、LC(Least Connections)。LC演算法即最小串連數演算法,根據後端的節點串連數大小動態分配前端請求

理解舉例:
有三個節點A、B、C,各節點的串連數分別為A:4、B:5、C:6,此時如果有第一個使用者串連請求,會被指派到A上,串連數變為A:5、B:5、C:6;第二個使用者請求會繼續分到A上,串連數變為A:6、B:5、C:6;再有新的請求會分配給B,每次將新的請求指派給串連數最小的用戶端。由於實際情況下A、B、C的串連數會動態釋放很難會出現一樣串連數的情況,因此此演算法相比較rr演算法有很大改進,是目前用到比較多的一種演算法

三、SH(Source Hashing)。SH即基於來源訪問調度演算法,此演算法用於一些有Session會話記錄在伺服器端的情境,可以基於來源的IP、 Cookie等做叢集調度

理解舉例:
使用基於源P的叢集調度演算法,有個節點A、B、C,第一個使用者第一次訪問被指派到了A,第二個使用者第一次訪問被指派到了B,當第一個使用者第二次訪問時會被繼續指派到A,第二個使用者第二次訪問時依舊會被指派到B,只要負載平衡調度器不重啟,第一個使用者訪問都會被指派到A,第二個使用者訪問都會被指派到B,實現叢集的調度。此調度演算法好處是實現會話保持,但某些IP訪問量非常大時會引起負載不均衡,部分節點訪問量超大,影響業務使用

實驗拓撲

實驗環境
主機 作業系統 IP地址 主要軟體
Haproxy伺服器 CentOS 7.4 x86_64 192.168.100.71 haproxy-1.4.24.tar.gz
Nginx伺服器01 CentOS 7.4 x86_64 192.168.100.72 nginx-1.12.0.tar.gz
Nginx伺服器02 CentOS 7.4 x86_64 192.168.100.73 nginx-1.12.0.tar.gz
Client端 CentOS 7.4 x86_64 192.168.100.74
搭建步驟一、Ngixn伺服器01配置1、安裝相關依賴包

[[email protected]_2 ~]# yum -y install gcc gcc-c++
[[email protected]_2 ~]# yum -y install pcre-devel zlib-devel

2、建立Nginx進程使用者

[[email protected]_2 ~]# useradd -M -s /sbin/nologin nginx

3、源碼安裝Nginx

[[email protected]_2 ~]# tar xvfz nginx-1.12.0.tar.gz
[[email protected]_2 ~]# cd nginx-1.12.0/
[[email protected]_2 nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
[[email protected]_2 nginx-1.12.0]# make && make install

4、最佳化路徑

[[email protected]_2 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/sbin/

5、編輯網站首頁

[[email protected]_2 ~]# cd /usr/local/nginx/html/
[[email protected]_2 html]# echo "Welcome to Nginx AAAAAAAAAA" > index.html

6、啟動Nginx

[[email protected]_2 ~]# nginx
[[email protected]_2 ~]# netstat -anpt | grep ":80"

二、Ngixn伺服器02配置配置方法與Ngixn伺服器01相同的地方略……1、編輯網站首頁

[[email protected]_3 ~]# cd /usr/local/nginx/html/
[[email protected]_3 html]# echo "Welcome to Nginx BBBBBBBBBB" > index.html

三、測試頁面

四、Haproxy伺服器配置1、安裝相關依賴包

[[email protected]_1 ~]# yum -y install gcc gcc-c++
[[email protected]_1 ~]# yum -y install pcre-devel zlib-devel

2、安裝Haproxy

[[email protected]_1 ~]# tar zxvf haproxy-1.4.24.tar.gz
[[email protected]_1 ~]# cd haproxy-1.4.24/
[[email protected]_1 haproxy-1.4.24]# make TARGET=linux26 #TARGET代表64位的作業系統
[[email protected]_1 haproxy-1.4.24]# make install

3、建立Haproxy設定檔

[[email protected]_1 ~]# mkdir /etc/haproxy
[[email protected]_1 ~]# cd haproxy-1.4.24/examples/
[[email protected]_1 examples]# cp haproxy.cfg /etc/haproxy/

4、設定檔詳解

[[email protected]_1 ~]# vim /etc/haproxy/haproxy.cfg

全域配置

global
log 127.0.0.1 local0 #配置日誌記錄,local0為日誌裝置,預設存放到系統日誌
log 127.0.0.1 local1 notice #notice為記錄層級,通常有24個層級
maxconn 4096 #最大串連數
chroot /usr/share/haproxy
uid 99 #使用者uid
gid 99 #使用者gid
daemon

預設配置

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

應用組件配置

listen webcluster 0.0.0.0:80 #定義webcluster 應用
option httpchk GET /index.html #檢查伺服器的index.html
option persist #強制將請求發送到已經down掉的伺服器
balance roundrobin #負載平衡調度演算法使用輪詢演算法
server inst1 192.168.100.72:80 check inter 2000 fall 3 #定義線上節點
server inst2 192.168.100.73:80 check inter 2000 fall 3

5、最佳化路徑,並啟動Haproxy服務

[[email protected]_1 ~]# cp haproxy-1.4.24/examples/haproxy.init /etc/init.d/haproxy
[[email protected]_1 ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[[email protected]_1 ~]# chmod +x /etc/init.d/haproxy
[[email protected]_1 ~]# mkdir /usr/share/haproxy
[[email protected]_1 ~]# service haproxy start

五、測試Haproxy叢集

六、配置Haproxy日誌管理1、編輯haproxy設定檔

[[email protected]_1 ~]# vim /etc/haproxy/haproxy.cfg

添加以下參數:

log /dev/log local0 info
log /dev/log local0 notice

[[email protected]_1 ~]# systemctl restart haproxy.service #重啟haproxy服務

2、修改rsyslog配置

[[email protected]_1 ~]# touch /etc/rsyslog.d/haproxy.conf #建立獨立設定檔
[[email protected]_1 ~]# vim /etc/rsyslog.d/haproxy.conf

添加以下參數:

if ($programname == ‘haproxy‘ and $syslogseverity-text == ‘info‘)
then -/var/log/haproxy/haproxy-info.log #info日誌記錄路徑
&~
if ($programname == ‘haproxy‘ and $syslogseverity-text == ‘notice‘)
then -/var/log/haproxy/haproxy-notice.log #notice日誌記錄路徑
&~ #"&~"當日誌寫入到記錄檔中後,rsyslog停止處理此資訊

3、儲存設定檔並啟動rsyslog

[[email protected]_1 ~]# systemctl start rsyslog.service

4、查看日誌

[[email protected] ~]# cd /var/log/haproxy/
[[email protected] haproxy]# ls

Haproxy結合Nginx實現Web負載平衡群集

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.