nginx の高可用性を実現するための Keepalive + nginx と、マスター/スタンバイ モードの構築方法

キープアライブ + nginx nginx の高可用性を実現する方法と、マスター/スタンバイ モードを構築する方法。

キープライブの概要

Keepalived は純粋な ANSI/ISO C で書かれています。このソフトウェアは、中央の I/O マルチプレクサを介して接続し、リアルタイムのネットワーク設計を提供します。

1.1 Keepalived プロセスは 3 つの異なるプロセスに分かれています
ここに画像の説明を挿入

A. フォークと子プロセスの監視を担当するミニマリストの親プロセス。親プロセスの監視フレームワークはウォッチドッグと呼ばれます。
B. 2 つの子プロセス。1 つは VRRP フレームワークを担当し、もう 1 つはヘルスチェックを担当します。

1.2 使用シナリオ
Mysql データベース デュアル マスター アーキテクチャ、
nginx マスター スレーブ アーキテクチャ、keepalived による切り替え。

1.3 フェールオーバー フレームワーク
Keepalived は、ディレクターのフェールオーバー用に VRRP プロトコルを実装します。実装された VRRP スタックでは、VRRP パケット スケジューラは、各 VRRP インスタンスの特定の I/O を逆多重化する役割を果たします。
VRRP インスタンス同期: VRRP 同期グループとも呼ばれる 2 つの VRRP インスタンス間のステータス監視を指定できます。これにより、2 つの VRRP インスタンスが同じ状態を維持し、同期インスタンスが相互に監視することが保証されます。

2. インストールと展開

2.1 バイナリによるインストール
1) 依存関係のインストール

yum install curl gcc openssl-devel libnl3-devel net-snmp-devel

2) インストール パッケージをダウンロードして解凍し、コンパイルします。

tar xz keepalived-1.2.15.tar.gz
./configure
Make && make install

3) 指定ディレクトリにインストール

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

2.2 依存パッケージによるインストール

yum -y install keepalived
yum -y install nmap-ncat

- テスト

systemctl status keepalived.service
systemctl start keepalived.service

3.構成

たとえば、相互にマスターしている 2 つの nginx または mysql が同時にサービスを提供でき、一方のサービスがダウンした後、もう一方が引き継ぐことができます。
例:マスターノード

! Configuration File for keepalived

global_defs {
    
    
    router_id test_kp
}

vrrp_script chk_local {
    
    
    script "/local/keepalived/etc/stop.sh"
    interval 15
    fall 3
    rise 1
# weight 10
}
vrrp_instance VI_1 {
    
    
    state BACKUP
    interface bond0
    virtual_router_id 1001
    priority 100
    advert_int 1
    nopreempt   ## backup 节点不需要配置
    authentication {
    
    
        auth_type PASS
        auth_pass server101
    }
    track_script {
    
    
        chk_local
    }
    virtual_ipaddress {
    
    
        192.168.10.101/24
    }
}

例:待機ノード

! Configuration File for keepalived

global_defs {
    
    
    router_id test_kp
}

vrrp_script chk_local {
    
    
    script "/local/keepalived/etc/stop.sh"
    interval 3
    weight -5
    }


vrrp_instance VI_1 {
    
    
    state BACKUP
    interface eth0
    virtual_router_id 1001
    priority 99
    advert_int 1
    authentication {
    
    
        auth_type PASS
        auth_pass server101
    }
    virtual_ipaddress {
    
    
        192.168.10.101/24
    }
track_script {
    
    
    chk_local
    }
}

詳細パラメータ

ここに画像の説明を挿入

4. よくある質問

4.1 ログのヒント

WARNING - script '/etc/keepalived/check_nginx.sh' is not executable for uid:gid 0:0 - disabling.

理由: 待機マシンの keepalived 監視スクリプトに実行権限がありません。
解決済み: chmod +x ~/check_nginx.sh.

4.2 Keeplived のアクティブとスタンバイの VIP アドレスを切り替えることができない
理由: keeplived 構成の優先度が同じです。
解決策: keepalived.cof 構成ファイルの優先順位パラメーターを確認してください。マスター ノードとスレーブ ノードの優先順位が異なるように設定されています。


1. 概要
前節では、キープアライブ マスターとバックアップの基本的な使い方を理解しましたが、それは、ダウンタイムなどの状況でキープアライブ プロセスを停止することによって実現される vip のドリフトです. この記事では、キープアライブを追加して nginx のサバイバル スクリプトをnginxを監視 nginxの高可用性を実現

