Haproxy搭建Web羣集方法

常見的Web集 羣調度器

  • 目前常見的Web集羣調度器分爲軟件和硬件,軟件通常使用開源的LVS、Haproxy、Nginx,硬件一般使用比較多的F5,也有很多的人使用國內的一些產品,比如梭子、綠盟等
    在這裏插入圖片描述

Haproxy應用分析

LVS在企業應用中抗負載能力很強,但存在不足

  • LVS不支持正則處理,不能實現動靜分離
  • 對於大型網站,LVS實施配置複雜,維護成本相對較高

Haproxy是一款可提供高可用性、負載均衡、及基於TCP和HTTP應用的代理的軟件

  • 特別適用於負載特別大的Web站點
  • 運行在當前的硬件上可支持數以萬計的併發連接請求

Haproxy調度算法原理

Haproxy支持多種調度算法,最常見的有三種

  • RR(Round Robin)
    RR算法最簡單最常見的一種算法,即輪詢調度
  • 理解舉例
    (1)有三個節點A、B、C,第一個用戶訪問會被指派到節點A,第二個用戶訪問會被指派到節點B,第三個用戶訪問會被指派到節點
    (2)第四個用戶訪問繼續指派到節點A,輪詢分配訪問請求實現負載均衡效果
  • LC (Least Connections)
    LC算法即最小連接數算法,根據後端的節點連接數大小動態分配前端請求
  • 理解舉例
    (1)有三個節點A、B、C,各節點的連接數分別爲A:4、B:5、 C:6,此時如果有第一個用戶連接請求,會被指派到A上,連接數變爲A:5、B:5、 C:6
    (2)第二個用戶請求會繼續分配到A上,連接數變爲A:6、B:5、 C:6,再有新的請求會分配給B,每次將新的請求指派給連接數最小的客戶端
    (3)由於實際情況下A、B、C的連接數會動態釋放,很難會出現一樣連接數的情況,因此此算法相比較rr算法有很大改進,是目前用到比較多的一種算法
  • SH (Source Hashing)
    SH即基於來源訪問調度算法,此算法用於一 些有Session會話記錄在服務器端的場景,可以基於來源的IP、Cookie等做集羣調度
  • 理解舉例
    (1)有三個節點A、B、C,第一個用戶第一次訪問被指派到了A,第二個用戶第一次訪問被指派到了B
    (2)當第一個用戶第二次訪問時會被繼續指派到A,第二個用戶第二次訪問時依舊會被指派到B,只要負載均衡調度器不重啓,第一個用戶訪問都會被指派到A,第二個用戶訪問都會被指派到B,實現集羣的調度
    (3)此調度算法好處是實現會話保持,但某些IP訪問量非常大時會引起負載不均衡部分節點訪問量超大,影響業務使用

實驗案例

1、實驗環境

  • 實驗拓撲圖
    在這裏插入圖片描述
  • IP地址分配
主機名 IP地址
客戶端 192.168.150.128
haproxy 192.168.150.147
nginx1 192.168.150.148
nginx2 192.168.150.158

2、在兩臺web網站上安裝nginx服務器
(1)安裝基礎軟件包

[root@nginx1 ~]# yum install gcc gcc-c++ pcre-devel zlib-devel make -y

(2)創建系統用戶賬號nginx

[root@nginx1 ~]# useradd -M -s /sbin/nologin nginx

(3)編譯安裝nginx服務

[root@nginx1 LNMP-C7]# tar zxvf nginx-1.12.2.tar.gz -C /opt
[root@nginx1 LNMP-C7]# cd /opt/nginx-1.12.2/
[root@nginx1 nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx

[root@nginx1 nginx-1.12.2]# make && make install

(4)編輯網頁內容,注意測試網頁的內容不能一樣,以便進行測試

[root@nginx2 nginx-1.12.2]# cd /usr/local/nginx/html/
[root@nginx2 html]# vim test.html
this is aaa test web

(5)創建軟連接,啓動服務,關閉防火牆功能

[root@nginx2 html]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@nginx2 html]# nginx 
[root@nginx2 html]# systemctl stop firewalld.service 
[root@nginx2 html]# setenforce 0

3、安裝haproxy服務器
(1)安裝基礎軟件包

[root@haproxy ~]# yum install gcc gcc-c++ pcre-devel bzip2-devel make -y

(2)編譯安裝haproxy服務

[root@haproxy Y2C7]# tar zxvf haproxy-1.5.19.tar.gz -C /opt
[root@haproxy Y2C7]# cd /opt/haproxy-1.5.19
[root@haproxy haproxy-1.5.19]# make TARGET=linux26
[root@haproxy haproxy-1.5.19]# make install

(3)建立haproxy的配置文件

  • 創建配置文件目錄 /etc/haproxy
[root@haproxy haproxy-1.5.19]# mkdir /etc/haproxy
  • 將源碼包提供的配置文件樣例haproxy.cfg複製到配置文件目錄中
[root@haproxy haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/
  • 修改配置文件
[root@haproxy haproxy-1.5.19]# cd /etc/haproxy/
[root@haproxy haproxy]# vim haproxy.cfg 
#註釋chroot /usr/local/haproxy
#註釋redispach
#刪除原有的listen,重新添加
listen webcluster 0.0.0.0:80
option httpchk GET /test.html
server inst1 192.168.7.148:80 check inter 2000 fall 3
server inst1 192.168.7.158:80 check inter 2000 fall 3

(4)將源碼包提供的啓動腳本複製到/etc/init.d目錄下,並添加到server服務中,啓動haproxy服務

[root@haproxy haproxy]# cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
[root@haproxy haproxy]# chmod +x /etc/init.d/haproxy 
[root@haproxy haproxy]# chkconfig --add /etc/init.d/haproxy 
[root@haproxy haproxy]# ln -s /usr/local/sbin/haproxy /usr/sbin/
[root@haproxy haproxy]# service haproxy start

(5)網頁測試,使用客戶端訪問網址:http://192.168.150.147/test.html
在這裏插入圖片描述
在這裏插入圖片描述
4、日誌定義
(1)修改haproxy配置文件中關於日誌配置的選項

[root@haproxy sbin]# vim /etc/haproxy/haproxy.cfg 
log /dev/log	local0 info
log /dev/log	local1 notice
#重啓haproxy服務
[root@haproxy sbin]# service haproxy restart 
Restarting haproxy (via systemctl):                        [  確定  ]

(2)修改rsyslog配置將haproxy相關的配置獨立定義到haproxy.conf,並放到/etc/rsyslog.d/下,重啓rsyslog服務

[root@haproxy sbin]# 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@haproxy sbin]# systemctl restart rsyslog.service 

(3)重新訪問網頁即可查看到日誌文件產出
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章