Nginx+Keepalived でデュアルマシン マスターとバックアップを実装する方法

Nginx+Keepalived でデュアルマシン マスターとバックアップを実装する方法

序文

まず、高性能サーバーの高可用性またはホットスタンバイソリューションである Keepalived を紹介します。これはもともと LVS 負荷分散ソフトウェア用に設計されました。Keepalived は主にサーバーの単一障害点を防ぐために使用されます。Nginx との連携により、Web サーバーの高可用性を実現できます。

Keepalived は VRRP プロトコルに基づいています。VRRP は Virtual Router Redundancy Protocol の略です。VRRP プロトコルは、2 台以上のルータ デバイスを 1 台のデバイスに仮想化し、外部に仮想ルータ IP (1 つ以上) を提供します。

VRRP の目的は、静的ルーティングの単一点障害問題を解決することです。これにより、個々のノードに障害が発生しても、ネットワーク全体が中断することなく動作できるようになります。

次に、nginx keepalived 高可用性ソリューションの展開とインストールについて紹介します。

環境の準備

両方のホストで次の圧縮ファイルを準備します。

  • キープアライブド-2.0.20.tar.gz
  • nginx-1.16.1.tar.gz

仮想IP

リアルIP

nginx ポート

マスタースレーブ

192.168.124.20

192.168.124.13

80

マスター

192.168.124.20

192.168.124.14

80

バックアップ

nginxをインストールする

新しいユーザーを作成します:

ユーザー追加 天燕

インストール ディレクトリを決定します。私のインストール ディレクトリは、/home/tianyan/tianyan_soft/nginx.install です。

このディレクトリに nginx と keepalived をインストールするための 2 つの新しいディレクトリを作成し、2 つの圧縮パッケージを解凍します。

インストールコマンドを実行します。

./configure --prefix=/home/tianyan/tianyan_soft/nginx.install \
--sbin-path=/home/tianyan/tianyan_soft/nginx.install/sbin/nginx --conf-path=/home/tianyan/tianyan_soft/nginx.install/conf/nginx.conf \
--error-log-path=/home/tianyan/tianyan_soft/nginx.install/error.log \
--http-log-path=/home/tianyan/tianyan_soft/nginx.install/access.log \
--pid-path=/home/tianyan/tianyan_soft/nginx.install/nginx.pid \
--lock-path=/home/tianyan/tianyan_soft/nginx.install/nginx.lock \
--user=tianyan --group=tianyan \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http_ssl_module \ で始まる
--http_realip_module \ で始まる
--スレッドあり\
--pcre \ で
--http-client-body-temp-path=/home/tianyan/tianyan_soft/nginx.install/client/ \
--http-proxy-temp-path=/home/tianyan/tianyan_soft/nginx.install/proxy/ \
 --http-fastcgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/fcgi/ \
--http-uwsgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/uwsgi \
--http-scgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/scgi

エラーが発生した場合は、関連する依存関係を必ずインストールしてください。

yum で gcc をインストールします。gcc-c++
nginx: [emerg] 0.0.0.0:80 への bind() が失敗しました (13: 権限が拒否されました)。

注意: 非ルート権限で起動すると、エラー nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied) が表示されます。

理由: Linuxでは1024以下のポートを使用できるのはrootユーザーのみ

解決:

1. ルート権限で起動する

2. /usr/local/nginx/conf/nginx.conf ファイル内のポート 80 を 1024 以上に変更します。

keepalivedをインストールする

./configure --prefix=/usr/local/keepalived

上記のコマンドを実行した後、次のコマンドを続けて実行します。

作成 && インストール

インストールが完了すると、ディレクトリは次のようになります。

設定ファイルをシステムに対応するディレクトリにコピーします

/etc/keepalived をディレクトリに追加します。
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived

マスターノードのkeepalived.confを編集する

vim /etc/keepalived/keepalived.conf

内容は以下のとおりです。

! keepalived の設定ファイル

グローバル定義 {
  #一意の名前で十分です router_id hyq_slave
  }


#ngvrrp_script chk_nginx を実行するかどうか {
    スクリプト "/etc/keepalived/nginx_check.sh"
    間隔2
    体重 -20
}

vrrp_インスタンス VI_1 {
  状態 BACKUP # は必須です。MASTER または BACKUP のいずれかになります。

  インターフェースens33
  仮想ルータID 101
  優先度90
  広告_int 1

  # 2つのノードのアップリンクスイッチがマルチキャストを無効にしている場合は、VRRPユニキャスト通知を使用します # ローカルIP
  ユニキャストソースIP 192.168.124.14
  ユニキャストピア {
    # 他のマシンの IP
    192.168.124.13
  }
  # リソースのプリエンプションを防ぐためにnopreemptを設定します

  認証
    認証タイプ PASS
    認証パスワード 1111
  }

  # 上記の nginx ヘルスチェックをエコーし​​ます。track_script {
    chk_nginx
  }
  仮想IPアドレス{
    192.168.124.20
  }
}

