1. コンポーネントと実装機能Keepalived: Haproxy サービスの高可用性を実現し、デュアルアクティブ モデル構成を採用します。 Haproxy: Nginx の負荷分散と読み取り/書き込み分離を実装します。 Nginx: HTTP リクエストの高速処理を実現します。 2. アーキテクチャ設計図3. Keepalived のデプロイメントKeepalived は両方のノードにインストールする必要があります。コマンドは次のとおりです。 $ yum -y キープアライブドをインストール 172.16.25.109ノードのkeepalived.confファイルの設定を変更します。コマンドは次のとおりです。 $ vim /etc/keepalived/keepalived.conf 変更された内容は次のとおりです。 ! keepalived の設定ファイル グローバル定義 { 通知メール{ ルート@ローカルホスト } 通知メール送信元 [email protected] SMTP_接続タイムアウト 3 SMTPサーバー 127.0.0.1 ルータID LVS_DEVEL } vrrp_script chk_maintaince_down { スクリプト "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" 間隔1 重量2 } vrrp_script chk_haproxy { スクリプト「killall -0 haproxy」 間隔1 重量2 } vrrp_インスタンス VI_1 { インターフェース eth0 状態マスター 優先度100 仮想ルータID 125 garp_master_delay 1 認証 認証タイプ PASS 認証パスワード 1e3459f77aba4ded } トラックインターフェース{ eth0 } 仮想IPアドレス{ 172.16.25.10/16 dev eth0 ラベル eth0:0 } トラックスクリプト { chk_haproxy } 通知マスター「/etc/keepalived/notify.sh マスター 172.16.25.10」 通知バックアップ「/etc/keepalived/notify.sh 172.16.25.10 をバックアップ」 通知障害「/etc/keepalived/notify.sh 障害 172.16.25.10」 } vrrp_インスタンス VI_2 { インターフェース eth0 状態 バックアップ 優先度99 仮想ルータID 126 garp_master_delay 1 認証 認証タイプ PASS 認証パスワード 7615c4b7f518cede } トラックインターフェース{ eth0 } 仮想IPアドレス{ 172.16.25.11/16 dev eth0 ラベル eth0:1 } トラックスクリプト { chk_haproxy メンテナンスダウン } 通知マスター「/etc/keepalived/notify.sh マスター 172.16.25.11」 通知バックアップ「/etc/keepalived/notify.sh 172.16.25.11 をバックアップ」 通知障害「/etc/keepalived/notify.sh 障害 172.16.25.11」 } 同様に、172.16.25.110 ノードの keepalived.conf 構成を次の内容に変更します。 ! keepalived の設定ファイル グローバル定義 { 通知メール{ ルート@ローカルホスト } 通知メール送信元 [email protected] SMTP_接続タイムアウト 3 SMTPサーバー 127.0.0.1 ルータID LVS_DEVEL } vrrp_script chk_maintaince_down { スクリプト "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" 間隔1 重量2 } vrrp_script chk_haproxy { スクリプト「killall -0 haproxy」 間隔1 重量2 } vrrp_インスタンス VI_1 { インターフェース eth0 状態 バックアップ 優先度99 仮想ルータID 125 garp_master_delay 1 認証 認証タイプ PASS 認証パスワード 1e3459f77aba4ded } トラックインターフェース{ eth0 } 仮想IPアドレス{ 172.16.25.10/16 dev eth0 ラベル eth0:0 } トラックスクリプト { chk_haproxy メンテナンスダウン } 通知マスター「/etc/keepalived/notify.sh マスター 172.16.25.10」 通知バックアップ「/etc/keepalived/notify.sh 172.16.25.10 をバックアップ」 通知障害「/etc/keepalived/notify.sh 障害 172.16.25.10」 } vrrp_インスタンス VI_2 { インターフェース eth0 状態マスター 優先度100 仮想ルータID 126 garp_master_delay 1 認証 認証タイプ PASS 認証パスワード 7615c4b7f518cede } トラックインターフェース{ eth0 } 仮想IPアドレス{ 172.16.25.11/16 dev eth0 ラベル eth0:1 } トラックスクリプト { chk_haproxy } 通知マスター「/etc/keepalived/notify.sh マスター 172.16.25.11」 通知バックアップ「/etc/keepalived/notify.sh 172.16.25.11 をバックアップ」 通知障害「/etc/keepalived/notify.sh 障害 172.16.25.11」 } # vi /etc/keepalived/notify.sh #!/bin/bash # 著者: Jason.Yu <[email protected]> # 説明: 通知スクリプトの例 # 連絡先='root@localhost' 通知() { mailsubject="`hostname` は $1:$2 浮動小数点数になります" mailbody="`date '+%F %H:%M:%S'`: vrrp 遷移、`hostname` が $1 に変更されました" echo $mailbody | mail -s "$mailsubject" $contact } ケース「$1」 マスター) マスターに通知 $2 /etc/rc.d/init.d/haproxy を再起動します 終了 0 ;; バックアップ) 通知バックアップ $2 # ノードがバックアップ状態に切り替わるときに、chk_maintaince と chk_haproxy が haproxy サービスを複数回操作するのを防ぐために、haproxy サービスを意図的に停止する必要はありません。 終了 0 ;; 故障) 障害を通知 $2 # 上記と同じ exit 0 ;; *) echo '使用法: `basename $0` {master|backup|fault}' 出口1 ;; エサック 両方のノードで keepalived 起動コマンドを実行します。コマンドは次のとおりです。 $ サービスキープアライブ開始 4. Haproxyの展開HAProxy は両方のノードにインストールする必要があります。コマンドは次のとおりです。 $ yum -y haproxyをインストール 172.16.25.109 ノードと 172.16.25.110 ノードの haproxy.cfg ファイル構成を変更します (2 つのノードの構成ファイルは一致しています)。コマンドは次のとおりです。 $ vim /etc/haproxy/haproxy.cfg 設定ファイルの内容は次のとおりです。 グローバル ログ 127.0.0.1 ローカル2 chroot /var/lib/haproxy pidファイル /var/run/haproxy.pid マックスコン 4000 ユーザー haproxy グループ ハプロキシ daemon # バックグラウンド プログラムとして実行します。 デフォルト mode http # レイヤー 7 フィルタリングを実行するには HTTP モードを選択します。 ロググローバル オプション httplog # より豊富なログ出力を取得できます。 オプション dontlognull オプション http-server-close # サーバーは HTTP 接続機能を閉じることができます。 option forwardfor except 127.0.0.0/8 # クライアントの IP アドレスをサーバーに渡し、それを「X-Forward_for」ヘッダーに書き込みます。 オプション再ディスパッチ 再試行 3 タイムアウト http-request 10 秒 タイムアウトキュー 1分 タイムアウト接続10秒 タイムアウトクライアント 1分 タイムアウトサーバー 1分 タイムアウト http-keep-alive 10 秒 タイムアウトチェック 10秒 マックスコン 30000 統計を聞く モード http bind 0.0.0.0:1080 # 統計ページはポート 1080 にバインドされます。 stats enable # 統計ページ機能を有効にします。 stats hide-version #Haproxy のバージョン番号を非表示にします。 stats uri /haproxyadmin?stats #統計ページのアクセス uri をカスタマイズします。 統計レルム Haproxy\ 統計 #統計ページでのパスワード検証のためのプロンプト情報。 stats auth admin:admin # 統計ページのログイン認証を有効にします。 stats admin if TRUE # ログインしたユーザーが検証に合格すると、管理機能が付与されます。 フロントエンド http-in バインド *:80 モード http ロググローバル オプション httpclose オプションログアサップ オプション dontlognull キャプチャリクエストヘッダーホスト長さ20 キャプチャリクエストヘッダーReferer長さ60 acl url_static path_beg -i /static /p_w_picpaths /javascript /stylesheets acl url_static path_end -i .jpg .jpeg .gif .png .css .js .html use_backend static_servers if url_static # ACL ルールを満たすリクエストはバックエンドの静的サーバーに転送されます default_backend dynamic_servers # リクエストはデフォルトでバックエンドの動的サーバーに転送されます backend static_servers バランスラウンドロビン server imgsrv1 192.168.0.25:80 check maxconn 6000 # 静的サーバー。複数のサーバーを設定でき、重みを設定できます。 バックエンド dynamic_servers balance source # 動的リクエストの場合、ソース スケジューリング アルゴリズムを使用して、ある程度のセッション永続性を実現できますが、セッション永続性を実現するには Cookie バインディングを使用するのが最適です。server websrv1 192.168.0.35:80 check maxconn 1000 # 動的サーバーは複数のサーバーで構成でき、重みを設定できます。 2 つのノードは次のコマンドでサービスを開始します。 $ サービス haproxy 開始 5. Nginxのデプロイメントyum -y groupinstall "開発ツール" yum -y groupinstall “サーバープラットフォーム開発” yum インストール gcc openssl-devel pcre-devel zlib-devel グループ追加 -r nginx ユーザー追加 -r -g nginx -s /sbin/nologin -M nginx tar xf nginx-1.4.7.tar.gz nginx-1.4.7をインストールします mkdir -pv /var/tmp/nginx ./configure \ --prefix=/usr \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --user=nginx \ --group=nginx \ --http_ssl_module \ で始まる --http_flv_module \ で始まる --with-http_stub_status_module \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/tmp/nginx/client/ \ --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ --http-scgi-temp-path=/var/tmp/nginx/scgi \ --pcre 付き 作成 && インストール サービススクリプトを構成する vi /etc/init.d/nginx # サービススクリプトの設定#!/bin/sh # # nginx - このスクリプトはnginxデーモンを起動および停止します # # chkconfig: -85 15 # 説明: Nginx は HTTP(S) サーバーであり、HTTP(S) リバースです \ # プロキシと IMAP/POP3 プロキシ サーバー # プロセス名: nginx # 設定: /etc/nginx/nginx.conf # 設定: /etc/sysconfig/nginx # pidファイル: /var/run/nginx.pid # ソース関数ライブラリ。 . /etc/rc.d/init.d/functions # ソースネットワーク構成。 . /etc/sysconfig/ネットワーク # ネットワークが稼働していることを確認します。 [ "$NETWORKING" = "no" ] && 終了 0 nginx="/usr/sbin/nginx" prog=$(ベース名 $nginx) NGINX_CONF_FILE="/etc/nginx/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx ロックファイル=/var/lock/subsys/nginx ディレクトリを作る() { # 必要なディレクトリを作成する user=`nginx -V 2>&1 | grep "configure 引数:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` options=`$nginx -V 2>&1 | grep 'configure 引数:'` オプトイン$options; を行う if [ `echo $opt | grep '.*-temp-path'` ]; then 値=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "作成中" $value mkdir -p $value && chown -R $user $value フィ フィ 終わり } 始める() { [ -x $nginx ] || 終了 5 [ -f $NGINX_CONF_FILE ] || 終了 6 ディレクトリの作成 echo -n $"$prog を開始しています: " デーモン $nginx -c $NGINX_CONF_FILE 戻り値=$? エコー [ $retval -eq 0 ] && $lockfile をタッチ $retvalを返す } 停止() { echo -n $"$prog を停止しています: " プロセスを終了する $prog -QUIT 戻り値=$? エコー [ $retval -eq 0 ] && rm -f $lockfile $retvalを返す } 再起動() { configtest || $を返しますか? 停止 睡眠1 始める } リロード() { configtest || $を返しますか? echo -n $"$prog を再ロードしています: " nginx を killproc する -HUP RETVAL=$? エコー } 強制リロード() { 再起動 } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { ステータス $prog } rh_status_q() { rh_status >/dev/null 2>&1 } ケース「$1」 始める) rh_status_q && 終了 0 1ドル ;; 停止) rh_status_q || 終了 0 1ドル ;; 再起動|構成テスト) 1ドル ;; リロード rh_status_q || 終了 7 1ドル ;; 強制リロード 強制リロード ;; 状態) rh_ステータス ;; condrestart|再起動を試みる) rh_status_q || 終了 0 ;; *) echo $"使用法: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" 出口2 エサック chmod +x /etc/init.d/nginx # サービス スクリプトの実行権限を復元します vi /etc/nginx/nginx.conf # メイン構成ファイルを編集します worker_processes 2; エラーログ /var/log/nginx/nginx.error.log; pid /var/run/nginx.pid; イベント { ワーカー接続 1024; } http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; ファイル送信オン; キープアライブタイムアウト65; サーバー{ 聞く 80; サーバー名 xxrenzhe.lnmmp.com; access_log /var/log/nginx/nginx.access.log メイン; 位置 / { ルート /www/lnmmp.com; インデックス index.php index.html index.htm; } エラーページ 404 /404.html; エラーページ 500 502 503 504 /50x.html; 場所 = /50x.html { ルート /www/lnmmp.com; } 場所 ~ \.php$ { ルート /www/lnmmp.com; 127.0.0.1:9000; をデフォルトとして設定します。 fastcgi_index インデックス.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_params を含めます。 } } } vi /etc/nginx/fastcgi_params # fastcgi パラメータ ファイルを編集します fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param QUERY_STRING $クエリ文字列; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param リクエストURI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; サービスを開始する service nginx configtest #サービスを開始する前に設定ファイルが正しいことを確認してください service nginx start ps -ef |grep nginx # nginxプロセス、特にワーカープロセスがworker_processes値と一致しているかどうかを確認します ss -antupl |grep 80 # サービスポートが開始されているかどうかを確認します 6. アクセス検証Haproxy 統計ページ テスト 動的および静的分離テスト 高可用性テスト これで、Nginx 高可用性クラスター構築 (Keepalived+Haproxy+Nginx) の紹介は終了です。 Nginx 高可用性クラスタ構築 (Keepalived+Haproxy+Nginx) に関する記事はこれで終了です。Nginx 高可用性クラスタに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: デザインストーリー: ナンバープレートを覚えられない警備員
>>: MySQL例外に対する一般的な解決策をいくつか分析する
環境: [root@centos7 ~]# uname -r 3.10.0-514.el7.x86_...
時間は本当に存在するのでしょうか?時間は人間が考え出した概念に過ぎず、物事の変化を測る基準に過ぎない...
目次1. 成果を達成する2. バックエンドの実装2.1 エンティティクラス2.2 データベース内のデ...
この記事では、MySQL の ROUND 関数を使用した丸め操作の落とし穴を例を使って説明します。ご...
1. 説明MySQLでは、テーブル内の行の総数を取得する必要がある場合、通常は次の文を使用します。 ...
導入いつものように、シーンから始めましょう〜インタビュアー:「トランザクションの4つの特性をご存知で...
目次使用されるAPI簡単な例人.ts親コンポーネントサブコンポーネント効果要約する使用されるAPI ...
Web デザインは、インターネットの出現後に誕生した新興の周辺産業です。 Web ページは店頭のよう...
事前に言っておくDocker を使用すると非常にシンプルなデプロイメント環境を実現できることは誰もが...
async_hooks モジュールは、Node.js バージョン 8.0.0 に正式に追加された実験...
1. 背景通常、外部サービスを提供する必要がある Docker コンテナの場合、起動時に -p コマ...
1. 表示効果: 2、HTML構造 <div class="プロセスリスト-lpu...
オブジェクト上にマウスを移動したときにコンテンツ(タイトル属性の内容)を折り返す方法、HTML タイ...
序文MySQL スロー クエリ ログは、日常業務でよく遭遇する機能です。MySQL スロー クエリ ...
1. まず、サーバーの mysql にアクセスして権限を変更します。 GRANT オプション付きで、...