記事のディレクトリ
1.一般的なWebクラスタースケジューラ
- 現在、一般的なWebクラスタースケジューラはソフトウェアとハードウェアに分かれています
- ソフトウェアは通常、オープンソースのLVS、Haproxy、およびNginxを使用します
(LVSは最高のパフォーマンスを発揮しますが、構築は比較的複雑です。Nginxのアップストリームモジュールはクラスター機能をサポートしますが、クラスターノードのヘルスチェック機能は強力ではなく、同時実行性が高いパフォーマンスはHaproxyほど良くありません。) - 最も一般的に使用されているハードウェアはF5であり、多くの人がBarracuda、NSFOCUSなどの国内製品を使用しています。
2、Haproxyアプリケーション分析
-
LVSは、エンタープライズアプリケーションで強力なアンチロード機能を備えていますが、欠点があります
。LVSは通常の処理をサポートしておらず、動的および静的な分離を実現できません。
大規模なWebサイトの場合、LVSの実装と構成は複雑であり、メンテナンスの成功は比較的です。高い -
Haproxyは、TCPおよびHTTPアプリケーションに基づく高可用性、負荷分散、およびプロキシを提供するソフトウェアです。負荷の高い
Webサイトに適して
おり、ハードウェア上で実行され、数万の同時接続要求をサポートします。
3、Haproxyスケジューリングアルゴリズムの原則
Haproxyは複数のスケジューリングアルゴリズムをサポートしています。最も一般的に使用されるのは3つです。
- RR(ラウンドロビン)
RRアルゴリズムは、最も単純で最も一般的に使用されるアルゴリズム、つまりラウンドロビンスケジューリングです。 - LC(最小接続)
最小接続アルゴリズムは、バックエンドノード接続の数に応じてフロントエンド要求を動的に割り当てます。 - SH(ソースハッシュ)は
、ソースアクセススケジューリングアルゴリズムに基づいています。これは、セッションセッションがサーバー側で記録される一部のシナリオで使用されます。クラスタースケジューリングは、ソースIP、Cookieなどに基づいて実行できます。
第四に、HaproxyはWebクラスターを構築します
環境を設定します。
Haproxyサーバー(centos7-1):192.168.182.11
Nginxサーバー1(centos7-2):192.168.182.22
Nginxサーバー2(centos7-3):192.168.182.33
クライアント(仮想Windows10):192.168.182.99
------------------------------------- Haproxyサーバーの展開---------- ----------------------------
1. Haproxyサーバー(192.168.182.11)をデプロイします
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
---------------------参数说明----------------------------
TARGET=linux2628 #内核版本
#使用uname -r 查看内核,如2.6.18-371.e15,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628
ARCH=x86_64 #系统位数,64位系统
3.Haproxyパラメータの設定
mkdir /etc/haproxy
cp /opt/haproxy-1.5.19/examples/haproxy.cfg /etc/haproxy/
cd /etc/haproxy/
vim haproxy.cfg
global
-----4~5行修改,配置日志记录,local0为日志设备,默认存放到系统日志--------
log /dev/log local0 info
log /dev/log local0 notice
#log loghost local0 info
maxconn 4096
----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 #定义一个名为webcluster的应用
option httpchk GET /test.html #检查服务器的test.html文件
balance roundrobin #负载均衡调度算法使用轮询算法roundrobin
server inst1 192.168.182.22:80 check inter 2000 fall 3 #定义在线节点
server inst2 192.168.182.33:80 check inter 2000 fall 3
-----------------------参数说明-------------------------------------------------------------
balance roundrobin #负载均衡调度算法
#轮询算法:roundrobin;最小连接数算法:leastconn;来源访问调度算法:source,类似于nginx的ip_hash
check inter 2000 #表示haproxy服务器和节点之间的一个心跳频率
fall 3 #表示连续三次检测不到心跳频率则认为该节点失效
若节点配置后带有“backup”表示该节点只是个备份节点,只有主节点失效该节点才会上。不携带“backup”,表示为主节点,和其它主节点共同提供服务。
--------------------------------------------------------------------------------------------
4. Nginxサーバー(192.168.182.22; 192.168.182.33)をコンパイルしてインストールします
systemctl stop firewalld
setenforce 0
yum install -y 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
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx #启动nginx 服务
netstat -natp | grep 80 # 查看80端口是否启动
192.168.182.22
echo "this is panrj web" > /usr/local/nginx/html/test.html
#在Nginx默认首页目录下创建指定的检查首页文件并注入内容
192.168.182.33
echo "this is benet web" > /usr/local/nginx/html/test.html
5. Haproxyサービスを開始します(192.168.182.11)
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
cd /etc/init.d/
ls
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
service haproxy start 或 /etc/init.d/haproxy start
6.Webクラスターをテストします
クライアントのブラウザでhttp://192.168.182.11/test.htmlを開き、ブラウザを常に更新して負荷分散効果をテストします
5、ログ定義
デフォルトのhaproxyログはシステムsyslogに出力されますが、これは表示にあまり便利ではありません。haproxyログをより適切に管理するために、通常、実稼働環境で個別に定義します。haproxyの情報ログと通知ログを別のログファイルに記録する必要があります。
vim /etc/haproxy/haproxy.cfg
global
log /dev/log local0 info
log /dev/log local0 notice
service haproxy restart
管理を容易にするために、rsyslog構成を変更する必要があります。haproxy.confでhaproxy関連の構成を個別に定義し、それを/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の情報ログを/var/log/haproxy/haproxy-info.logに記録し、通知ログを/var/log/haproxy/haproxy-notice.logに記録することです。「&〜」は、ログがログファイルに書き込まれると、rsyslogがこの情報の処理を停止することを意味します。
systemctl restart rsyslog.service
tail -f /var/log/haproxy/haproxy-info.log #查看haproxy的访问请求日志信息