スレーブノードのkeepalived.confを編集する

vim /etc/keepalived/keepalived.conf
! keepalived の設定ファイル

グローバル定義 {
  #一意の名前で十分です router_id hyq_slave
  }


#ngvrrp_script chk_nginx を実行するかどうか {
    スクリプト "/etc/keepalived/nginx_check.sh"
    間隔2
    体重 -20
}

vrrp_インスタンス VI_1 {
  状態 BACKUP # は必須です。MASTER または BACKUP のいずれかになります。  


  インターフェースens33
  仮想ルータID 101
  優先度90
  広告_int 1

  # 2つのノードのアップリンクスイッチがマルチキャストを無効にしている場合は、VRRPユニキャスト通知を使用します # ローカルIP
  ユニキャストソースIP 192.168.124.14
  ユニキャストピア {
    # 他のマシンの IP
    192.168.124.13
  }
  # リソースのプリエンプションを防ぐためにnopreemptを設定します

  認証
    認証タイプ PASS
    認証パスワード 1111
  }

  # 上記の nginx ヘルスチェックをエコーし​​ます。track_script {
    chk_nginx
  }
  仮想IPアドレス{
    192.168.124.20
  }
}

nginx_check.shスクリプトを書く

/etc/keepalivedディレクトリに新しいnginx_check.shスクリプトを作成します。

nginx_check.sh をタッチします

内容を次のように編集します。

#!/bin/sh
A=`ps -C nginx --no-header |wc -l`
[ $A -eq 0 ]の場合
それから
 nginx のディレクトリは /usr/sbin/nginx です。
 睡眠1
 A2=`ps -C nginx --no-header |wc -l`
 [ $A2 -eq 0 ]の場合
 それから
  systemctl 停止キープアライブ
 フィ
フィ

意味: nginx の実行が停止した場合は起動を試行しますが、起動に失敗した場合はローカルの keepalived プロセスを強制終了し、keepalived は仮想 IP を BACKUP マシンにバインドします。 注意: /usr/sbin/nginx は nginx の起動コマンドです。別のディレクトリにインストールする場合は、それに応じて置き換えてください。

Keepalived ログ

Keepalived ログのデフォルトの場所は /var/log/messages ディレクトリです。修正してみましょう。

システムは Centos7 なので、変更された場所は /lib/systemd/system/keepalived.service です。

オリジナルコンテンツ:

環境ファイル=-/usr/local/keepalived/etc/sysconfig/keepalived
ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS

変更後:

変更後にサービスをリロードする

systemctlデーモンリロード

コマンド ソフト リンクを作成します。

ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived

埋め込む:

キープアライブド -D -f /etc/キープアライブド/キープアライブド.conf

-D ログをメッセージログに出力します。デフォルトのログもメッセージログに出力されます。
-fは指定された設定ファイルです

/etc/sysconfig/keepalived を変更する

KEEPALIVED_OPTIONS="-D" を次のように変更します: KEEPALIVED_OPTIONS="-D -d -S 0"

/etc/rsyslog.confの末尾に追加します

ローカル0.*/var/log/keepalived.log 

最後に次のコマンドを実行します。

サービスrsyslogを再起動

keepalived を再起動すると、/var/log/keepalived.log にログが表示されます。

VIPのテストと検証

keepalivedとnginxの両方が起動したら、テストしてみましょう。

まずブラウザで3つのアドレスにアクセスします

  • http://192.168.124.20 (vip)
  • http://192.168.124.13 (マスター)
  • http://192.168.124.14(スレーブ)

nginx の index.html を変更したところ、現在の VIP がマスター ノード 13 を指していることがわかりました。

次に、13 で nginx を手動で停止し、http://192.168.124.20 に再度アクセスします。

これはインストールが成功したことを示します。

ネットワークカードの変更は、ip addressコマンドで確認できます。

実験のこの時点で、keepalived + nginx マスター/スレーブ構成のインストールと展開が完了しました。

考察: デュアルアクティブモードを有効にする方法

デュアルアクティブモードとは何ですか?

それぞれ2つの構成を紹介しましょう。

1. Nginx+keepalived マスタースレーブ構成

