HaproxyはWebクラスターの実用的な操作を構築します(スケジューリングアルゴリズム、クラスター構成、ログ管理、パラメーター最適化)

1つ:一般的なWebクラスタースケジューラー

  • 現在の一般的なWebクラスタースケジューラは、ソフトウェアとハ​​ードウェアに分かれています
  • ソフトウェアは通常、オープンソースのLVS、Haproxy、Nginxを使用します
  • 最も一般的に使用されるハードウェアはF5であり、多くの人々はバラクーダ、NSFOCUSなどの一部の国産製品を使用しています。

2:Haproxyアプリケーション分析

  • LVSはエンタープライズアプリケーションのリハビリが非常に可能ですが、欠点があります
    • LVSは通常の処理をサポートせず、動的分離と静的分離を実現できません
    • 大規模なWebサイトの場合、LVSの実装と構成は複雑であり、保守コストは比較的高くなります
  • Haproxyは、TCP(4層)およびHTTP(7層)アプリケーションに高可用性、ロードバランシング、およびプロキシソフトウェアを提供するソフトウェアです。
    • 高負荷のWebサイトに適しています
    • ハードウェアで実行すると、数万の同時接続要求をサポートできます

3:Haproxyスケジューリングアルゴリズムの原則

  • Haproxyはさまざまなスケジューリングアルゴリズムをサポートし、最も一般的に使用される3つがあります:RR(ラウンドロビン)、LC(最小接続)、SH(ソースハッシュ)

3.1:RR(ラウンドロビン)

  • RRアルゴリズムは、最も単純で最も一般的に使用されるアルゴリズム、つまりラウンドロビンスケジューリングです。
  • 例を理解する
    • 3つのノードA、B、Cがあります。
    • 最初のユーザーアクセスはノードAに割り当てられます
    • 2番目のユーザーアクセスはノードBに割り当てられます
    • 3番目のユーザーアクセスはノードCに割り当てられます
    • 4番目のユーザーアクセスは引き続きノードAに割り当てられ、負荷分散効果を得るためにアクセス要求をポーリングして割り当てます

3.2:LC(最小接続)

  • LCアルゴリズムは最小接続アルゴリズムであり、バックエンドノード接続の数に応じてフロントエンド要求を動的に割り当てます
  • 例を理解する
    • A、B、Cの3つのノードがあり、各ノードの接続数はA:4、B:5、C:6です。このとき、最初のユーザー接続要求があると、Aに割り当てられ、接続数はA:5、B:5、C:6
    • 2番目のユーザー要求は引き続きAに割り当てられ、接続数はA6、B:5、C:6になります。新しい要求はBに割り当てられ、新しい要求はそれぞれ、接続数が最小のクライアントに割り当てられます
    • A、B、Cの接続数は実際の条件下では動的に解放されるため、同じ接続数にすることは困難です。このため、このアルゴリズムはrrアルゴリズムと比較して大幅に改善されています。現在、より多く使用されているアルゴリズムです。

3.3:SH(ソースハッシュ)

  • SHはソースアクセススケジューリングアルゴリズムに基づいています。このアルゴリズムは、セッションセッションがサーバー側で記録されるいくつかのシナリオで使用されます。クラスターのスケジューリングは、ソースIP、Cookieなどに基づいて実行できます。
  • 例を理解する
    • 3つのノードA、B、Cがあります。最初のユーザーは最初の訪問のAに割り当てられ、2番目のユーザーは最初の訪問のBに割り当てられます。
    • 最初のユーザーが2回目にアクセスした場合、2番目のユーザーは引き続きAに割り当てられ、2番目のユーザーはBに引き続き割り当てられます。負荷分散スケジューラが再起動しない限り、最初のユーザーのアクセスが割り当てられますA、2番目のユーザーアクセスはBに割り当てられ、クラスターのスケジューリングを実現します
    • このスケジューリングアルゴリズムの利点は、セッションの保持を実現することですが、一部のIPアクセスが非常に大きい場合は、負荷が不均衡になり、一部のノードには過度のアクセスがあり、ビジネスの使用に影響します

4:HaproxyがWebクラスターを構築する

4.1:環境の準備

  • VMwareソフトウェア
  • NGINXとしての2つのcentos7仮想マシン(IPアドレス:20.0.0.52と他のIPアドレス:20.0.0.47)
  • Haproxyとしてのcentos7仮想マシン(IPアドレス:20.0.0.51)

4.2:実験手順

  • 2つのWebサーバーにNginxをインストールする
