序文負荷分散には nginx を使用します。アーキテクチャのフロントエンドまたは中間層として、トラフィックが増加すると、負荷分散のための高可用性アーキテクチャを構築する必要があります。keepalived を使用して、単一ポイントのリスクを解決します。nginx がダウンすると、すぐにバックアップ サーバーに切り替えることができます。 VMware ネットワーク構成で発生する可能性のある問題の解決策
インストールノードの展開
ウェブ構成web1はPython httpサーバーを起動します vim インデックス.html <html> <本文> <h1>Web サーバー 1</h1> </本文> </html> nohup python -m SimpleHTTPServer 8080 > running.log 2>&1 & web2はPython httpサーバーを起動します vim インデックス.html <html> <本文> <h1>Web サーバー 2</h1> </本文> </html> nohup python -m SimpleHTTPServer 8080 > running.log 2>&1 & ファイアウォールをオフにする ファイアウォール-cmd --state systemctl 停止 ファイアウォールd.service systemctl は、firewalld.service を無効にします。 ブラウザのアクセスは正常になり、ページにはWeb Svr 1と2が表示されます。 Centos1と2にNginxをインストールするまず、Alibaba Cloudソースを設定します mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo 依存パッケージをインストールする yum -y gccをインストールします yum インストール -y pcre pcre-devel yum インストール -y zlib zlib-devel yum インストール -y openssl openssl-devel nginxをダウンロードして解凍します http://nginx.org/download/nginx-1.8.0.tar.gz をダウンロードしてください tar -zxvf nginx-1.8.0.tar.gz nginxをインストールする nginx-1.8.0をインストールします ./configure --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_ssl_module 作る インストールする /usr/local/nginx/sbin/ をコピーします。 # 設定ファイルを確認する ./nginx -t # nginxを起動する ./nginx nginxアクセスを開く ファイアウォールコマンド --zone=public --add-port=80/tcp --permanent systemctl で、firewalld.service を再起動します。 このとき、130 と 131 にアクセスすると nginx のホームページが表示されます。 nginx 起動ファイルを作成するinit.d フォルダーに nginx 起動ファイルを作成する必要があります。 この方法では、サーバーが init プロセスを再起動するたびに、Nginx が自動的に起動されます。 /etc/init.d/ をコピーします vim nginx #!/bin/sh # # nginx - このスクリプトはnginxデーモンを起動および停止します # # chkconfig: -85 15 # 説明: Nginx は HTTP(S) サーバーであり、HTTP(S) リバースです \ # プロキシと IMAP/POP3 プロキシ サーバー # プロセス名: nginx # 設定: /etc/nginx/nginx.conf # pidファイル: /var/run/nginx.pid # ユーザー: nginx # ソース関数ライブラリ。 . /etc/rc.d/init.d/functions # ソースネットワーク構成。 . /etc/sysconfig/ネットワーク # ネットワークが稼働していることを確認します。 [ "$NETWORKING" = "no" ] && 終了 0 nginx="/usr/local/nginx/sbin/nginx" prog=$(ベース名 $nginx) NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" ロックファイル=/var/run/nginx.lock 始める() { [ -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 || $を返しますか? 停止 始める } リロード() { 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 エサック 設定ファイルを確認し、次のコマンドを順番に入力します。 chkconfig --add nginx chkconfig --level 345 nginx オン このファイルに実行権限を追加する chmod +x nginx ls 機能 netconsole ネットワーク nginx README Nginxサービスを開始する サービス nginx 開始 サービス nginx ステータス サービス nginx 再読み込み Nginx リバース プロキシ、負荷分散 (centos_1) nginx.conf設定ファイルを変更し、コメントされたコードを削除します。 /usr/local/nginx/conf/ をコピーします。 nginx.conf をコピーして、 nginx.conf.bak を開きます。 egrep -v '^#' nginx.conf.bak egrep -v '^#|^[ ]*#' nginx.conf.bak egrep -v '^#|^[ ]*#|^$' nginx.conf.bak egrep -v '^#|^[ ]*#|^$' nginx.conf.bak >> nginx.conf nginx.conf を cat する 出力は次のようになります ワーカープロセス 1; イベント { ワーカー接続 1024; } http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; ファイル送信オン; キープアライブタイムアウト65; サーバー{ 聞く 80; server_name ローカルホスト; 位置 / { ルートhtml; インデックス index.html index.htm; } エラーページ 500 502 503 504 /50x.html; 場所 = /50x.html { ルートhtml; } } } nginx設定を再読み込み # 設定ファイルが正常かどうかをテストします。../sbin/nginx -t # nginx 設定を再読み込みします。../sbin/nginx -s reload nginxリバースプロキシと負荷分散を構成する ワーカープロセス 1; イベント { ワーカー接続 1024; } http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; ファイル送信オン; キープアライブタイムアウト65; # websvr サーバー クラスター (負荷分散プールとも呼ばれます) アップストリーム websvr { サーバー 192.168.211.128:8001 重み=1; サーバー 192.168.211.129:8001 重み=2; } サーバー{ 聞く 80; # IP アドレスまたはドメイン名を指定するために使用されます。複数の設定はスペースで区切られます。server_name 192.168.211.130; 位置 / { # すべてのリクエストを websvr クラスターに送信して処理します。proxy_pass http://websvr; } エラーページ 500 502 503 504 /50x.html; 場所 = /50x.html { ルートhtml; } } } nginxを再起動します sbin/nginx -s リロード websvr 名は、これらのサーバーの意味を示すようにカスタマイズできます。つまり、負荷分散を実現するには、 これで、130 にアクセスすると、Web サーバー 1 と Web サーバー 2 がページ上で切り替わります。サーバーは重みに基づいて選択されます。重みの値が大きいほど、重みが高くなります。つまり、ページを繰り返し更新すると、Web サーバー 2 は平均 2 回表示され、Web サーバー 1 は 1 回表示されます。 今のところ、高可用性は実現できていません。この方法では Web サービスを実行でき、単一障害点も処理できますが、nginx サービスに障害が発生すると、基本的にシステム全体にアクセスできなくなるため、これを確保するには複数の Nginx サーバーが必要になります。 複数の Nginx が連携して動作する、Nginx の高可用性 [デュアル マシン マスター スレーブ モード] ワーカープロセス 1; イベント { ワーカー接続 1024; } http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; ファイル送信オン; キープアライブタイムアウト65; アップストリーム websvr { サーバー 192.168.211.128:8001 重み=1; サーバー 192.168.211.129:8001 重み=2; } サーバー{ 聞く 80; サーバー名 192.168.211.131; 位置 / { proxy_pass http://websvr; } エラーページ 500 502 503 504 /50x.html; 場所 = /50x.html { ルートhtml; } } } # nginxをリロード sbin/nginx -s リロード これで、http://192.168.211.130/ にアクセスしても、http://192.168.211.131/ と同様の結果が得られます。 これら 2 つの Nginx サーバーの IP は異なるので、これら 2 つの nginx サーバーを連携させるにはどうすればよいでしょうか?これには keepalived の使用が必要です。 ソフトウェアをインストールし、2つのCentOSを同時にインストールする yum インストール keepalived pcre-devel -y keepalived を設定する 両方にバックアップ cp /etc/keepalived/keepalived.conf keepalived.conf.bak [root@localhost keepalived]# cat keepalived.conf ! keepalived の設定ファイル グローバル定義 { script_user ルート スクリプトセキュリティを有効にする } vrrp_script chk_nginx { # nginx サービスが正常に実行されているかどうかを検出するための監視スクリプトを指定します。スクリプト "/etc/keepalived/chk_nginx.sh" #監視時間を指定して、10秒ごとに間隔10を実行します # 優先度はスクリプトの結果によって変わります。検出に失敗した場合 (スクリプトがゼロ以外の値を返す場合)、優先度は -5 になります。 # 重量 -5 # # 検出は、2 回連続して失敗した場合にのみ、真の失敗とみなされます。優先度は重みによって減少します(1~255の間) # 秋 2 # 検出が一度成功すると、成功したとみなされます。ただし、優先度は変わりません。# 1 上昇 } vrrp_インスタンス VI_1 { #keepalivedロールを指定し、ホストをMASTERに、スタンバイをBACKUPに設定します 状態 バックアップ # HA 監視ネットワークのインターフェースを指定します。 CentOS7はip addrを使用してインターフェースens33を取得します # プライマリルータとバックアップルータの virtual_router_id は同じである必要があります。2 番目の IP アドレス グループに設定できます: 1 から 255 までの範囲でなければなりません 仮想ルータID 51 # 優先度の値。同じ vrrp_instance では、MASTRE は BAUCKUP より高くなければなりません。MASTER が回復すると、BACKUP が自動的に優先度 90 を引き継ぎます。 # VRRPブロードキャストサイクル(秒単位)。ブロードキャストが検出されない場合、サービスはダウンしていると見なされ、プライマリとバックアップadvert_int 1 # 認証タイプとパスワードを設定します。マスターとスレーブは同じ認証を持っている必要があります { # vrrp 認証タイプを設定します。主なタイプは PASS と AH の 2 つです。auth_type PASS # 通常の通信では、暗号化されたパスワードは両方のサーバーで同じである必要があります auth_pass 1111 } トラックスクリプト { # vrrp_script セクションで指定された名前の VRRP スクリプトを参照して、監視対象サービスを実行します。定期的に実行して優先度を変更する chk_nginx } 仮想IPアドレス{ # VRRP HA仮想アドレスVIPが複数ある場合は、192.168.211.140を続けて入力します。 } } 構成ファイルをノード scp /etc/keepalived/keppalived.conf 192.168.211.131:/etc/keepalived/keepalived.conf ノード 状態 バックアップ 優先度90 メインの keepalived 構成監視スクリプト chk_nginx.sh keepalivedで実行するスクリプトを作成する vi /etc/keepalived/chk_nginx.sh #!/bin/bash # 変数counterに値を割り当てるnginxプロセスがあるかどうかを確認します カウンター=`ps -C nginx --no-header |wc -l` # プロセスがない場合、値は0になります [ $counter -eq 0 ]の場合; # nginxを起動してみる echo "Keepalived 情報: nginx を起動してみてください" >> /var/log/messages nginx のディレクトリ 睡眠3 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then # システムメッセージを出力します echo "Keepalived Info: Unable to start nginx" >> /var/log/messages # まだ開始されていない場合は、keepalived プロセスを終了します # killall keepalived # または /etc/init.d/keepalived stop を停止します 出口1 それ以外 echo "Keepalived 情報: Nginx サービスが復元されました" >> /var/log/messages 終了 0 フィ それ以外 # ステータスは正常です echo "Keepalived 情報: Nginx 検出は正常です" >> /var/log/messages; 終了 0 フィ 次に実行権限を付与してテストします chmod +x chk_nginx.sh ./chk_nginx.sh 両側でkeepalivedを再起動する systemctl を再起動する keepalived systemctl ステータス キープアライブ このとき、 tail -f /var/log/メッセージ # nginxがKeepalived情報をオフにした場合: nginxを起動してみてください Keepalived 情報: Nginx サービスが復旧しました # nginx は Keepalived を正常に開きます 情報: Nginx の検出は正常です nginx は正常に検出した場合は 0 を返し、検出しなかった場合は 1 を返します。ただし、keepalived は転送を実現するためにこの戻り値を検出するのではなく、keepalived サービスが存在するかどうかを検出してローカル VIP を解放し、最終的に仮想 IP を別のサーバーに転送するようです。 参考文献 https://www.jianshu.com/p/7e8e61d34960 Nginx+KeepAlived クラスタ デュアルアクティブ アーキテクチャの VMware 展開に関するこの記事はこれで終わりです。Nginx+KeepAlived クラスタに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: ウェブデザインにおけるカラーマッチングの優れた例30選
>>: ORM モデル フレームワークを使用して MySQL データベースを操作する方法
注: このデモはミニプログラム環境でテストされており、他の h5 および pc Web ページにも適...
目次レイアウト部分: <div id="アプリ"> <p>...
目次原理ソースコード分析委任されたイベントバインディングすべてのサポートされているイベントを聴くネイ...
多くの場合、画像をコンテナのサイズに合わせて調整する必要があります。 1. imgタグ方式幅と高さを...
フォーム内の読み取り専用および無効な属性1. 読み取り専用:サーバーは、ユーザーがデータを変更するこ...
【序文】 Vue と React の CSS モジュール ソリューションはどちらも、実装にローダーに...
<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案、W...
NTP は、ネットワーク上で時間を同期するための TCP/IP プロトコルです。通常、クライアントは...
目次概要Vuex の 4 つの主要オブジェクト状態の使用突然変異の使用ゲッターの使用アクションの使用...
システムヘルプを表示help contents mysql> ヘルプコンテンツ; ヘルプ カテ...
目次1. 静的実装方法: 2. 第2のシミュレーション動的方法3. 3番目の動的データ方式4. 動的...
質問最近、以下に示すように、テキストストローク効果を実現するという要件に遭遇しました。 解決策1まず...
要素の両端を揃える配置レイアウトは、実際の開発のいたるところで見られます。これは、フレックスレイアウ...
1. Eコマースアイコン2. アイコンスイーツ2 3. 携帯電話アイコンパック4. 旗アイコンセット...
私のコンピューターのグラフィック カードは Nvidia グラフィック カードです。再起動後、画面に...