ここに画像の説明を挿入

2. 準備
2 台のマシンを準備し、111 を keepalive の MASTER ノードとして定義します。

ここに画像の説明を挿入

2 つのサーバーでそれぞれ nginx を構成し、簡単に識別できるようにデフォルトの index.html を変更して ip ロゴを追加します。

ここに画像の説明を挿入

3. keepalived の設定 keepalived
設定ファイルのインスタンスに track_script を設定し、nginx が生きているかどうかを確認するスクリプトを指定します。

3.1 マスター (172.16.225.111)

! Configuration File for keepalived

global_defs {
    
    
  router_id LB111
}

vrrp_script chk_nginx {
    
    
  # 具体的脚本
  script "/etc/keepalived/nginx_check.sh"
  interval 2 # 2s执行一次
  weight -20 # 失败一次 则优先级 -20
}

vrrp_instance VI_1 {
    
    
   state MASTER
   interface ens160
   virtual_router_id 51
   priority 100
   advert_int 1
   authentication {
    
    
       auth_type PASS
       auth_pass 1111
  }
   virtual_ipaddress {
    
    
      172.16.225.200
  }
   # 指定脚本
   track_script {
    
    
     chk_nginx
  }
}

3.2 マスター (172.16.225.110)

! Configuration File for keepalived

global_defs {
    
    
  router_id LB111
}

vrrp_script chk_nginx {
    
    
  script "/etc/keepalived/nginx_check.sh"
  interval 2
  weight -20
}

vrrp_instance VI_1 {
    
    
   state BACKUP
   interface ens160
   virtual_router_id 51
   priority 90
   advert_int 1
   authentication {
    
    
       auth_type PASS
       auth_pass 1111
  }
   virtual_ipaddress {
    
    
      172.16.225.200
  }

   track_scrip {
    
    
     chk_nginx
  }
}

4. nginx_check.sh の設定は
主にこのスクリプトです. このスクリプトの内容は ps コマンドで nginx プロセスが生きているかどうかをチェックすることです. 生きていない場合は一度起動してみてください. それでもうまくいかない場合はキープアライブが検出できるようにキープアライブをオフにすると、vip が他のマシンにドリフトする可能性があります。

#!/bin/bash
status=$(ps -C nginx --no-heading|wc -l)
if [ "${status}" = "0" ]; then
           # 尝试启动一次
          systemctl start nginx
       # 再次检查ngixn 进程
       status2=$(ps -C nginx --no-heading|wc -l)
       if [ "${status2}" = "0" ]; then
               # 关闭 keepalived
              systemctl stop keepalived
       fi
fi

このスクリプトは、両方のマシンで構成する必要があります。

# 给脚本一个 可执行的权限
chmode +x /etc/keepalived/nginx_check.sh
# 重启或者启动 keepalived
systemctl restart keepalived

5. selinux を閉じる
再起動または開始後にログに次のエラーが表示される場合は、selinux が閉じられていないことを意味します。
ここに画像の説明を挿入

# 临时关闭
setenforce 0

#永久关闭
sed -i 's/SELINUX=enforcing/\SELINUX=disabled/' /etc/selinux/config

6. 2 台のマシンで nginx と keepalive をそれぞれ起動した後のシミュレーション テスト
アクセス vip 172.16.225.200 この vip は現在 111 マスター マシン上にあります。
ここに画像の説明を挿入

マスター マシンで ngixn を閉じます。

# 关闭 nginx
./nginx -s stop
# 此时查看 keepalived 的状态就是 dead了
systemctl status keepalived

● keepalived.service - LVS and VRRP High Availability Monitor
  Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
  Active: inactive (dead)

vip 172.16.225.200 に再度アクセスすると、vip がマシン 110 をバックアップするために実行されていることがわかります。
ここに画像の説明を挿入
以上をまとめると、
キープアライブ+nginxの基本的なアクティブ・スタンバイ構成で、nginxの高可用性を実現できます.キープアライブを実行するためのnginx_check.shスクリプトの設定がポイントです.nginx_check.shスクリプトでnginxが生きていないことが判明した場合、それを開始しようとしても、それでも存続しない場合は、直接閉じられます。keepalive プロセス。

おすすめ

転載: blog.csdn.net/u014374009/article/details/129220497