序文 まず、高性能サーバーの高可用性またはホットスタンバイソリューションである Keepalived を紹介します。これはもともと LVS 負荷分散ソフトウェア用に設計されました。Keepalived は主にサーバーの単一障害点を防ぐために使用されます。Nginx との連携により、Web サーバーの高可用性を実現できます。 Keepalived は VRRP プロトコルに基づいています。VRRP は Virtual Router Redundancy Protocol の略です。VRRP プロトコルは、2 台以上のルータ デバイスを 1 台のデバイスに仮想化し、外部に仮想ルータ IP (1 つ以上) を提供します。 VRRP の目的は、静的ルーティングの単一点障害問題を解決することです。これにより、個々のノードに障害が発生しても、ネットワーク全体が中断することなく動作できるようになります。 次に、nginx keepalived 高可用性ソリューションの展開とインストールについて紹介します。 環境の準備 両方のホストで次の圧縮ファイルを準備します。
仮想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 変更後: 変更後にサービスをリロードする systemctlデーモンリロード コマンド ソフト リンクを作成します。 ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived 埋め込む: キープアライブド -D -f /etc/キープアライブド/キープアライブド.conf -D ログをメッセージログに出力します。デフォルトのログもメッセージログに出力されます。 /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つのアドレスにアクセスします
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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: React-Dropzone をベースにアップロードコンポーネント機能を開発する (サンプルデモ)
>>: Linux 上での MySQL データベースのリモート展開の詳細な手順
目次1. Promise とは何ですか? 2. なぜ Promise が存在するのでしょうか? 3つ...
Web Skills第5号では、CSSでダークモードやハイライトモードを実装するための技術的なソリュ...
nginx トラフィック制御レート制限は非常に便利ですが、Nginx では誤解され、誤って設定される...
目次iview-admin2.0 組み込み権限管理権限に基づいてコンポーネントの表示を制御するカスタ...
この記事の例では、スライダー間隔コンポーネントを実装するためのjsの具体的なコードを参考までに共有し...
MySQL の遅いクエリの説明MySQL スロー クエリ ログは、MySQL が提供するログ レコー...
この記事の例では、双方向データバインディングを実現するためのjsの具体的なコードを参考までに共有して...
いくつかの概念行ボックス: インライン ボックスを囲むボックス。1 つ以上の行ボックスが積み重ねられ...
Windows で Nginx を使用するには、Nginx サービスの起動、停止、Nginx のリロ...
MySQL InnoDB 監視 (システム層、データベース層) MySQL の監視に関しては、My...
バックエンド管理システムで作業している場合、通常、メニュー権限制御に関連する問題に遭遇します。もちろ...
位置が絶対の場合、関連する属性のパーセンテージは、参照先の要素 (包含ブロック) を基準として計算さ...
Vue のツリー表示については、プロジェクトが使用されています: エフェクト ダイアグラムがツリー...
目次01 Kubernetes とは何ですか? 02 KubernetesとCompost+Swar...
目次1. プロセスとスレッドの概念2. ブラウザの原則3. 同期と非同期4. 実行スタックとタスクキ...