実稼働環境でのNginx高可用性ソリューションの実装プロセスの分析

実稼働環境でのNginx高可用性ソリューションの実装プロセスの分析

準備:

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; #Nginxを起動します
systemctl stop nginx; #Nginxを停止する

高可用性とは何ですか?

高可用性 (HA) は、分散システム アーキテクチャの設計で考慮する必要がある要素の 1 つです。通常、設計を通じてシステムがサービスを提供できない時間を短縮することを指します。システムが常時サービスを提供できる場合、可用性は 100% ですが、事故は発生します。したがって、サービス障害を可能な限り減らすことしかできません。

問題は解決しましたか?

実稼働環境では、Nginx は外部サービスを提供するリバース プロキシとしてよく使用されますが、ある日、Nginx はサーバーのダウンタイムなどの障害に必ず遭遇します。 Nginx がダウンすると、すべての外部インターフェースにアクセスできなくなります。

サーバーが100%利用可能であることを保証することはできませんが、この悲劇を回避する方法を見つけなければなりません。今日はkeepalivedを使用してNginxを実装します

高可用性。

デュアルマシンホットスタンバイソリューション

このソリューションは、国内企業で最も一般的な高可用性ソリューションです。デュアルマシン ホット スタンバイとは、実際には 1 台のサーバーがサービスを提供している間、もう 1 台のサーバーが特定のサービスのスタンバイ状態にあることを意味します。1 台のサーバーが使用できない場合は、もう 1 台のサーバーが代わりに機能します。

keepalived とは何ですか?

Keepalived ソフトウェアは、もともと LVS クラスタ システム内の各サービス ノードの状態を管理および監視するための LVS 負荷分散ソフトウェアとして設計されました。その後、高可用性を実現するために VRRP (Virtual Router Redundancy Protocol) 機能が追加されました。したがって、Keepalived は、LVS ソフトウェアの管理に加えて、他のサービス (Nginx、Haproxy、MySQL など) の高可用性ソリューション ソフトウェアとしても使用できます。

フェイルオーバーメカニズム

Keepalived 高可用性サービス間のフェイルオーバー転送は、VRRP を通じて実現されます。

Keepalived サービスが正常に動作している場合、メイン マスター ノードはバックアップ ノードにハートビート メッセージを継続的に (マルチキャスト) 送信し、バックアップ ノードに自分がまだ動作していることを伝えます。メイン マスター ノードに障害が発生すると、ハートビート メッセージを送信できなくなり、バックアップ ノードはメイン マスター ノードからのハートビートを検出できなくなります。そのため、バックアップ ノードは独自のテイクオーバー プログラムを呼び出して、メイン マスター ノードの IP リソースとサービスを引き継ぎます。メインのマスター ノードが回復すると、バックアップ ノードはメイン ノードの障害時に引き継いだ IP リソースとサービスを解放し、元のバックアップ ロールに戻ります。

実装プロセス

keepalivedをインストールする

依存関係を自動的にインストールする yum を使用して直接インストールできます。

yum -y キープアライブドをインストールします

ホスト(192.168.16.128)のkeepalived設定ファイルを変更する

yum によってインストールされた設定ファイルは、/etc/keepalived の下に生成されます。

vi keepalived.conf

keepalived.conf:

#検出スクリプト vrrp_script chk_http_port {
 スクリプト "/usr/local/src/check_nginx_pid.sh" # nginx が起動しているかどうかを検出するためのハートビート実行スクリプト interval 2 # (スクリプトの実行間隔、秒単位)
 重量 2 #重量}
#vrrpインスタンス定義セクション vrrp_instance VI_1 {
 state MASTER #keepalived の役割を指定します。MASTER はメイン、BACKUP はバックアップです。interface ens33 #現在 VRRP 通信を行っているネットワーク インターフェース カード (現在は CentOS のネットワーク カード)。ifconfig を使用して、特定のネットワーク カードを表示します。virtual_router_id 66 #仮想ルータ ID。マスターとスレーブは常に同じである必要があります。priority 100 #優先度。値が大きいほど、処理要求を取得する優先度が高くなります。advert_int 1 #チェック間隔。デフォルトは 1 秒 (VRRP マルチキャスト サイクルの秒数)
 #アクセス認証を許可する{
  auth_type PASS #認証タイプとパスワードを設定します。MASTERとBACKUPは通常の通信に同じパスワードを使用する必要があります auth_pass 1111
 }
 トラックスクリプト {
  chk_http_port # (呼び出し検出スクリプト)
 }
 仮想IPアドレス{
  192.168.16.130 # 仮想 IP (VIP) を定義します。1 行に 1 つずつ複数の設定が可能です。
}


virtual_ipaddress で vip を設定し、vip を介してオンラインでサービスにアクセスできます。

インターフェースはサーバーのネットワークカードに応じて設定する必要があります。通常、表示方法はip addrです。

バックアップマシンへの認証設定認可アクセスにも同じ設定が必要です

スタンバイマシン(192.168.16.129)のkeepalived設定ファイルを変更します。

keepalived.conf:

#検出スクリプト vrrp_script chk_http_port {
 スクリプト "/usr/local/src/check_nginx_pid.sh" # nginx が起動しているかどうかを検出するためのハートビート実行スクリプト 間隔 2 # (検出スクリプトの実行間隔)
 重量 2 #重量}
