一般的なWebクラスタスケジューラ
- 現在の一般的なWebクラスタのスケジュールは、ソフトウェアとハードウェアに分割して、ソフトウェア一般的に使用されるオープンソースLVS、Haproxy、nginxの、F5は、多くの人々が存在する場合に、一般などカワカマス、グリーンリーグ、などいくつかの国産品を使用してより多くのハードウェアを使用します
Haproxyアプリケーション分析
エンタープライズアプリケーションと強力な抗負荷容量でLVSが、不十分あり
- LVSは、定期的な治療をサポートしていない、それは静的および動的な分離を達成することはできません
- 大規模なサイト、複雑な構成のLVSの実装では、メンテナンスコストが比較的高いです
Haproxyは、高可用性、負荷分散、およびプロキシベースのTCPおよびHTTPアプリケーションソフトウェアを提供することができますです
- 特に、特に大きな負荷のWebサイトの
- 現在のハードウェア上で実行すると、同時接続要求の数千人をサポートすることができます
Haproxyスケジューリングアルゴリズムの原則
Haproxyは、スケジューリングアルゴリズムの多様性をサポートし、最も一般的に使用される、3つがあります
- RR(ラウンドロビン)
- RRアルゴリズムは単純で最も一般的に使用される方法、即ち、ポーリングスケジュールであります
- 例の理解のために
- 3つのノードA、B、Cがあり、アクセスが最初のユーザノードAに割り当てられる、第2のユーザは、ノードB、第3のユーザは、アクセスノードに割り当てることができるアクセスに割り当てられます
- 第四のユーザは、ロードバランシング効果を達成するために、ノードA、ポーリング割り当てのアクセス要求に割り当てられたアクセスに進み
- LC(最小接続)
- LCアルゴリズム即ち、接続要求の数は、先端ノード動的に割り当てられたバックエンドの大きさに応じて接続アルゴリズムの最小数
- 例の理解のために
- 4、B:5、C:3つのノードのノードの数がAに接続されているA、B、C、あるユーザの接続要求をAに割り当てられる場合に初めて6は、接続の数となりますA:5、B:5、C:6
- 、C:5:6、B:第2のユーザは、要求は、接続の数がAとなり、Aに割り当てられる6、新しい要求は、Bに新たな要求が接続の最小数に割り当てされるたびに割り当てられませんクライアント
- このアルゴリズム比較RRアルゴリズムが大幅に改善されているので、接続の実際のケース番号のでAは、B、Cは、ダイナミックを放出する、非常に困難な状況は、接続の数と同じになり、現在では使用されている複数のアルゴリズムの
- SH(出典ハッシュ)
- SHは、すなわちアクセススケジューリングアルゴリズム、このアルゴリズムを起源 - - セッションセッションレコードは、いくつかのサーバー側のシーンを持っている、などのIPベースのトランキング派遣元、クッキーを作ることができます
-
例の理解のために
- Aに割り当てられた訪問、Bに割り当てられた第2のユーザに最初のアクセス - の3つのノードA、B、C、最初の最初のユーザーが存在します
- アクセスへの最初のユーザー秒の時間がAに割り当てることを継続した場合、Bはまだ長い負荷イコライザはスケジューラを再起動しないようように、第2のアクセスは、最初のユーザのアクセスが割り当てられているときに、第2のユーザに割り当てられます、第2のユーザのアクセスは、クラスタスケジューリングを達成するために、Bに割り当てられています
- このスケジューリングアルゴリズムは、セッションを維持することの利点を実現することであるが、IPトラフィックが非常に大きい、いくつかのリード|大量にアクセスするためのいくつかのノードから負荷の不均衡、ビジネス利用に影響を与えます
ケーストポロジ
インストールと起動Haproxy
Haproxyは、ロードバランサにインストールされています
- インストール手順
- インストールベースパッケージ
- コンパイルとhaproxyをインストール
- オペレーティングシステムのバージョンに注意して、32ビットまたは64ビットシステム
- Haproxyプロファイルを確立
- プロファイルディレクトリの/ etc / haproxyを作成します。
- プロファイルディレクトリに提供されるサンプルの設定ファイルhaproxy.cfgソースパッケージをコピーします。
詳細プロフィールHaproxy
- Haproxy設定ファイルは、通常は3つの部分に分かれています
- グローバル:グローバル設定
- デフォルト:デフォルトの設定
- 聞く:コンポーネントを構成し適用します
- グローバルコンフィギュレーションパラメータ
- デフォルトで保存されたロギングの構成、LOCAL0装置のログ、システムログ:127.0.0.1 LOCAL0を記録
- 通常は24のレベルがあり、予告ログレベル:127.0.0.1 LOCAL1通知をログに記録
- MAXCONN 4096:接続の最大数
- UID 99:ユーザーのUID
- D 99:ユーザーGID
- デフォルトデフォルトのパラメータを設定するための構成要素、具体的にアプリケーションコンポーネントに記載されていない場合、アプリケーションコンポーネントは、一般的に、継承され、デフォルトのインストール設定パラメータの設定
- グローバルログ:ログログ構成のために定義されたグローバルな定義を
- モードのhttp:HTTPモード
- オプションHTTPLOG:ログを使用してHTTPログ形式
- 再試行3:チェック三つの連続ノードに到達するために障害が発生したノードサーバが使用できないと考えられています
- MAXCONN 2000:接続の最大数
- contimeout 5000:接続タイムアウト
- clitimeout 50000:クライアントのタイムアウト
- srvtimeout 50000:サーバーのタイムアウト
-
プロジェクトを構成するために聞く - 構成アプリケーションモジュールパラメータ用として
- 0.0.0.0:10004はappli4バックアップを聞く:Aのappli4バックアップアプリケーション定義
- オプションhttpchk /index.htmlが:のindex.htmlファイルサーバチェック
- オプションでは、持続:サーバーに要求を送信するように強制はオフにダウンしています
- ラウンドロビンバランス:ロードバランシングアルゴリズムスケジューリングアルゴリズムは、ポーリングを使用しています
- 192 168.114.56 INST1サーバー:80チェック間2000年秋3:定義されたノードがオンライン
- 192 168.114.56 inst2のサーバー:81チェック間2000年秋3のバックアップ:バックアップノードが定義され
設定とテスト
- 対応するパラメータを変更することができ、実際のケース。
- 0.0.0.0:80 webcluster聞きます
- オプションhttpchk GET /index.htmlが
- バランスラウンドロビン
- 192 168.10.61 INST1サーバー:80チェック間2000年秋3
- サーバは192.168をINST2。10.62:80チェック間2000年秋3
- カスタムの起動スクリプトを作成し、Haproxyサービスを開始
- テストHaproxyクラスタ
- 高性能テスト
- 2つの試験サイトは2つのサイトのテストページである必要があり、通常の状況下で、それぞれ、二つの異なるブラウザでアクセスすることができます
- ハイアベイラビリティ
- クライアントのブラウザでnginxのサーバーバリアフリーHaproxyの接続1は、別のサーバーnginxのサイトのテストページは、通常の状況下に表示されます
Haproxyログ管理
- syslogのデフォルトの出力システムにHaproxyログ、一般的に、それだけでは、本番環境で定義されています
- ステップで定義された方法
- Haproxyは、設定を追加し、ロギング構成オプションの設定ファイルを変更します。
- ログは/ dev / LOCAL0情報をログに記録
- ログは/ dev /ログはlocal0通知
- rsyslogの構成を変更し、構成がhaproxy.confに関する独立Haproxy定義され、そして/etc/rsyslog.d/下に置かれます
- rsyslogのサービス設定ファイルを保存して再起動し、完全なrsyslogの設定
- アクセスHaproxyクラスタテストページとテスト・ログ情報
Haproxyパラメータ最適化
- 企業のウェブサイトの負荷が増加すると、非常に重要なパラメータの最適化をhaproxy
- MAXCONN:接続の最大数、アプリケーションの実際の状況に応じて調整することが、10240を使用することが推奨されます
- デーモン:デーモンパターン、Haproxyが非デーモンモードが起動された使用することができ、デーモンモードを使用することをお勧めしますが起動し
- nbproc:同時プロセスのロードバランシングの数、核の推奨現在のサーバーのCPUまたは2倍の数に等しいです
- 再試行:大規模で複雑な複数のノードは、2または3回に設定されている場合は、クラスタノードを確認するために使用される再試行
- オプションのhttpサーバ・クローズ:クローズイニシアチブのhttpリクエストのオプションは、実稼働環境ではこのオプションを使用することをお勧めします
- タイムアウトのhttp-キープアライブ:長い接続時間、接続時間が10秒に長く設定することができます
- タイムアウトのhttpリクエスト:HTTPリクエストの時間、この時間を設定することが推奨され、5〜10秒でリリースhttp接続の速度を増加させます
- タイムアウトクライアント:トラフィックの量は、遅い応答ノードは、この時間を短く設定することができれば、クライアントのタイムアウトは、それはそれで周りの1分に推奨セットです
動作例
実験環境
Haporxy服务器IP地址:192.168.144.175
web1服务器IP地址:192.168.144.151
web2服务器IP地址:192.168.144.176
client测试机
web1、WEB2サーバー上でnginxのをインストールします。
[root@web1 ~]# yum install -y \ //安装环境需要组件包
> pcre-devel \ //开发包
> zlib-devel \ //压缩包
> gcc \
> gcc-c++ \
> make
[root@web1 ~]# useradd -M -s /sbin/nologin nginx //创建系统用户
[root@web1 ~]# mkdir /abc ##创建挂载点
[root@web1 ~]# mount.cifs //192.168.100.8/LNMP-C7 /abc/ //挂载
Password for root@//192.168.100.3/LNMP-C7:
[root@web1 ~]# cd /abc/
[root@web1 abc]# tar zxvf nginx-1.12.2.tar.gz -C /opt //解压
[root@web1 abc]# cd /opt/nginx-1.12.2/
[root@web1 nginx-1.12.2]# ./configure \ //进行配置
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx
[root@web1 nginx-1.12.2]# make && make install
[root@web1 nginx-1.12.2]# echo "this is kgv web" > /usr/local/nginx/html/test.html //创建站点网页内容,web2上为this is accp web
[root@web1 nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ //便于系统识别
[root@web1 nginx-1.12.2]# nginx -t //检查语法
[root@web1 nginx-1.12.2]# nginx //开启服务
[root@web1 nginx-1.12.2]# systemctl stop firewalld.service //关闭防火墙
[root@web1 nginx-1.12.2]# setenforce 0
サーバーhaproxyにインストールhaproxyスケジュールされたサービス
[root@haproxy ~]# yum install -y \ //安装环境组件工具
> pcre-devel \
> bzip2-devel \
> gcc \
> gcc-c++ \
> make
[root@haproxy ~]# systemctl stop firewalld.service //关闭防火墙
[root@haproxy ~]# setenforce 0
[root@haproxy ~]# mkdir /abc
[root@haproxy ~]# mount.cifs //192.168.100.8/LNMP-C7 /abc/ //挂载
[root@haproxy ~]# cd /abc/
[root@haproxy abc]# tar zxvf haproxy-1.5.19.tar.gz -C /opt/ //解压
[root@haproxy abc]# cd /opt/haproxy-1.5.19/
[root@haproxy haproxy-1.5.19]# make TARGET=linux26 //编译
[root@haproxy haproxy-1.5.19]# make install //安装
[root@haproxy haproxy-1.5.19]# mkdir /etc/haproxy //创建配置文件目录
[root@haproxy haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/ //模板复制到配置目录下
[root@haproxy haproxy-1.5.19]# cd /etc/haproxy/
[root@haproxy haproxy]# vim haproxy.cfg //编辑配置文件
#chroot /usr/share/haproxy //注释语句
#redispatch //注释语句
//删除所有listen项目,并添加
listen webcluster 0.0.0.0:80
option httpchk GET /test.html //web网页
balance roundrobin //开启轮询模式
server inst1 192.168.144.151:80 check inter 2000 fall 3 //健康检查请求三次
server inst2 192.168.144.176:80 check inter 2000 fall 3
[root@haproxy haproxy]# cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy //启动文件
[root@haproxy haproxy]# chmod +x /etc/init.d/haproxy //执行权限
[root@haproxy haproxy]# chkconfig --add /etc/init.d/haproxy //添加到service
[root@haproxy haproxy]# ln -s /usr/local/sbin/haproxy /usr/sbin/ //便于系统识别
[root@haproxy haproxy]# service haproxy start //开启服务
Starting haproxy (via systemctl): [ 确定 ]
[root@haproxy haproxy]# netstat -ntap | grep haproxy //查看端口
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 39884/haproxy
クライアントのテストページを使用します
ログには、設定ファイルがhaproxy修正し、定義します
[root@haproxy haproxy]# vim /etc/haproxy/haproxy.cfg ##修改配置文件
global
log /dev/log local0 info ##添加两个级别的日志文件
log /dev/log local0 notice
#log loghost local0 info
[root@haproxy haproxy]# service haproxy restart ##重启服务
[root@haproxy haproxy]# touch /etc/rsyslog.d/haproxy.conf ##创建系统日志haproxy配置文件
[root@haproxy haproxy]# 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
&~
[root@haproxy haproxy]# systemctl restart rsyslog.service ##重启系统日志服务
[root@haproxy haproxy]# cd /var/log/ ##此时是没有haproxy日志
##重新访问网页
[root@haproxy haproxy]# cd /var/log/haproxy/
[root@haproxy haproxy]# ls ##此时就生成了info级别的日志文件
haproxy-info.log