[root@web1 ~]# yum install -y \
pcre-devel \
zlib-devel \
gcc \
gcc-c++ \
make
[root@web1 ~]# useradd -M -s /sbin/nologin nginx
[root@web1 ~]# tar zxvf nginx-1.12.0.tar.gz 	'解压NGINX源码包'
[root@web1 ~]# cd nginx-1.12.0/
[root@web1 nginx-1.12.2]# ./configure \		'configure 配置'
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx
[root@web1 nginx-1.12.2]# make && make install '编译安装'
[root@web1 nginx-1.12.2]# cd /usr/local/nginx/html
[root@web1 html]# echo "this is kevin web" > test.html	'创建站点首页'
[root@web1 html]# ln -s /usr/local/nginx/sbin/nginx /usr/sbin '创建nginx命令软连接'
[root@web1 html]# nginx -t
[root@web1 html]# nginx			'开启nginx'
[root@web1 html]# netstat -ntap |grep nginx
'第二台节点采用相同方法设置,其中站点首页需要更改,内容为this is benet web'

4.3:Haproxyのインストールと起動

  • ロードバランサーにHaproxyをインストールする
  • インストール手順
    • 基本パッケージをインストールする
    • haproxyをコンパイルしてインストールする
    • オペレーティングシステムのバージョンに注意してください(32ビットシステムでも64ビットシステムでも)。
  • Haproxy構成ファイルを作成する
    • 構成ファイルのディレクトリー/ etc / haproxyを作成します
    • ソースパッケージによって提供されるサンプル構成ファイルhaproxy.cfgを構成ファイルディレクトリにコピーします。
[root@localhost ~]# yum install -y \
pcre-devel \
bzip2-devel \
gcc \
gcc-c++ \
make
[root@localhost ~]# tar zxvf haproxy-1.5.19.tar.gz
[root@localhost ~]# 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]# cd /etc/haproxy
[root@localhost haproxy]# vim haproxy.cfg
global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
#       chroot /usr/share/haproxy	'固有目录,可注释掉'
        uid 99
        gid 99
        daemon
        #debug
        #quiet

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
#       redispatch	   '注释'
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000
'删除原本listen内容,添加以下内容'
listen webcluster 0.0.0.0:80
	option httpchk GET /test.html	'监听检查服务器的index.html文件(节点服务器的主页)'
	balance roundrobin	'负载均衡调度算法使用轮询算法'
	server inst1 20.0.0.52:80 check inter 2000 fall 3 '定义在线节点'
	server inst2 20.0.0.47:80 check inter 2000 fall 3
[root@localhost haproxy]# cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy	'复制创建启动脚本'
[root@localhost haproxy]# cd /etc/init.d/
[root@localhost init.d]# chmod +x haproxy 	'添加启动脚本权限'
[root@localhost init.d]# chkconfig --add /etc/init.d/haproxy '为service添加启动脚本'
[root@localhost init.d]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy	'创建命令软连接'
[root@localhost init.d]# service haproxy start
[root@localhost init.d]# iptables -F
[root@localhost init.d]# setenforce 0

4.4:Haproxy設定ファイルの詳細説明

  • Haproxy構成ファイルは通常3つの部分に分かれています
    • global:グローバル構成
    • デフォルト:デフォルト構成
    • listen:アプリケーションコンポーネントの構成
  • グローバル構成パラメーター
    • log127.0.0.1 lcal0:ロギングを設定します。local0はログデバイスであり、デフォルトでシステムログに保存されます
    • log127.0.0.1 loca1通知:通知はログレベルであり、通常は24レベルあります
    • maxconn4096:最大接続数
    • uid 99:ユーザーuid
    • gid 99:ユーザーgid
  • デフォルトの構成アイテムは、デフォルトのパラメーターを構成します。これは通常、アプリケーションコンポーネントによって継承されます。アプリケーションコンポーネントに特別なステートメントがない場合、デフォルトの構成パラメーター設定がインストールされます
    • log global:グローバル構成でログ定義としてログを定義します
    • モードhttp:モードはhttpです
    • オプションhttplog:httpログ形式でログを記録
    • 再試行3:ノードサーバーに3回連続して障害が発生し、ノードが使用不可と見なされることを確認します
    • maxconn2000:接続の最大数
    • contimeout5000:接続タイムアウト期間
    • clitimeout50000:クライアントのタイムアウト時間
    • srvtimeout50000:サーバーのタイムアウト時間
  • リッスン構成項目は、通常、アプリケーションモジュールパラメータを構成します
    • リッスンappli4-バックアップ0.0.0.0:10004:appli4-バックアップアプリケーションを定義します
    • オプションhttpchk /index.htmlサーバーのindex.htmlファイルを確認します
    • オプションの持続:要求を強制的に停止したサーバーに送信します
    • ラウンドロビンのバランス:負荷分散スケジューリングアルゴリズムはラウンドロビンアルゴリズムを使用します
    • server inst1 20.0.0.52:80 2000年秋のチェック3:オンラインノードの定義
    • server inst2 20.0.0.47:81 2000秋3のバックアップをチェック:バックアップノードを定義

