溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用Haproxy搭建Web群集(理論結(jié)合實(shí)戰(zhàn),全程可跟做!

發(fā)布時(shí)間:2020-03-01 11:20:43 來源:網(wǎng)絡(luò) 閱讀:806 作者:JarryZ 欄目:建站服務(wù)器

常見的Web集群調(diào)度器:

目前常見的Web集群調(diào)度器分為軟件和硬件,軟件通常使用開源的LVS、Haproxy、 Nginx, 硬件一般使用比較多的是F5,也有很多人使用國內(nèi)的一些產(chǎn)品,如梭子魚、綠盟等

Haproxy應(yīng)用分析

LVS在企業(yè)應(yīng)用中抗負(fù)載能力很強(qiáng),但存在不足

1.LVS不支持正則處理,不能實(shí)現(xiàn)動靜分離
2.對于大型網(wǎng)站,LVS的實(shí)施配置復(fù)雜,維護(hù)成本相對較高

Haproxy是一款可提供高可用性、負(fù)載均衡、及基于TCP和HTTP應(yīng)用的代理的軟件

1.特別適用于負(fù)載特別大的Web站點(diǎn)
2.運(yùn)行在當(dāng)前的硬件.上可支持?jǐn)?shù)以萬計(jì)的并發(fā)連接連接請求

Haproxy調(diào)度算法原理

Haproxy支持多種調(diào)度算法,最常用的有3種:

1.RR (Round Robin):
RR算法是最簡單最常用的一-種算法,即輪詢調(diào)

2.理解舉例:
有三個(gè)節(jié)點(diǎn)A、B、C,第一個(gè)用戶訪問會被指派到節(jié)點(diǎn)A,第二個(gè)用戶訪問會被指派到節(jié)點(diǎn)B,第三個(gè)用戶訪問會被指派到節(jié)點(diǎn)第四個(gè)用戶訪問繼續(xù)指派到節(jié)點(diǎn)A,輪詢分配訪問請求實(shí)現(xiàn)負(fù)載均衡效果

Haproxy支持多種調(diào)度算法, 最常用的有三種:

1.SH (Source Hashing):

SH即基于來源訪問調(diào)度算法,此算法用于一些有Session會話記錄在服務(wù)器端的場景,可以基于來源的IP、Cookie等做集群調(diào)度

2.理解舉例

①有三個(gè)節(jié)點(diǎn)A、B、C,第一個(gè)用戶第一次訪問被指派到了A,第二個(gè)用戶第一次訪問被指派到了B
②當(dāng)?shù)谝粋€(gè)用戶第二次訪問時(shí)會被繼續(xù)指派到A,第二個(gè)用戶第二次訪問時(shí)依舊會被指派到B,只要負(fù)載均衡調(diào)度器不重啟,第一個(gè)用戶訪問都會被指派到A,第二個(gè)用戶訪問都會被指派到B,實(shí)現(xiàn)集群的調(diào)度
③此調(diào)度算法好處是實(shí)現(xiàn)會話保持,但某些IP訪問量非常大時(shí)會引起負(fù)載不均衡,部分節(jié)點(diǎn)訪問量超大,影響業(yè)務(wù)使用

Demo:

環(huán)境準(zhǔn)備:

Nginx1:192.168.100.201---->CentOS 7-2

Nginx2:192.168.100.202---->CentOS 7-3

調(diào)度服務(wù)器:192.168.100.210---->CentOS 7-4

客戶機(jī):192.168.100.58---->win 7-1

Nginx2:CentOS 7-3的操作

