目錄
- 一、常見的Web集群調度器
- 二、Haproxy應用分析
- 三、Haproxy調度演算法原理
- 四、Haproxy搭建 Web 群集
- 1、編譯安裝Nginx服務器
- 2、部署haproxy服務器
- 3、測驗 Web集群
- 五、日志定義
- 六、Haproxy引數優化
一、常見的Web集群調度器
- 目前常見的Web集群調度器分為軟體和硬體
- 軟體通常使用開源的LVS、Haproxy、Nginx
- LVS性能最好,但是搭建相對復雜;
- Nginx的upstream模塊支持集群功能,但是對集群節點健康檢查功能不強,高并發沒有Haproxy好
- 硬體一般使用的比較多的是F5,也有很多人使用梭子魚、綠盟等國內產品
二、Haproxy應用分析
- LVS在企業應用中抗負載能力很強,但存在不足
- LVS不支持正則處理,不能實作動靜分離
- 對于大型網站,LVS的實施配置復雜,維護成功相對較高
- Haproxy是一款可提供高可用性、負載均衡、及基于TCP和HTTP應用的代理的軟體
- 適用于負載大的Web站點
- 運行在硬體上可支持數萬計的并發連接的連接請求
三、Haproxy調度演算法原理
Haproxy支持多種調度演算法,最常用的有三種
- RR (Round Robin)
- RR演算法是最簡單常用的一種演算法,即輪詢調度
- LC(Least Connections)
- 最小連接數演算法,根據后端的節點連接數大小動態分配前端請求,
- SH(Source Hashing)
- 基于來源訪問調度演算法,用于一些有Session會話記錄在服務器端的場景,可以基于來源的IP、Cookie等做集群調度
四、Haproxy搭建 Web 群集
實驗所需安裝包
下載鏈接:https://pan.baidu.com/s/1rSodXNPPGQAdiPVKObGOvw
提取碼:ghbd
haproxy-1.5.19.tar.gz
nginx-1.12.0.tar.gz
環境配置
| 主機 | 作業系統 | IP地址 | 所需軟體/安裝包/工具 |
|---|---|---|---|
| Haproxy-Server | CentOS7 | 192.168.163.10 | haproxy-1.5.19.tar.gz |
| Nginx-Server1 | CentOS7 | 192.168.163.11 | nginx-1.12.0.tar.gz |
| Nginx-Server2 | CentOS7 | 192.168.163.12 | nginx-1.12.0.tar.gz |
| 客戶端 | Win10 | 192.168.163.13 |
1、編譯安裝Nginx服務器
具體介紹請看:web服務之Nginx網站服務
Nginx-Server1:192.168.163.11
Nginx-Server2:192.168.163.12
安裝Nginx服務可以直接使用腳本安裝
#!/bin/bash
#編譯安裝nginx服務,使用本腳本前請將相應的安裝包放入/opt目錄下
#安裝所需開發包和編譯環境、編譯器
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
#創建程式用戶,便于準確控制訪問
useradd -M -s /sbin/nologin nginx
#解壓安裝包
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
#指定安裝路徑、指定用戶名和組名
cd nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
#編譯及安裝
make && make install
#軟鏈接便于系統識別nginx操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#添加nginx系統服務
echo '[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target' > /lib/systemd/system/nginx.service
#賦權及開啟服務、開啟開機自啟
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

Nginx-Server1:192.168.163.11
echo "this is 192.168.163.11 web" > /usr/local/nginx/html/test.html

Nginx-Server2:192.168.163.12
echo "this is 192.168.163.12 web" > /usr/local/nginx/html/test.html

2、部署haproxy服務器
Haproxy-Server:192.168.163.10
(1)關閉防火墻,將安裝Haproxy所需軟體包傳到/opt目錄下
systemctl stop firewalld
setenforce 0
cd /opt
haproxy-1.5.19.tar.gz

2、編譯安裝 Haproxy
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
tar zxvf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19/
make TARGET=linux2628 ARCH=x86_64
make install
引數說明
#使用uname -r查看內核,如:2.6.18-371.el5,此時該引數用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628
TARGET=linux26 #內核版本
ARCH=x86_64 #系統位數,64位系統

