技術共有

Haproxy は Web クラスターを構築します

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1: 事例分析

1: 事例の概要

2: 事前の知識

3: ケース環境

2: 事例の実装

1: nginx サーバーをコンパイルしてインストールします (2 つの nginx Web サイトの手順はまったく同じですが、テスト ページのみが異なります)

[root@localhost ~]# yum -y インストール pcre-devel zlib-devel gcc*

[root@localhost ~]# useradd -M -s /sbin/nologin nginx

[root@localhost ~]# tar zxvf nginx-1.12.0.tar.gz

[root@localhost ~]# cd nginx-1.12.0/

[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

[root@localhost nginx-1.12.0]# make && make install

[root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

[root@localhost nginx-1.12.0]# cd /usr/local/nginx/html/0

[root@localhost html]# echo "test web01" > test.html

[root@localhost ~]# systemctl stop ファイアウォールd

[root@localhost ~]# nginx -t

[root@localhost ~]# nginx ##nginx プロセスを開始します

[root@localhost ~]# netstat -anpt | grep nginx

2: Haproxy をコンパイルしてインストールする

[root@localhost ~]# systemctl stop ファイアウォールd

[root@localhost ~]# setenforce 0

[root@localhost ~]# yum -y インストール pcre-devel bzip2-devel gcc*

[root@localhost ~]# tar zxvf haproxy-1.5.19.tar.gz

[root@localhost ~]# cd haproxy-1.5.19/

[root@localhost haproxy-1.5.19]# TARGET=linux26 にする

[root@localhost haproxy-1.5.19]# インストールする

注記:

Linux 2.2 用の linux22

Linux 2.4 以降の場合は linux24 (デフォルト)

動作する epoll (> 0.21) をサポートする Linux 2.4 用の linux24e

Linux 2.6 以降の場合は linux26

solaris は Solaris 8 または 10 用 (その他は未テスト)

freebsd は FreeBSD 5 から 8.0 まで (その他は未テスト)

OpenBSD 3.1 から 4.6 用の openbsd (その他は未テスト)

Cygwin 用の cygwin

他の OS にも汎用的に使用できます。

すべての設定を手動で調整するカスタム

3: Haproxyサーバーの構成

(1) haproxy設定ファイルの作成

[root@localhost haproxy-1.5.19]# mkdir /etc/haproxy

[root@localhost haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/

(2) サービススクリプトの作成

[root@localhost haproxy-1.5.19]# cp examples/haproxy.init /etc/init.d/haproxy

[root@localhost haproxy-1.5.19]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

[root@localhost haproxy-1.5.19]# chmod +x /etc/init.d/haproxy

[root@localhost ~]# chkconfig --add haproxy

(3) Haproxy 構成の導入

[root@localhost haproxy-1.5.19]# vi /etc/haproxy/haproxy.cfg

グローバル

ログ 127.0.0.1 local0

ログ 127.0.0.1 local1 通知

#log ログホスト local0 情報

マックスコン 4096

uid 99

ジッド99

デーモン

#デバッグ

#静かな

デフォルト

ロググローバル

モード http

オプション httplog

オプション dontlognull

再試行 3

# 再ディスパッチ

マックスコン 2000

タイムアウト 5000

クリタイムアウト 50000

srvタイムアウト 50000

ウェブクラスター 0.0.0.0:80 をリッスン

オプション httpchk GET /index.html

バランスラウンドロビン

サーバー inst1 192.168.1.61:80 チェックインター 2000 秋 3

サーバー inst2 192.168.1.62:80 チェックインター 2000 秋 3

各サーバーの後に重みを追加して、重み値を設定できます。

サーバー inst1 192.168.1.61:80 チェックインター 2000 秋 3重量 1

サーバー inst2 192.168.1.62:80 チェックインター 2000 秋 3重量2

各ステートメントの説明

グローバル

ログ 127.0.0.1 local0 \ロギングを設定し、ローカル0ログデバイスです。デフォルトはシステムログです。

ログ 127.0.0.1 local1 通知 \ログレベルは知らせ

#log ログホスト local0 情報

マックスコン4096 \最大接続数

uid 99 \ユーザーユーザID

ジッド99 \ユーザーギド

デーモン \デーモンプロセスとして実行

#デバッグ\デバッグモード、起動情報を標準出力に出力

#静かな \静音モード、起動時に出力なし

デフォルト

ロググローバル \使用球形で定義されたログ

モード http \モードはhttp

オプション httplog \使用httpロギングの形式

オプション dontlognull \確保するHAプロキシステータス データを検出するために、上位レベルのロード バランサによって送信されるハートビート パケットを記録しないでください。

再試行 3 \ノード接続失敗数が超過していることを確認してください。3ノードは使用できないと見なされます

  # 再ディスパッチ\ロード時値が非常に大きい場合、現在のキューで長時間処理されている接続は自動的に終了します。

マックスコン 2000 \最大接続数

タイムアウト 5000 \接続タイムアウトMS

クリタイムアウト 50000クライアントのタイムアウトMS

srvタイムアウト 50000サーバータイムアウトMS

ウェブクラスタ 0.0.0.0:80 をリッスン \クラスターとリスニングのポート番号を定義する

オプション httpchk GET /index.html \サーバーを確認してくださいインデックス書類、ハートビート検出URLの設定

バランスラウンドロビン \ロードバランシングのスケジューリングアルゴリズムはラウンドロビンです

サーバー inst1 192.168.1.61:80 チェックインター 2000 秋 3 \オンラインノードを定義する

サーバー inst2 192.168.1.62:80 チェックインター 2000 秋 3

インター2000をチェック心拍数を検出することです(心拍数ごと)。2000ミリ秒1 回検出されます)、秋3はい3障害が発生するとサーバーは使用不可とみなされます

新しいバージョンでは、タイムアウト設定が次のように調整されました。

contimeout は timeout connect に置き換えられます。haproxy がクライアント要求をバックエンドサーバーに転送するために待機するタイムアウト時間を定義します。

clitimeout はタイムアウト クライアントに置き換えられます。クライアントの非アクティブ時のタイムアウトは、アプリが haproxy に接続するのにかかる時間です。

srvtimeout はタイムアウト サーバーに置き換えられます。クライアントがサーバーとの接続を確立した後、サーバーを待機するタイムアウト時間は、haproxy がバックエンド Web サーバーに接続するのにかかる時間です。

注記:

ハプロキシ8 つのスケジューリング アルゴリズムがあります

    1. バランス 最小コン最小接続数
    2. バランスラウンドロビン投票
    3. バランスソースクライアントによるとIPハッシュ化のやり方
    4. 静的RR体重に応じて
    5. ウリ要求に応じてURI
    6. url_param要求に応じてURLパラメータ
    7. hdr(名前)によるとウェブ毎回ロックするリクエストヘッダーウェブ聞く
    8. rdp-cookie(名前)によるとクッキー(名前)毎回ロックしてハッシュする通信プロトコル聞く

chroot /usr/share/haproxy \つまり、プログラムの実行時に参照されるルート ディレクトリの場所を変更するため、このコードがある場合は、このディレクトリを作成する必要があります。

ログレベルについて

静的レベル DEBUG

DEBUG レベルは、きめの細かい情報イベントがアプリケーションのデバッグに非常に役立つことを指摘しています。

静的レベル情報

INFO レベルは、メッセージがアプリケーションの実行プロセスを大まかなレベルで強調表示することを示します。

静的レベル WARN

WARN レベルは、潜在的なエラー状況を示します。

静的レベルエラー

ERROR レベルは、エラー イベントが発生しても、システムの継続的な動作には影響しないことを示します。

静的レベル FATAL

FATAL レベルは、重大なエラー イベントが発生するたびにアプリケーションが終了することを示します。

さらに、次の 2 つの特別なログ レベルが利用可能です。

静的レベル ALL

ALL レベルは最低レベルであり、すべてのログ記録を有効にするために使用されます。

静的レベルOFF

OFF レベルは最高レベルであり、すべてのログ記録をオフにするために使用されます。

4: スタート

[root@localhost haproxy-1.5.19]# /etc/init.d/haproxy を起動します

5: Web クラスターをテストする

http://192.168.1.60/test.html

ページを更新してテストします

またはスクリプトを使用してテストする

[root@localhost ~]# for i in $(seq 10); do curl http://192.168.1.60/test.html ;完了

6: ハプロキシログ

Haproxy はデフォルトではログを記録しません。haproxy.conf のグローバル セクションでログ出力を指定するだけでなく、システム ログ構成ファイルも構成する必要があります。

方法 1:

[root@localhost haproxy-1.4.24]# vi /etc/haproxy/haproxy.cfg

グローバル

# ログ 127.0.0.1 local0

# ログ 127.0.0.1 local1 通知

#log ログホスト local0 情報

マックスコン 4096

chroot /usr/share/haproxy

uid 99

ジッド99

デーモン

#デバッグ

#静かな

/dev/log local0 情報をログに記録する

/dev/log local0 通知をログに記録する

[root@localhost haproxy-1.4.24]# /etc/rsyslog.d/haproxy.conf をタッチします

[root@localhost haproxy-1.4.24]# vi /etc/rsyslog.d/haproxy.conf

($programname == 'haproxy' かつ $syslogseverity-text == 'info') の場合、 -/var/log/haproxy/haproxy-info.log

& ~

($programname == 'haproxy' かつ $syslogseverity-text == 'notice') の場合、 -/var/log/haproxy/haproxy-notice.log

& ~

[root@localhost haproxy-1.4.24]# サービスrsyslogを再起動します

[root@localhost ~]#/etc/init.d/haproxyを再起動します

[root@localhost ~]# cat /var/log/haproxy/haproxy-info.log

方法 2:

(1) /etc/haproxy/haproxy.confを編集する

[root@localhost ~]# vi /etc/haproxy/haproxy.cfg

グローバル

ログ 127.0.0.1 ローカル3

#local3 は、/etc/rsyslog.conf の設定に対応するデバイスで、情報のログ レベルはデフォルトでリサイクルされます。

(2) haproxyログファイルの書き込み

[root@localhost ~]# vim /etc/rsyslog.d/haproxy.conf

$ModLoad imudp

$UDPサーバー実行514

ローカル3.* /var/log/haproxy.log

&~

注記:

$ModLoad imudpログを収集するためのプロトコル UDP

$UDPサーバー実行514ログ収集に使用するポート番号を指定します

ローカル3.* /var/log/haproxy.logログの保存場所を指定する

(3) rsyslog のメイン設定ファイルを設定し、リモート ログを有効にします (オプション)

[root@localhost ~]# vim /etc/sysconfig/rsyslog

SYSLOGD_OPTIONS=”-c 2 -r -m 0″

#-c 2 互換モードを使用します。デフォルトは -c 5 です。

#-r リモートログを有効にする

#-m 0 マークのタイムスタンプ。単位は分です。0の場合は機能が無効であることを示します。

(4) haproxyサービスとrsyslogサービスを再起動します。

[root@localhost ~]# systemctl rsyslogを再起動します

[root@localhost ~]# systemctl haproxyを再起動します

(5) Webサイト訪問後のログを確認する

[root@localhost ~]# cat /var/log/haproxy.log

拡張子: プロキシ mysql

mysql 0.0.0.0:3306 をリッスンする

サーバー mysql1 192.168.10.205:3306 チェックポート 3306 maxconn 300