[root@localhost ~]# yum install pcre-devel zlib-devel gcc gcc-c++ make -y
//改網(wǎng)卡為僅主機(jī)模式
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
IPADDR=192.168.100.201
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
//修改完成后輸入:wq保存退出
[root@localhost ~]# service network restart 
Restarting network (via systemctl):                        [  確定  ]
[root@localhost ~]# mkdir /aaa
[root@localhost ~]# mount.cifs //192.168.10.189/rpm /aaa
Password for root@//192.168.10.189/rpm:  
[root@localhost ~]# cd /aaa
[root@localhost aaa]# ls
apr-1.6.2.tar.gz                  jdk
apr-util-1.6.0.tar.gz             john-1.8.0.tar.gz
awstats-7.6.tar.gz                lf.jpg
cronolog-1.6.2-14.el7.x86_64.rpm  mysql
Discuz_X3.4_SC_UTF8.zip           nginx-1.12.2.tar.gz
error.png                         php
extundelete-0.2.4.tar.bz2         TC
haproxy-1.5.19.tar.gz             tomcat
httpd-2.4.29.tar.bz2              tomcat.tmp
hzw.jpeg                          wh.jpg
[root@localhost aaa]# cd tomcat/
[root@localhost tomcat]# ls
apache-tomcat-7.0.54.tar.gz  jdk-8u91-linux-x64.tar.gz
apache-tomcat-8.5.16.tar.gz  nginx-1.12.0.tar.gz
jdk-7u65-linux-x64.gz        nginx-1.6.0.tar.gz
[root@localost tomcat]# tar zxvf nginx-1.12.0.tar.gz -C /opt/
[root@localhost tomcat]# cd /opt/
[root@localhost opt]# useradd -M -s /sbin/nologin nginx
[root@localhost opt]# cd nginx-1.12.0/
[root@localhost nginx-1.12.0]# ls
auto     CHANGES.ru  configure  html     man     src
CHANGES  conf        contrib    LICENSE  README
[root@localhost nginx-1.12.0]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx
[root@localhost nginx-1.12.0]# make && make install
[root@localhost nginx-1.12.0]# cd /usr/local/nginx/html/
[root@localhost html]# echo "this is accp web" > test.html
[root@localhost html]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost 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
[root@localhost html]# nginx
[root@localhost html]# netstat -ntap | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6408/nginx: master  
[root@localhost html]# systemctl stop firewalld.service 
[root@localhost html]# setenforce 0
在火狐瀏覽器中輸入:http://127.0.0.1/test.html 驗(yàn)證:此時(shí)顯示 this is accp web

