準備:###### 192.168.16.128
192.168.16.129
2 つの仮想マシン。 Nginx
をインストールする Nginx
をインストールする yum ソース ファイルを更新します:
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
Nginx をインストールします:
yum -y nginx
をインストールします 操作コマンド:
systemctl start nginx; #Start Nginx
systemctl stop nginx; #Stop Nginx
高可用性とは何ですか?
高可用性 HA (High Availability) は、分散システム アーキテクチャの設計において考慮する必要がある要素の 1 つであり、通常、システムがサービスを提供できない時間を設計によって削減することを指します。システムが常にサービスを提供できる場合、可用性は 100% ですが、予期しない状況が発生することがあります。したがって、サービスの障害を可能な限り減らすように努めることしかできません。
問題は解決しましたか?
実稼働環境では、Nginx は外部サービスを提供するリバース プロキシとしてよく使用されますが、Nginx はいつかサーバーのダウンタイムなどの障害に遭遇することは避けられません。 Nginx がダウンすると、外部から提供されたすべてのインターフェイスにアクセスできなくなります。
サーバーが 100% 利用可能であることを保証することはできませんが、この悲劇を回避する方法を見つける必要があります。今日、私たちは keepalived を使用して Nginx
を実装します。 高可用性。
デュアルマシンホットバックアップソリューション
このソリューションは、国内企業で最も一般的な高可用性ソリューションです。デュアルサーバーホットバックアップとは、実際には、1台のサーバーがサービスを提供しており、もう1台のサーバーが特定のサービスをスタンバイ状態にしていることを意味します。1台のサーバーが利用できない場合、もう1台のサーバーがバックアップを実行します。彼の場所。
キープアライブとは何ですか?
Keepalived ソフトウェアは、もともと LVS クラスタ システム内の各サービス ノードのステータスを管理および監視するための LVS ロード バランシング ソフトウェアとして設計されましたが、その後、高可用性を実現するために VRRP (Virtual Router Redundancy Protocol) 機能が追加されました。したがって、Keepalived は、LVS ソフトウェアの管理に加えて、他のサービス (Nginx、Haproxy、MySQL など) の高可用性ソリューション ソフトウェアとしても使用できます。
フェイルオーバーメカニズム
Keepalived 高可用性サービス間のフェールオーバー転送は、VRRP を通じて実装されます。
Keepalived サービスが正常に動作している場合、プライマリ マスター ノードは継続的に (マルチキャスト) ハートビート メッセージをバックアップ ノードに送信し、バックアップ バックアップ ノードに自分がまだ生きていることを伝えます。プライマリ マスター ノードに障害が発生すると、ハートビート メッセージを送信できなくなり、バックアップ ノードはハートビート メッセージを送信できなくなるため、ノードはメイン マスター ノードからのハートビートを検出できなくなり、独自の引き継ぎプログラムを呼び出して、メイン マスター ノードの IP リソースとサービスを引き継ぎます。マスター ノードが回復すると、バックアップ ノードは、マスター ノードの障害時に引き継いだ IP リソースとサービスを解放し、元のバックアップの役割に戻ります。
実装プロセス
キープアライブをインストールする
# yum メソッドを使用して直接インストールでき、依存関係が自動的にインストールされます: yum -y インストール keepalived ホスト (192.168.16.128) キープアライブ設定ファイルを変更します。 yum を使用してインストールすると、/etc/keepalived に構成ファイルが生成されます: vi keepalived.conf keepalived.conf: #検出スクリプト vrrp_script chk_http_port { スクリプト "/usr/local/src/check_nginx_pid.sh" #nginx が開始されているかどうかを検出するハートビート実行スクリプト インターバル 2 インターバル 2 体重 2 #weight } #vrrp インスタンス定義セクション vrrp_instance VI_1 { state MASTER # keepalived の役割を指定します。MASTER がメイン、BACKUP がバックアップです Interface ens33 # VRRP 通信用の現在のネットワーク インターフェイス カード (現在の centos ネットワーク カード) ifconfig を使用して特定のネットワーク カードを確認します Virtual_router_id 66 # 仮想ルート番号、マスターおよびスレーブは常に である必要があります 優先度 100 # 優先度。値が大きいほど、リクエストの処理の優先度が高くなります。 advert_int 1 # チェック間隔、デフォルトは 1 秒 (vrrp マルチキャスト サイクル秒) #許可されたアクセス 認証 { auth_type PASS #検証タイプとパスワードを設定します。MASTER と BACKUP は通常の通信に同じパスワードを使用する必要があります 認証パス 1111 } トラックスクリプト { chk_http_port #(通話検出スクリプト) } virtual_ipaddress { 192.168.16.130 192.168.16.130 # 仮想 IP (VIP) を定義します。1 行に 1 つずつ複数設定できます } }VIP は virtual_ipaddress で構成でき、VIP を通じてサービスにオンラインでアクセスできます。
インターフェースはサーバーのネットワークカードに応じて設定する必要があります。通常の表示方法は ip addr
です。 認証構成 バックアップ マシンへの認可アクセスにも同じ構成が必要です
バックアップ マシン (192.168.16.129) のキープアライブ構成ファイルを変更します。
keepalived.conf:
#検出スクリプト
vrrp_script chk_http_port {
スクリプト "/usr/local/src/check_nginx_pid.sh" #nginx が開始されているかどうかを検出するハートビート実行スクリプト
インターバル2 体重 2 #weight
}
#vrrp インスタンス定義セクション
vrrp_instance VI_1 {
State Backup#Keepalived、主にマスター、予備としてのバックアップの役割を指定します
interface ens33 # vrrp 通信用の現在のネットワーク インターフェイス カード (現在の centos ネットワーク カード) ifconfig を使用して特定のネットワーク カードを確認します
virtual_router_id 66 # 仮想ルート番号、マスターとスレーブは常に
である必要があります 優先99 Advert_int 1#間隔を確認します。デフォルトは 1 秒 (VRRP ブロードキャスト サイクル秒)
#許可されたアクセス
認証 {
auth_type PASS #検証タイプとパスワードを設定します。MASTER と BACKUP は通常の通信に同じパスワードを使用する必要があります
認証パス 1111
}
トラックスクリプト {
chk_http_port #(通話検出スクリプト)
}
virtual_ipaddress {
192.168.16.130 192.168.16.130 # 仮想 IP (VIP) を定義します。1 行に 1 つずつ複数設定できます
}
}
検出スクリプト:
#!/bin/bash
#nginxが起動しているかどうかを検出
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then #nginx が起動していない場合は、nginx を起動します systemctl start nginx #Restart nginx
If [ `ps -C nginx --no-header |wc -l` -eq 0 ];then # nginx の再起動に失敗した場合は、keepalived サービスを停止し、VIP 転送を実行します
Killall キープアライブ
fi
fi
スクリプト認可: chmod 775 check_nginx_pid.sh
注: スクリプトは承認されている必要があります。承認されていない場合は、アクセス権限がありません。ここでは、VIP (virtual_ipaddress:192.168.16.130) という 2 つのサーバーを実行します。運用環境では、VIP を介してサービスに直接アクセスします。
nginx の失敗をシミュレートする:
違いとして、2 つのサーバーがデフォルトでアクセスする Nginx html ページを変更します。
まず 192.168.16.130 にアクセスし、VIP 経由でアクセスすると、ページには 192.168.16.128 が表示され、サービスが現在メイン サーバーによって提供されていることを示します。
この時点で、192.168.16.128 メイン サーバーはコマンド
を実行します。 systemctl stop nginx; #stop nginx
vip (192.168.16.130) に再度アクセスすると、ページにまだ 192.168.16.128 が表示されていることがわかります。これはスクリプトの自動再起動です。
ここで 192.168.16.128 サーバーを直接閉じ、ここで VIP (192.168.16.130) にアクセスすると、ページに 192.168.16.129 が表示されることがわかります。この時点で、keepalived は自動的にフェイルオーバーし、エンタープライズ レベルの実稼働環境向けの高可用性ソリューションになります。設立された。
以上がNginx の高可用性を実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。