Haproxyビルド
1つの一般的なWebクラスタースケジューラ
現在一般的なWebクラスタースケジューラは、ソフトウェアとハードウェアに分かれています。
ソフトウェアは通常、オープンソースのLVS、Haproxy、Nginxを
使用します。一般的に使用されるハードウェアはF5であり、多くの人がBarracuda、NSFOCUSなどの国内製品を使用しています。
2、Haproxyアプリケーション分析
(1)LVSは、エンタープライズアプリケーションで強力なアンチロード機能を備えていますが、欠点があります。
LVSは通常の処理をサポートしておらず、動的および静的な分離を実現できません。
大規模なWebサイトの場合、LVSの実装と構成は複雑であり、メンテナンスコストは比較的高くなります。
(2)Haproxyは、TCPおよびHTTPアプリケーションに基づいて、高可用性、負荷分散、およびプロキシを提供できるソフトウェアです。
負荷の高いWebサイトに適しています
。ハードウェア上で数万の同時接続要求をサポートできます。
(3)Haproxyスケジューリングアルゴリズムの原理
Haproxyは複数のスケジューリングアルゴリズムをサポートしています。最も一般的に使用されるのは3つです。
1、RR(ラウンドロビン)
RRアルゴリズムは、最も単純で最も一般的に使用されるアルゴリズム、つまりラウンドロビンスケジューリングです。
例を理解
する3つのノードA、B、およびCがあります。
最初のユーザー訪問はノードAに割り当てられ、
2番目のユーザー訪問はに割り当てられます。ノードB、および
3番目のAユーザーのアクセスはノードCに割り当てられます。4
番目のユーザーのアクセスは引き続きノードAに割り当てられ、負荷分散効果を達成するためにアクセス要求を割り当てるためにポーリングします。
2、LC(最小接続)
最小接続数のアルゴリズムは、バックエンドノードの接続数に応じてフロントエンドリクエストを動的に割り当てます。
例を理解する
ノードA、B、Cが3つあり、各ノードの接続数はAです。 :4、B:5、C:6
最初のユーザー接続要求はAに割り当てられ、接続数はA:5、B:5、C:6になります
。2番目のユーザー要求は引き続きに割り当てられます。、C:5:6、B:A、および接続の数がAとなるであろう6、新しい要求は、Bに割り当てされ、各時間は、新しい要求は、接続の最小数をクライアントに割り当てられます。
のでA、B、Cの接続数は実際の状況下で動的に解放され、同じ数の接続を持つことは困難です状況
このアルゴリズムはrrアルゴリズムと比較して大幅に改善されており、現在使用されているアルゴリズムです。もっと。
3、SH(ソースハッシュ)
セッションセッションがサーバー側で記録されるいくつかのシナリオで使用されるソースアクセススケジューリングアルゴリズムに基づいて、クラスタースケジューリングはソースIP、Cookieなどに基づいて実行できます。3つのノードA、B、およびCが
ある
ことを理解します。最初のユーザーは最初の訪問に割り当てられますAに到達すると、2番目のユーザー
は最初の訪問でBに割り当てられます。最初のユーザーが2回目に訪問すると、引き続きAに割り当てられます。2番目のユーザー負荷分散スケジューラが再起動しない限り、2回目の訪問では引き続きBに割り当てられ、最初のユーザーアクセスはAに割り当てられ、2番目のユーザーアクセスはBに割り当てられます。クラスタースケジューリングを実現するに
は、このスケジューリングアルゴリズムの利点は、セッションの保持を実現することですが、一部のIPアクセスが非常に重い場合、負荷の不均衡や一部のノードへの過度のアクセスが発生し、ビジネスでの使用に影響します。
3つの実験的なセットアップ
サーバ | IP |
---|---|
Haproxy | 192.168.90.10 |
Nginx1 | 192.168.90.20 |
Nginx2 | 192.168.90.30 |
|中央に中央揃えのテキスト|右側に右揃えのテキスト|
(1)Haproxyサーバーの展開
1.ファイアウォールをオフにして、Haproxyのインストールに必要なソフトウェアパッケージを/ optディレクトリにアップロードします
systemctl stop firewalld
setenforce
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
3.Haproxyサーバーの構成
mkdir /etc/haproxy
cp 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 #最大连接数,需考虑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 #定义一个名为appli4-backup的应用
option httpchk GET /test.html #检查服务器的test.html文件
balance roundrobin #负载均衡调度算法使用轮询算法roundrobin
server inst1 192.168.90.100:80 check inter 2000 fall 3 #定义在线节点
server inst2 192.168.90.101:80 check inter 2000 fall 3
4.haproxyシステムサービスを追加します
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
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
(2)ノードサーバーの展開
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/
make && make install
--192.168.90.20---
echo "this is test111111" > /usr/local/nginx/html/test.html
--192.168.90.30---
echo "this is test222222" > /usr/local/nginx/html/test.html
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx #启动nginx 服务
(3)、Webクラスターをテストします
クライアントのブラウザでhttp://192.168.90.10/test.htmlを開き、ブラウザを常に更新して負荷分散効果をテストします
4、ログ定義
デフォルトの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的访问请求日志信息