このソリューションは、上で紹介したソリューションです。フロントエンドで VIP アドレスと 2 台のマシンを使用します。1 台はメイン マシンとして、もう 1 台はバックアップ マシンとして使用されます。ただし、同時に動作するのは 1 台のマシンのみです。もう 1 台のバックアップ マシンは、メイン マシンに障害が発生していない場合は常に無駄な状態になります。これは災害復旧にのみ使用され、通常はアイドル状態です。

2. Nginx+keepalivedデュアルマスター構成

このソリューションでは、フロントエンドで 2 つの VIP アドレスと 2 台のマシンを使用します。これらは、互いにプライマリ マシンとバックアップ マシンとして機能します。マシンの 1 つに障害が発生すると、次の図に示すように、2 台のマシンの要求が 1 台のマシンに転送されます。

【実例】Elasticsearchの書き込み速度改善事例

Java を使用して収益性の高い WeChat グループチャット ロボットを作成する (PC プロトコル)

数百万のMySQLデータをRedisに効率的にインポート

Javaオンライン障害分析+パフォーマンスチューニング

Nginx+Keepalived でデュアルマシン マスター/スレーブを実装する方法についての記事はこれで終わりです。Nginx Keepalived デュアルマシン マスター/スレーブの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker+keepalived+nginx を使用してマスタースレーブホットスタンバイを実装する方法の例
  • Nginx+Keepalived でデュアルマシンのホットスタンバイを実現
  • keepalived デュアルマシンホットスタンバイ nginx の設定方法
  • Nginx は高可用性クラスタ構築を実装します (Keepalived+Haproxy+Nginx)
  • Keepalived は Nginx の負荷分散と高可用性のサンプル コードを実装します
  • nginx+keepalived 高可用性マスタースレーブ構成の詳細な説明
  • Keepalived を使用して Nginx の自動再起動とデュアルアクティブ ホットスタンバイの高可用性を実現する方法について

<<:  React-Dropzone をベースにアップロードコンポーネント機能を開発する (サンプルデモ)

>>:  Linux 上での MySQL データベースのリモート展開の詳細な手順

推薦する

Vue はクリックフリップ効果を実現します

参考までに、vueを使用してクリックフリップエフェクトを簡単に実装します。具体的な内容は次のとおりで...

Dockerfile に基づいて Tomcat イメージを構築する方法

Dockerfile は Docker イメージを構築するために使用されるファイルです。コマンドパラ...

フロントエンドエンジニアが作ったクールなインタラクティブウェブサイトを推薦します

ウェブサイトリンク: http://strml.net/サミュエル・リード著ヒント: 昨日、Mome...

Linux で特定のプログラムを見つけるための whereis の例の詳細な説明

Linuxは特定のプログラムを見つけますwhereis コマンドは主にプログラム ファイルを検索し、...

MySQL マスタースレーブレプリケーションでエラーをスキップする方法

1. 従来のbinlogマスタースレーブレプリケーション、エラー報告をスキップする方法 mysql&...

Vueはドラッグ可能なツリー構造図を実装します

目次Vue 再帰コンポーネントドラッグイベント最近、Vue を使用して、ドラッグ可能なツリー構造図と...

CSSは、他のレイヤーを変更せずに、多層ネスト構造の最外層を回転させる効果を実現します。

次のようなシナリオがあります。円形のコンテナで、最も外側のコンテナの背景が円弧になっています。内側の...

JS のあらゆる場所で絶対等価演算子の使用をやめる

目次概要1. NULL値のテスト2. ユーザー入力を読み取る導入事実の根源はどこにあるのでしょうか?...

Nginx の負荷分散と動的および静的分離の原理と構成

目次1. Nginxは負荷分散の原則を実装する2. Nginxの動的および静的分離の原則Nginx ...

フロントエンドJavaScriptのクラス

目次1. クラス1.1 コンストラクタ() 1.2 ゲッターとセッター1.3 これ1.4 静的プロパ...

MySQLは1つのテーブルからデータをクエリし、それを別のテーブルに挿入する実装方法

MySQLは1つのテーブルからデータをクエリし、それを別のテーブルに挿入する実装方法ウェブサイト開発...

CSSはインラインブロックのずれの問題を解決します

もうナンセンスじゃない、郵便番号HTML部分 <div class="positio...

MySQL SQL ステートメントが遅い場合の一般的な原因と解決策

1. インデックス不足または無効なインデックスによるクエリの遅延数千万件のデータを含むテーブルで、イ...

CSSアニメーションでポイント獲得効果を実現するアイデアを詳しく解説

最近のプロジェクトでは、ポイントを集める効果を作成する必要があります。 ボスの説明によると、この効果...

Vueのコンポーネントの詳細な説明

目次1. コンポーネントの登録2. コンポーネントの使用3. 父から息子へ4. 息子から父へ5. ス...