3、Haproxy服務器配置
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
cd /etc/haproxy/
vim haproxy.cfg
global
#4~5行–修改,配置日志記錄,local0為日志設備,默認存放到系統日志3
log /dev/log local0 info
log /dev/log local0 notice
#log loghost local0 info
maxconn 4096 #最大連接數,需考慮ulimit-n限制
#8行–注釋,chroot運行路徑,為該服務自設定的根目錄,一般需將此行注釋掉
#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 #檢查節點服務器失敗次數,連續達到三次失敗,則認為節點不可用
redispatch #當服務器負載很高時,自動結束當前佇列處理比較久的連接
maxconn 2000 #最大連接數
contimeout 5000 #連接超時時間
clitimeout 50000 #客戶端超時時間
srvtimeout 50000 #服務器超時時間
#洗掉下面所有listen項–,添加
listen webcluster 0.0.0.0:80
option httpchk GET /test.html #檢查服務器的test.html檔案
balance roundrobin #負載均衡調度演算法使用輪詢演算法roundrobin
server inst1 192.168.163.11:80 check inter 2000 fall 3 #定義在線節點
server inst2 192.168.163.12:80 check inter 2000 fall 3
#--引數說明----------------
balance roundrobin #負載均衡調度演算法
#輪詢演算法: roundrobin;最小連接數演算法: leastconn;來源訪問調度演算法: source,類似于nginx的ip_hash
check inter 2000 #表示haproxy服務器和節點之間的一個心跳頻率
fall 3 #表示連續三次檢測不到心跳頻率則認為該節點失效
若節點配置后帶有""backup"表示該節點只是個備份節點,只有主節點失效該節點才會上,不攜帶"backup",表示為主節點,和其它主節點共同提供服務,

添加Haproxy系統服務
(如果你先做Haproxy服務器,這步需要等到Nginx服務器搭建好再去做,不然會啟動失敗)
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
cd /etc/init.d/
ll
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
service haproxy start

3、測驗 Web集群
在客戶端使用瀏覽器打開 http://192.168.163.10/test.html ,不斷重繪瀏覽器測驗負載均衡效果


五、日志定義
默認haproxy的日志是輸出到系統的syslog中,查看起來不是非常方便,為了更好的管理haproxy的日志,我們在生產環境中一般單獨定義出來,需要將haproxy的info及notice日志分別記錄到不同的日志檔案中,
vim /etc/haproxy/haproxy.cfg
global
log /dev/log local0 info
log /dev/log local0 notice
service haproxy restart

需要修改rsyslog配置,為了便于管理,將haproxy相關的配置獨立定義到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog啟動時會自動加載此目錄下的所有組態檔,
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
&~
說明:
這部分配置是將haproxy的info日志記錄到/var/log/haproxy/haproxy-info.log下,將notice日志記錄到/var/log/haproxy/haproxy-notice.log下,“&~”表示當日志寫入到日志檔案后,rsyslog停止處理這個資訊,
systemctl restart rsyslog.service
tail -f /var/log/haproxy/haproxy-info.log #查看haproxy的訪問請求日志資訊

- 這時候是沒有日志檔案的,在客戶端訪問過后,再回到服務器查看日志

六、Haproxy引數優化
隨著企業網站負載增加,haproxy引數優化相當重要
- maxconn:最大連接數,根據應用實際情況進行調整,推薦使用10 240
- daemon:守護行程模式,Haproxy可以使用非守護行程模式啟動,建議使用守護行程模式啟動
- nbproc:負載均衡的并發行程數,建議與當前服務器CPU核數相等或為其2倍
- retries:重試次數,主要用于對集群節點的檢查,如果節點多,且并發量大,設定為2次或3次
- option http-server-close:主動關閉http請求選項,建議在生產環境中使用此選項
- timeout http-keep-alive:長連接超時時間,設定長連接超時時間,可以設定為10s
- timeout http-request: http請求超時時間,建議將此時間設定為5~10s,增加http連接釋放速度
- timeout client:客戶端超時時間,如果訪問量過大,節點回應慢,可以將此時間設定短一些,建議設定為1min左右就可以了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/254489.html
標籤:其他