使用Haproxy搭建Web群集(理論結(jié)合實(shí)戰(zhàn),全程可跟做!

Nginx1:CentOS 7-2的 操作

[root@localhost ~]# yum install pcre-devel zlib-devel gcc gcc-c++ make -y
//改網(wǎng)卡為僅主機(jī)模式
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
IPADDR=192.168.100.202
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
//修改完成后輸入:wq保存退出
[root@localhost ~]# service network restart 
Restarting network (via systemctl):                        [  確定  ]
[root@localhost ~]# mkdir /aaa
[root@localhost ~]# mount.cifs //192.168.10.189/rpm /aaa
Password for root@//192.168.10.189/rpm:  
[root@localhost ~]# cd /aaa
[root@localhost aaa]# ls
apr-1.6.2.tar.gz                  jdk
apr-util-1.6.0.tar.gz             john-1.8.0.tar.gz
awstats-7.6.tar.gz                lf.jpg
cronolog-1.6.2-14.el7.x86_64.rpm  mysql
Discuz_X3.4_SC_UTF8.zip           nginx-1.12.2.tar.gz
error.png                         php
extundelete-0.2.4.tar.bz2         TC
haproxy-1.5.19.tar.gz             tomcat
httpd-2.4.29.tar.bz2              tomcat.tmp
hzw.jpeg                          wh.jpg
[root@localhost aaa]# cd tomcat/
[root@localhost tomcat]# ls
apache-tomcat-7.0.54.tar.gz  jdk-8u91-linux-x64.tar.gz
apache-tomcat-8.5.16.tar.gz  nginx-1.12.0.tar.gz
jdk-7u65-linux-x64.gz        nginx-1.6.0.tar.gz
[root@localost tomcat]# tar zxvf nginx-1.12.0.tar.gz -C /opt/
[root@localhost tomcat]# cd /opt/
[root@localhost opt]# useradd -M -s /sbin/nologin nginx
[root@localhost opt]# cd nginx-1.12.0/
[root@localhost nginx-1.12.0]# ls
auto     CHANGES.ru  configure  html     man     src
CHANGES  conf        contrib    LICENSE  README
[root@localhost nginx-1.12.0]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx
[root@localhost nginx-1.12.0]# make && make install
[root@localhost nginx-1.12.0]# cd /usr/local/nginx/html/
[root@localhost html]# echo "this is benet web" > test.html
[root@localhost html]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost 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
[root@localhost html]# nginx
[root@localhost html]# netstat -ntap | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6408/nginx: master  
[root@localhost html]# systemctl stop firewalld.service 
[root@localhost html]# setenforce 0
在火狐瀏覽器中輸入:http://127.0.0.1/test.html 驗(yàn)證:此時(shí)顯示 this is benet web

使用Haproxy搭建Web群集(理論結(jié)合實(shí)戰(zhàn),全程可跟做!

調(diào)度服務(wù)器:CentOS 7-4的操作

[root@localhost ~]# yum install bzip2-devel pcre-devel gcc gcc-c++ make -y
//改網(wǎng)卡為僅主機(jī)模式
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
IPADDR=192.168.100.210
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
//修改完成后輸入:wq保存退出
[root@localhost ~]# service network restart 
Restarting network (via systemctl):                        [  確定  ]
[root@localhost ~]# mkdir /aaa
[root@localhost ~]# mount.cifs //192.168.10.189/rpm /aaa
Password for root@//192.168.10.189/rpm:  
[root@localhost ~]# cd /aaa
[root@localhost aaa]# ls
apr-1.6.2.tar.gz                  jdk
apr-util-1.6.0.tar.gz             john-1.8.0.tar.gz
awstats-7.6.tar.gz                lf.jpg
cronolog-1.6.2-14.el7.x86_64.rpm  mysql
Discuz_X3.4_SC_UTF8.zip           nginx-1.12.2.tar.gz
error.png                         php
extundelete-0.2.4.tar.bz2         TC
haproxy-1.5.19.tar.gz             tomcat
httpd-2.4.29.tar.bz2              tomcat.tmp
hzw.jpeg                          wh.jpg
[root@localhost aaa]# tar zxvf haproxy-1.5.19.tar.gz -C /opt/
[root@localhost aaa]# cd /opt
[root@localhost opt]# ls
haproxy-1.5.19  rh
[root@localhost opt]# cd haproxy-1.5.19/
[root@localhost haproxy-1.5.19]# make TARGET=linux26
[root@localhost haproxy-1.5.19]# make install
[root@localhost haproxy-1.5.19]# mkdir /etc/haproxy
[root@localhost haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/
[root@localhost haproxy-1.5.19]# vim /etc/haproxy/haproxy.cfg 
//其中chroot /usr/share/haproxy 根目錄刪除
//其中 redispatch 請求轉(zhuǎn)發(fā)給宕機(jī)服務(wù)器刪除
//下面的所有的Listen全部刪除,按88dd
//然后添加以下內(nèi)容
listen  webcluster 0.0.0.0:80
        option httpchk GET /test.html
        balance roundrobin
        server instl 192.168.100.201:80 check inter 2000 fall 3
        server inst2 192.168.100.202:80 check inter 2000 fall 3
//修改完成后輸入:wq保存退出
[root@localhost haproxy-1.5.19]# cp examples/haproxy.init /etc/init.d/haproxy
[root@localhost haproxy-1.5.19]# chmod +x /etc/init.d/haproxy 
[root@localhost haproxy-1.5.19]# chkconfig --add haproxy  
[root@localhost haproxy-1.5.19]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@localhost haproxy-1.5.19]# service haproxy start
Starting haproxy (via systemctl):                          [  確定  ]
[root@localhost haproxy-1.5.19]# systemctl stop firewalld.service 
[root@localhost haproxy-1.5.19]# setenforce 0

win7-1測試結(jié)果:

1.在win 7-1中先把網(wǎng)卡設(shè)為僅主機(jī)模式,然后在網(wǎng)卡配置中將IPv4設(shè)為靜態(tài)IP:192.168.100.58(需要在同一網(wǎng)段),網(wǎng)關(guān)為:255.255.255.0
2.然后在瀏覽器中輸入:http://192.168.100.210/test.html
會先看到:this is accp web

使用Haproxy搭建Web群集(理論結(jié)合實(shí)戰(zhàn),全程可跟做!

再次刷新會看到:this is benet web

使用Haproxy搭建Web群集(理論結(jié)合實(shí)戰(zhàn),全程可跟做!

此時(shí)實(shí)現(xiàn)輪詢訪問 nginx 節(jié)點(diǎn)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI