Docker+keepalived+nginx を使用してマスタースレーブホットスタンバイを実装する方法の例

Docker+keepalived+nginx を使用してマスタースレーブホットスタンバイを実装する方法の例

序文

単一障害点を解決するには、マスター/スレーブ ホット スタンバイ ソリューションを構成する必要があります。サーバーの数は限られているため、Docker を使用してインストールと構成をシミュレートします。

この構成では、Docker がデフォルトでインストールされます。

設定環境: centos7 64 ビット

Docker バージョン: Docker バージョン 17.12.1-ce、ビルド 7390fc6

1. Centos7イメージを取得する

docker pull centos:7

2. コンテナを作成する

docker run -it -d --name centos1 -d centos:7

3. コンテナcentos1を入力します

docker exec -it centos1 bash

4. 共通ツールをインストールする

yum updateyum install -y vimyum install -y wgetyum install -y gcc-c++ yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl--develyum install -y popt-develyum install -y initscripts
yum インストール -y ネットツール

5. コンテナを新しいイメージにパッケージ化し、将来的にはそのイメージから直接コンテナを作成する

docker commit -a 'cfh' -m 'centos with common tools' centos1 centos_base

6. 以前に作成したcentos1コンテナを削除し、ベースイメージでコンテナを再作成し、keepalived+nginxをインストールします。

docker rm -f centos1
#コンテナ内でsystemctlサービスを使用する必要があり、/usr/sbin/initを追加する必要があります
docker run -it --name centos_temp -d --privileged centos_base /usr/sbin/init
docker exec -it centos_temp bash

著者: 江湖九九 リンク: https://juejin.im/post/5dc517386fb9a04a9272110b
出典: Nuggets。著作権は著者に帰属します。商用目的での複製の場合は、著者に連絡して許可を得てください。非商用目的での複製の場合は、出典を明記してください。

7. nginxをインストールする

#yum を使用して nginx をインストールします。Nginx ライブラリを含める必要があります。Nginx ライブラリ rpm -Uvh をインストールします http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 次のコマンドを使用してnginxをインストールします
yum インストール -y nginx
#nginxを起動する
systemctl nginx.service を起動します
#起動が成功したかどうかを確認します。nginx のウェルカム インターフェイスが表示され、インストールが成功したことが示されます。curl 172.17.0.2

8. keepalivedをインストールする

1. keepalived wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz

2. 解凍してインストールします: tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/

3. opensslプラグインをダウンロードしますyum install -y openssl openssl-devel (ソフトウェアパッケージをインストールする必要があります)

4. keepalived のコンパイルを開始します cd /usr/local/keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived

5. make && make install

9. システムサービスとしてkeepalivedをインストールする

mkdir /etc/keepalivedcp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/次に、keepalived スクリプト ファイルをコピーします: cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ln -s /usr/local/sbin/keepalived /usr/sbin/起動時に開始するように設定できます: chkconfig keepalived on、これでインストールが完了しました。

#起動時にエラーが発生した場合は、次のコマンドを実行してください cd /usr/sbin/ 
rm -f キープアライブ 
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ 

#共通コマンド systemctl daemon-reload はリロードします systemctl enable keepalived.service は起動時に自動起動を設定します systemctl disabled keepalived.service は起動時に自動起動をキャンセルします systemctl start keepalived.service は起動します systemctl stop keepalived.service は停止します systemctl status keepalived.service はサービスステータスをチェックします

10. /etc/keepalived/keepalived.confファイルを変更する

#設定ファイルのバックアップ cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.backup

rm -f キープアライブド.conf
vim キープアライブド.conf
#設定ファイルは以下のとおりです vrrp_script chk_nginx {
  スクリプト "/etc/keepalived/nginx_check.sh"
  間隔2
  体重 -20
}

vrrp_インスタンス VI_1 {
  状態マスター
  インターフェース eth0
  仮想ルータID 121
  マルチキャスト送信元IP 172.17.0.6
  優先度100
  先取りしない
  広告_int 1
  認証
    認証タイプ PASS
    認証パスワード 1111
  }

  トラックスクリプト {
    chk_nginx
  }

  仮想IPアドレス{
    172.17.0.100
  }
}

11. ハートビート検出ファイルを追加する

vim nginx_check.sh
#以下はスクリプトの内容です#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
[ $A -eq 0 ]の場合
  ローカル
  睡眠2
  if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
    キルオールキープアライブ
  フィ
フィ

12. スクリプトの実行権限を与える

chmod +x nginx_check.sh

13. スタートアップを設定する

systemctl は keepalived.service を有効にします。

#keepalived を開く
systemctl 開始 keepalived.service

14. 仮想 IP が成功したかどうかを確認します。ホスト マシンで次のコマンドを実行します。nginx の welcome インターフェイスが表示されたら、成功したことを示します。

カール 172.17.0.100

15. centos_temp コンテナをイメージに再パッケージ化し、この新しいイメージを使用してさらに 2 つのコンテナを作成し、ホット スタンバイ効果を実現します。

docker commit -a 'cfh' -m 'centos と keepalived nginx' centos_temp centos_kn

16. すべてのコンテナを削除する

docker rm -f `docker ps -a -q`

17. centos_knイメージを使用してメインサーバーコンテナを作成する

