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

推薦する

MySQL 5.7 でパスワードを忘れた場合の解決方法の詳細な説明

環境: [root@centos7 ~]# uname -r 3.10.0-514.el7.x86_...

MySQL/MariaDB で完全な Unicode をサポートする方法

目次utf8mb4 の紹介UTF8 バイト数超過エラーutf8mb4 サポートデフォルトの文字エンコ...

Dockerコンテナの個別展開のためのLNMPの実装

1. 環境整備各コンテナの IP アドレス: nginx: 172.16.10.10マイSQL: 1...

centos7.2 オフラインインストール mysql5.7.18.tar.gz

ネットワークが分離されているため、MySQL は yum を使用してインストールできません。ここでは...

CSS スタイルが機能しない (史上最も完全な解決策の概要)

ページを作成するときに、記述した CSS スタイルが有効にならないことがあります。この現象にはさまざ...

JavaScript でよく使われるいくつかの文字列メソッドの概要 (初心者必読)

JavaScriptでよく使われるいくつかの文字列メソッド文字列は読み取り専用データです。よく使用...

ユニークインデックスの S ロックと X ロックによる MySQL デッドロック ルーチンの理解

「初心者向けソースコードからの MySQL デッドロック問題の理解」では、MySQL ソースコードを...

Vueタイマーの実装方法

この記事では、参考までにタイマーを実装するためのVueの具体的なコードを紹介します。具体的な内容は次...

Maven で tomcat8-maven-plugin プラグインを使用する詳細なチュートリアル

オンラインで多くの記事を検索しましたが、解決策は見つかりませんでした。次のように、tomcat7-m...

js QRコードスキャンログインの原理についての簡単な説明

目次QRコードログインの真髄QRコードを理解するシステム認証メカニズムQRコードをスキャンしてログイ...

ウェブデザインの達人がよく使うレスポンシブフレームワークを共有する(要約)

この記事では、Web デザインの達人がよく使用するレスポンシブ フレームワーク (概要) を紹介し、...

XHTML タグのネスト規則の分析

XHTML 言語では、ul タグに li が含まれ、dl タグに dt と dd が含まれることは誰...

Linux xargsコマンドの使用

1. 機能: xargs は、stdin 内のスペースまたは改行で区切られたデータをスペースで区切ら...

CentOS 7にMySQLをインストールする詳細な手順

CentOS7では、MySQLをインストールすると、MariaDBもデフォルトでインストールされます...

JSON.stringify のさまざまな用途のまとめ

序文json を使用したことがある人なら、オブジェクトを文字列化してからバックエンドに送信するのが一...