キープアライブ + 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 プロセス。