#vrrpインスタンス定義セクション vrrp_instance VI_1 {
 state BACKUP #keepalived の役割を指定します。MASTER はメイン、BACKUP はバックアップです。 interface ens33 #現在 VRRP 通信を行っているネットワーク インターフェイス カード (現在は CentOS のネットワーク カード)。ifconfig を使用して、特定のネットワーク カードを表示します。 virtual_router_id 66 #仮想ルータ ID。マスターとスレーブは常に同じである必要があります。 priority 99 #優先度。値が大きいほど、処理要求を取得する優先度が高くなります。 advert_int 1 #チェック間隔。デフォルトは 1 秒 (VRRP マルチキャスト サイクルの秒数)
 #アクセス認証を許可する{
  auth_type PASS #認証タイプとパスワードを設定します。MASTERとBACKUPは通常の通信に同じパスワードを使用する必要があります auth_pass 1111
 }
 トラックスクリプト {
  chk_http_port # (呼び出し検出スクリプト)
 }
 仮想IPアドレス{
  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 #nginxを再起動します
  if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginxの再起動に失敗した場合は、keepalivedサービスを停止し、VIPを転送します killall keepalived     
  フィ
フィ

スクリプトの承認: chmod 775 check_nginx_pid.sh

注: スクリプトは承認されている必要があります。承認されていない場合は、アクセスする権限がありません。ここでは、実行するサーバーが 2 つあります。VIP VIP(virtual_ipaddress:192.168.16.130),実稼働環境では VIP を介してサービスに直接アクセスします。

nginx の障害をシミュレートする:

区別するために、2 つのサーバーがデフォルトでアクセスする Nginx html ページを変更します。

まず192.168.16.130にアクセスし、VIP 経由でアクセスします。ページには192.168.16.128表示され、現在サービスがメイン サーバーによって提供されていることを意味します。

このとき、 192.168.16.128メイン サーバーは次のコマンドを実行します。

systemctl stop nginx; #nginxを停止する

再度 vip ( 192.168.16.130 ) にアクセスすると、ページにはまだ192.168.16.128と表示されていることがわかります。これはスクリプトによる自動再起動です。

ここで、 192.168.16.128サーバーを直接シャットダウンし、ここで vip ( 192.168.16.130 ) にアクセスします。これで、ページに192.168.16.129表示されることがわかります。この時点で、 keepalived自動的にフェイルオーバーし、エンタープライズ レベルの本番環境向けの高可用性ソリューションが構築されます。

keepalivedには、メールリマインダーなど、他にも多くの機能があります。ここでは操作しません。公式 Web サイトにアクセスしてドキュメントを読むことができます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginx1.21.6 実稼働環境のアップグレード手順

<<:  MySQL エラー コード 1862 の解決方法: パスワードの有効期限が切れています

>>:  Reactのヒントはフックの依存関係の問題を解消する方法を教えます

推薦する

CentOS7でPHPスケジュールタスクを実行する方法

序文この記事は主に CentOS7 で PHP スケジュールタスクを実行することに関する関連コンテン...

MySQL 最適化接続最適化

記事「MySQL の最適化: キャッシュの最適化」では、システムによってコンパイルされた変数値、また...

CSS scroll-snap スクロールイベント停止と要素位置検出の実装

1. スクロールスナップはフロントエンド開発者にとって必須のスキルですCSS スクロール スナップは...

require/import キーワードを使用して v-for ループでローカル画像をインポートするいくつかの方法

目次問題の説明方法 1 (バックエンドが画像 URL を返す)方法 2 (フロントエンドで requ...

mysqlはストアドプロシージャを使用してツリーノード取得メソッドを実装します。

図に示すように: テーブルデータこのようなツリーの場合、「Gao Yinrui」の下のすべてのノード...

vue v-for ループ オブジェクトの属性

目次1. ループオブジェクト内の値2. ループオブジェクト3. キーと値のループ1. ループオブジェ...

WeChat ミニプログラム 宝くじ番号ジェネレーター

この記事では、WeChatアプレットの宝くじ番号ジェネレータの具体的なコードを参考までに紹介します。...

MySQL 5.7 インストール MySQL サービスを開始できませんが、サービスはエラーを報告しません

MySQL 5.7 をインストールするには 2 つの方法があります。1 つはインストーラをダウンロー...

Vue プロジェクトを使用して複数のプロキシを構成する際の注意事項

Vue プロジェクトの開発プロセスでは、ローカル デバッグの利便性のため、通常、vue.config...

Linux が Sudo 権限昇格の脆弱性を公開、どのユーザーでも root コマンドを実行可能

Linux で最も一般的に使用される重要なユーティリティの 1 つである Sudo は、ほぼすべての...

珍しいけれど役に立つJSテクニックをいくつか紹介します

序文プログラミング言語には通常、さまざまな隠されたトリックが含まれており、これらのトリックを上手に使...

ページの下部にHTMLフッターを配置する簡単な方法

要件:ページ コンテンツが短く、ブラウザーの高さをサポートできない場合でも、フッターをウィンドウの下...

XHTML CSS ページをプリンタ ページに変換する

以前は、Web ページのプリンタ対応バージョンを作成するには、印刷したときに見栄えがよくなるようにレ...

Vue3のいくつかの利点についての簡単な説明

目次1. ソースコード1.1 モノレポ1.2 タイプスクリプト2. パフォーマンス2.1 ソースコー...

この記事はPReact10.5.13のソースコードを理解するのに役立ちます

目次render.js 部分create-context.js 部分差分部分Reactのソースコード...