使用Haproxy與nginx配合搭建web群集
使用Haproxy搭建web群
1,常見的web叢集排程器
- 目前常見的web叢集排程器分為軟體和硬體
- 軟體通常使用開源lvs,haproxy,nginx
- 硬體一般使用比較多的是f5,也有很多人使用國內的一些產品,如梭子魚,綠盟等
三款比較:
- lvs在企業應用中抗負載能力很強,但存在不足
- LVS不支援正則處理,不能實現動靜分離
- 對於大型網站,LVS的實施配置複雜,維護成本相對較高
- Haproxy是一款可提供高可用性,負載均衡,及基於TCP和HTTP應用的代理軟體
- 適用於負載大的web站點
- 執行在硬體上可支援數以萬計的併發連線的連線請求
2,Haproxy排程演算法原理
(1) Haproxy支援多種排程演算法,最常用的有三種
-
第一種:RR
+ RR演算法是最簡單最常用的一種演算法,即輪詢排程 -
理解舉例
- 有三個節點a,b,c
- 第一個使用者訪問會被指派到節點A
- 第二個使用者訪問會被指派到節點B
- 第三個使用者訪問會被指派到節點C
- 第四個使用者訪問繼續指派到節點A,輪詢分配訪問請求實現負載均衡效果
-
第二種: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
- 基於來源訪問排程演算法,用於一些有Session會話記錄在伺服器端的場景, 可以基於來源的IP、Cookie等做叢集排程
-
理解舉例
- 有三個節點A、B、C,第一個使用者第一次訪問被指派到了A,第二個使用者第一-次 .訪問被指派到了B
- 當第一個使用者第二次訪問時會被繼續指派到A,第二個使用者第二_次訪問時依舊會 被指派到B,只要負載均衡排程器不重啟,第- -個使用者訪問都會被指派到A,第二個使用者訪問都會被指派到B,實現叢集的排程
- 此排程演算法好處是實現會話保持,但某些IP訪問量非常大時會引|起負載不均衡,部分節點訪問量超大,影響業務使用
3,案例:使用haproxy搭建web群集
(1)Nginx的安裝與啟動
- 在兩臺網站伺服器上安裝nginx,並啟動服務
- 使用原始碼編譯的方式進行安裝
- 關閉firewalld防火牆
- 安裝基礎軟體包
- 增加系統使用者賬號nginx
- 編譯安裝nginx並啟動
- 在兩臺nginx上配置測試網站,注意測試網頁的內容應該不同,以便進行測試
(2)haproxy安裝與啟動
- 在負載均衡器上安裝haproxy
- 安裝步驟
- 安裝基礎軟體包
- 編譯安裝haproxy
- 要注意作業系統版本,是32位系統還是64位
- 建立haproxy的配置檔案
- 建立配置檔案目錄 /etc/haproxy
- 將原始碼包提供的配置檔案樣例haproxy.cfg複製到配置檔案目錄中
(3)haproxy配置檔案詳解
3.1 haproxy配置檔案通常分為三個部分
- global:為全域性配置
- defaults:為預設配置
- listen:為應用元件配置
- global配置引數
引數 | 說明 |
---|---|
log 127.0.0.1 local0 | 配置日誌記錄,local0為日誌裝置,預設存放到系統日誌 |
log 127.0.0.1 local notice | notice為日誌級別,通常有24各級別 |
maxconn 4096 | 最大連線數 |
uid 99 | 使用者 uid |
gid 99 | 使用者 gid |
3.2 defaults配置項配置預設引數,一般會被應用元件繼承
3.3 如果應用組建中沒有特別宣告,將按預設配置引數設定
- log global:定義日誌為global配置彙總的日誌定義
- mode http: 模式為http
- option httplog:採用http日誌格式記錄日誌
- retries 3:檢查節點伺服器失敗連續達到三次則認為節點不可用
- maxconn 2000:最大連線數
- contimeout 5000:連線超時時間
- clitimeout 50000:客戶端超時時間
- clitimeout 50000:客戶端超時時間
3.4 listen配置專案一般為配置應用模組引數
- listen appli4-backup 0.0.0.0:10004:定義一個appli4-backup的應用
- option httpchk /index.html:檢查伺服器的index.html檔案
- option persist:強制將請求傳送到已經down掉的伺服器
- balance roundrobin:負載均衡排程演算法使用輪詢演算法
- server inst1 192.168.114.56:80 check inter 2000 fall 3: 定義在節點
- server inst1 192.168.114.56:80 check inter 2000 fall 3 backup:定義線上節點
- server inst2192.168.114.56:81 check inter 2000 fall 3backup:定義備份節點
(4)配置與測試
-
根據實際的案例修改相應的引數
- …
- listen webcluster 0.0.0.0:80
- option httpchk GET/index.htmi
- option httpchk GET/index.htmi
- server inst1 192.168.10.61:80 check inter 2000 fall 3
- server inst2192.168.10.62:80 check inter 2000 fall 3
-
建立自啟動指令碼,並啟動Haproxy服務
-
測試haproxy叢集
-
測試高效能
- 可在兩個不同的瀏覽器中分別訪問兩個測試網站,正常情況下應該出現兩個網站的測試頁面
-
高可用性
- 將其中一臺nginx伺服器停用,在客戶端瀏覽器中訪問haproxy,正常情況下應出現另外一臺nginx伺服器的網站測試頁面
(5)haproxy日誌管理
- 預設是輸出到系統中的syslog中,生產環境中一般單獨定義
- 定義的方法步驟
- 修改Haproxy配置檔案中關於日誌配置的選項,加入配置
- log ldev/log local0 info
- log ldevlog local0 notice
- 修改Haproxy配置檔案中關於日誌配置的選項,加入配置
- 修改rsyslog配置,將Haproxy相關的配置獨立定義到haproxy.conf,並放到/etc/rsyslog.d/下
- 儲存配置檔案並重啟rsyslog服務,完成rsyslog配置
- 訪問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左右就可以了
-
-
4. Haproxy案例實施搭建過程
主機要求
- 用1臺客戶端,三臺虛擬伺服器搭建一套web叢集
- 虛擬機器安裝centos 7.4 64位系統
主機 | 作業系統 | IP地址 | 主要軟體 |
---|---|---|---|
haproxy伺服器 | centos7.4 x86_64 | 20.0.0.30 | haproxy |
nginx伺服器1 | centos7.3 x86_64 | 20.0.0.20 | nginx |
nginx伺服器2 | centos7.4 x86_64 | 20.0.0.10 | nginx |
客戶端 | centos7.4 x86_64 | 20.0.0.50 | 瀏覽器 |
- nginx伺服器1
yum -y install gcc gcc-c++ pcre-devel zlib-devel
useradd -M -s /sbin/nologin nginx //新增系統賬號
tar zxf nginx-1.12.2.tar.gz
cd nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ //優化命令路徑
nginx //啟動服務
nginx -t //檢查配置檔案和語法狀態
echo "web1" > /usr/local/nginx/html/index.html
-
nginx伺服器2部署與1部署基本相同,不同點在於在設定測試網頁內容的時候應該設定為不同
Haproxy伺服器
yum -y install pcre-devel bzip2-devel make
tar zxf haproxy-1.4.24.tar.gz
cd haproxy-1.4.24/
make TARGET=linux26
make install
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
vi /etc/haproxy/haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log /dev/log local0 info #配置日誌記錄,local0為日誌裝置,預設存放到系統日誌
log /dev/log local0 notice #日誌級別為 info、notice
#log loghost local0 info
maxconn 4096 #最大連線數
#chroot /usr/share/haproxy #註釋掉,不讓伺服器從自己的目錄獲取,而從節點伺服器
uid 99
gid 99
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 webcluster 0.0.0.0:80 #當有訪問80埠的請求則進行
# option httpchk GET /index.html #獲取web伺服器池中伺服器的index.html檔案
balance roundrobin #定義採用輪詢演算法
server web1 20.0.0.10:80 check inter 2000 fall 3 #定義線上節點伺服器
server web2 20.0.0.20:80 check inter 2000 fall 3
注意: 配置檔案主要改的是
註釋掉下面兩個
#chroot /usr/share/haproxy #註釋掉,不讓伺服器從自己的目錄獲取,而從節點伺服器
和
#redispatch
並且刪除所有監聽listen
增加
listen webcluster 0.0.0.0:80
option httpchk GET /index.html
balance roundrobin
server web1 20.0.0.10:80 check inter 2000 fall 3
server web2 20.0.0.20:80 check inter 2000 fall 3
cp examples/haproxy.init /etc/init.d/haproxy
vi /etc/init.d/haproxy
# chkconfig: - 85 15 #改為35
chmod 755 /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
haproxy-1.4.24]# service haproxy start
systemctl enable haproxy
- 最後進行測試
在win10上與Linux下分別測排程伺服器出現兩個網頁內容,說明配置成功
相關文章
- 使用haproxy搭建web群集Web
- Haproxy搭建 Web 群集實現負載均衡Web負載
- 伺服器群集—Haproxy+keepalived群集伺服器
- RHEL 8 搭建 Nginx Web 服務NginxWeb
- 負載均衡之--Nginx、LVS、HAProxy負載Nginx
- mysql負載均衡搭建(haproxy)MySql負載
- 伺服器群集—Nginx+Tomcat+keepalived負載均衡、動靜分離群集伺服器NginxTomcat負載
- 在Linux中,lvs/nginx/haproxy 優缺點?LinuxNginx
- 使用 Nginx 搭建 Webdav 服務NginxWeb
- centos7 搭建 nginx web服務 反代理CentOSNginxWeb
- Nginx—tomcat負載均衡動靜分離群集NginxTomcat負載
- github搭建圖床配合typoraGithub圖床
- IntelliJ IDEA配置與搭建web專案入門使用IntelliJIdeaWeb
- Nginx、HAProxy、LVS三者的優缺點Nginx
- 使用nginx搭建creates.io映象Nginx
- RabbitMQ+haProxy+keepalived使用MQ
- CentOS 7.4 下搭建 Elasticsearch 6.3 搜尋群集CentOSElasticsearch
- 搭建高可用kubernetes叢集(keepalived+haproxy)
- MySQL主從配置及haproxy和keepalived搭建MySql
- 使用SpringBoot搭建Web專案Spring BootWeb
- Laravel 配合 jwt 使用LaravelJWT
- sqlmap使用,配合BurpsuiteSQLUI
- docker使用nginx搭建靜伺服器DockerNginx伺服器
- Nginx安裝與使用Nginx
- RHEL 7配置HAProxy實現Web負載均衡Web負載
- 基於 HAProxy + KeepAlived 搭建 RabbitMQ 高可用叢集MQ
- CentOS7系統搭建web環境 php&nginx&pgsqlCentOSWebPHPNginxSQL
- 使用docker搭建nginx掛載hexo部落格DockerNginxHexo
- 使用Nginx搭建流媒體伺服器Nginx伺服器
- 使用Nginx搭建公網代理伺服器Nginx伺服器
- with 和 whereHas 的配合使用
- Linux 安裝Nginx與使用LinuxNginx
- vue-cli 3.0腳手架與vux的配合使用VueUX
- docker上面部署nginx-waf 防火牆“modsecurity”,使用CRS規則,搭建WEB應用防火牆DockerNginx防火牆Web
- 搭建jenkins配合gitee實現自動部署JenkinsGitee
- 使用Ingress-Nginx來暴露ArgoCD Web-UINginxGoWebUI
- Nginx搭建反向代理負載均衡和web快取伺服器Nginx負載Web快取伺服器
- Nginx+Tomcat負載均衡,動靜分離群集部署解析NginxTomcat負載