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 データベースのリモート展開の詳細な手順

推薦する

JavaScript Promise の徹底解説

目次1. Promise とは何ですか? 2. なぜ Promise が存在するのでしょうか? 3つ...

CSSを使用してダークモードとブライトモードを切り替える

Web Skills第5号では、CSSでダークモードやハイライトモードを実装するための技術的なソリュ...

nginxフロー制御とアクセス制御の実装

nginx トラフィック制御レート制限は非常に便利ですが、Nginx では誤解され、誤って設定される...

iview権限管理の実装

目次iview-admin2.0 組み込み権限管理権限に基づいてコンポーネントの表示を制御するカスタ...

スライダー間隔コンポーネントのネイティブ js 実装

この記事の例では、スライダー間隔コンポーネントを実装するためのjsの具体的なコードを参考までに共有し...

Mysql の遅いクエリ操作の概要

MySQL の遅いクエリの説明MySQL スロー クエリ ログは、MySQL が提供するログ レコー...

jsは双方向データバインディング(アクセサ監視)を実現します

この記事の例では、双方向データバインディングを実現するためのjsの具体的なコードを参考までに共有して...

行の高さと垂直方向の配置についての深い理解

いくつかの概念行ボックス: インライン ボックスを囲むボックス。1 つ以上の行ボックスが積み重ねられ...

WindowsでのNginxの起動や停止などの基本操作コマンドの詳しい説明

Windows で Nginx を使用するには、Nginx サービスの起動、停止、Nginx のリロ...

MySQL InnoDB 監視 (システム層、データベース層)

MySQL InnoDB 監視 (システム層、データベース層) MySQL の監視に関しては、My...

Vue でメニュー権限制御を実装するためのサンプルコード

バックエンド管理システムで作業している場合、通常、メニュー権限制御に関連する問題に遭遇します。もちろ...

CSS 位置プロパティが絶対の場合のパーセンテージ値の計算

位置が絶対の場合、関連する属性のパーセンテージは、参照先の要素 (包含ブロック) を基準として計算さ...

Vueはel-tree遅延読み込みを使用して、追加、削除、変更、クエリ機能を実装します。

Vue のツリー表示については、プロジェクトが使用されています: エフェクト ダイアグラムがツリー...

クラウドネイティブテクノロジー Kubernetes (K8S) の紹介

目次01 Kubernetes とは何ですか? 02 KubernetesとCompost+Swar...

JavaScript実行メカニズムの詳細な紹介

目次1. プロセスとスレッドの概念2. ブラウザの原則3. 同期と非同期4. 実行スタックとタスクキ...