4.5:構成とテスト

Haproxyクラスターのテスト

  • 高性能をテストする
    • 2つのテストWebサイトは2つの異なるブラウザーでアクセスでき、2つのWebサイトのテストページは通常の状況で表示されます。

ここに画像の説明を挿入

  • リフレッシュ

ここに画像の説明を挿入

  • 高可用性
    • Nginxサーバーの1つを無効にし、クライアントブラウザーでHaproxyにアクセスします。通常の状況では、他のNginxサーバーのWebサイトテストページが表示されます。

5:Haproxyログ管理

  • Haproxyのログは、デフォルトでシステムのsyslogに出力されます。これは通常、実稼働環境で個別に定義されます
  • 定義された方法ステップ
    • Haproxy構成ファイルのログ構成オプションを変更し、構成を追加します。
      • ログ/ dev / log local0情報
      • ログ/ dev / log local0通知
    • rsyslog構成を変更して、Haproxy関連の構成を独立して定義します。
      • haproxy.confを/etc/rsyslog.d/に配置します
    • 構成ファイルを保存し、rsyslogサービスを再起動して、rsyslog構成を完了します。
[root@localhost haproxy]# vim /etc/haproxy/haproxy.cfg 	'编辑haproxy配置文件'
'在global下,将127.0.0.1修改为/dev/log'
log /dev/log local0 info
log /dev/log local1 notice
[root@localhost haproxy]# service haproxy restart 	'重启haproxy服务'
[root@localhost haproxy]# touch /etc/rsyslog.d/haproxy.conf 	'创建一个新haproxy配置文件'
[root@localhost haproxy]# vim /etc/rsyslog.d/haproxy.conf 	'编写haproxy配置文件脚本'
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@localhost haproxy]# systemctl restart rsyslog.service	'重启日志服务'
  • HaproxyクラスターテストWebページにアクセスしてログ情報をテストする
'未访问网页,查看/var/log'
[root@haproxy dev]# cd /var/log
[root@haproxy log]# ls
'发现没有haproxy文件生成'
'查看网页之后,再次查看/var/log'
'发现已经生成haproxy文件了,可以进去查看'
[root@localhost haproxy]# cd /var/log/haproxy/
[root@localhost haproxy]# ls
haproxy-info.log  haproxy-notice.log

5.1:Haproxyによって最適化できるパラメーターの詳細な説明

  • 企業のWebサイトへの負荷が増加するにつれて、haproxyパラメータの最適化は非常に重要です
    • maxconn:アプリケーションの実際の状況に応じて調整された最大接続数、10 240を推奨
    • デーモン:デーモンプロセスモード、Haproxyは非デーモンプロセスモードで開始できます。デーモンプロセスモードで開始することをお勧めします
    • nbproc:負荷分散のための同時プロセスの数現在のサーバーのCPUコアの数と同じか2倍にすることをお勧めします
      • 再試行:主にクラスターノードをチェックするために使用される再試行の回数。ノードが多く、同時実行の量が多い場合は、2または3回に設定します。
    • オプションhttp-server-close:httpリクエストオプションをアクティブに閉じます。本番環境ではこのオプションを使用することをお勧めします
    • timeout http-keep-alive:長い接続タイムアウト時間。長い接続タイムアウト時間を設定します。これは10秒に設定できます。
    • timeout http-request:httpリクエストのタイムアウト時間。この時間を5〜10秒に設定し、http接続の解放速度を上げて、
      PUコア数をそれと同じか2倍にすることをお勧めします。
    • タイムアウトクライアント:クライアントタイムアウト時間トラフィックが大きすぎてノードの応答が遅い場合は、この時間を短く設定できます。約1分に設定することをお勧めします。

おすすめ

転載: blog.csdn.net/m0_47219942/article/details/108371258
おすすめ