docker run --privileged -tid --name centos_master --restart=always centos_kn /usr/sbin/init

docker exec -it centos_master bash

18. centos_masterのnginxのウェルカムページを修正します。

vim /usr/share/nginx/html/index.html 

19. スレーブサーバーコンテナを作成する

docker run --privileged -tid --name centos_slave --restart=always centos_kn /usr/sbin/init
docker exec -it centos_slave bash

#keepalived.conf 設定ファイルを修正します。主に状態と優先度パラメータを調整します。マスターノードの優先度値はスレーブノードの優先度値よりも大きくする必要があります。vrrp_script chk_nginx {
  スクリプト "/etc/keepalived/nginx_check.sh"
  間隔2
  体重 -20
}

vrrp_インスタンス VI_1 {
  状態 SLAVE
  インターフェース eth0
  仮想ルータID 121
  マルチキャスト送信元IP 172.17.0.6
  優先度80
  先取りしない
  広告_int 1
  認証
    認証タイプ PASS
    認証パスワード 1111
  }

  トラックスクリプト {
    chk_nginx
  }

  仮想IPアドレス{
    172.17.0.100
  }
}

20. 変更後にリロードする

systemctlデーモンリロード
systemctl を再起動します。

21. nginx のウェルカム ページを変更します (nginx が起動していない場合は、systemctl start nginx.service を実行します)

vim /usr/share/nginx/html/index.html 

22. テスト

A> ホスト、centos_master、centos_slaveでそれぞれ次のコマンドテストを実行します。マスターのウェルカムページが表示されれば、設定は成功です 1/3

カール 172.17.0.100

B> この時、centos_masterコンテナを停止(docker stop centos_master)し、centos_slaveコンテナを残して以下のコマンドを実行します。Slaveページに切り替わればkeepalivedの設定が成功していることになります 2/3

カール 172.17.0.100

C> centos_master コンテナを再起動し、次のコマンドを実行して、スレーブからマスターへの切り替えが行われたかどうかを確認します。切り替えが成功した場合は、構成が成功したことを意味します。

カール 172.17.0.100

注: テスト中、コンテナを再起動した後、nginx は起動しませんでした。コンテナに入って起動する必要があります。そうしないと、マスター ページにアクセスできませんが、ping は実行できます。

次のコマンドを実行して、nginx がランダムに起動するように設定し、コンテナを再起動するたびに手動で nginx を起動する必要がないようにする。

chkconfig nginx オン

以上が設定手順の全てです。皆様の勉強の参考になれば幸いです。また、123WORDPRESS.COM を応援して頂ければ幸いです。

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

<<:  Vueはシンプルな画像切り替え効果を実装します

>>:  Vue カードスタイルのクリックして切り替える画像コンポーネントの使用方法の詳細な説明

推薦する

遭遇したいくつかのブラウザ互換性の問題について簡単に説明します

背景ブラウザの互換性の問題を解決するのは非常に面倒なことです。高度な技術はそれほど必要ありませんが、...

vue3 コンポーネントでの v-model の使用と詳細な説明

目次v-model 入力で双方向バインディングデータを使用するコンポーネント内の v-model他の...

最小限の展開で CentOS8 に OpenStack Ussuri をインストールする方法の詳細なチュートリアル

CentOS8 に最小限のデプロイメントで OpenStack Ussuri をインストールするため...

js のプロトタイプ、プロトタイプ オブジェクト、プロトタイプ チェーンの包括的な分析

目次プロトタイプを理解するプロトタイプオブジェクトを理解するインスタンスプロパティとプロトタイププロ...

MySQLカスタム関数とストアドプロシージャの詳細な説明

序文この記事では主にMySQLのカスタム関数とストアドプロシージャに関する関連コンテンツを紹介し、皆...

Win10システムにMySQL 8.0をインストールするときに発生する問題を解決する

Win10 システムに MySQL 8.0 をインストールする際に発生する問題と解決策は次のとおりで...

ES6拡張演算子の理解と使用シナリオ

目次1. 適用メソッドを置き換え、関数を呼び出すときにパラメータを処理する2. 残りパラメータ(残り...

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

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

Mysql 5.7.18 MySQL proxies_priv を使用して同様のユーザーグループ管理を実装する

MySQL proxies_priv(シミュレートされたロール)を使用して同様のユーザーグループ管理...

Vueバスの簡単な使い方

Vueバスの簡単な使い方シナリオの説明:コンポーネント A にはコンポーネント B と C が含まれ...

CSS フレキシブルレイアウト FLEX、メディアクエリ、モバイルクリックイベントの実装

フレックスレイアウト定義: Flexレイアウトの要素は、 Flex 、または略して「コンテナー」と呼...

js 日付と時刻のフォーマット方法の例

js 日付時刻形式日付と時刻を指定された形式に変換します。例: YYYY-mm-dd HH:MM は...

Nginx サーバーで Web クローラーをブロックおよび禁止する方法

通常、すべての Web サイトは、多くの非検索エンジン クローラーに遭遇します。これらのクローラーの...

MySql のサブクエリ内のクエリ例の詳細な説明

北西を見ると私の故郷はどこにあるでしょうか。南東の満月を何度見たことがあるでしょうか。月が再びゆっく...