NGINX設定 · 3 min read · Nov 08, 2025

CentOS 8でKeepAlivedを使用して高可用性のNGINXを設定する方法

Nginxは、無料でオープンソースの、世界中で最も人気のあるウェブサーバーの1つです。また、リバースプロキシ、ロードバランサー、HTTPキャッシュとしても使用できます。高可用性により、アプリケーションは障害が発生した場合に別のシステムに作業を再ルーティングできます。高可用性システムを設定するためのさまざまな技術があります。

Keepalivedは、サービスやシステムを継続的に監視し、障害が発生した場合に高可用性を実現するシステムデーモンです。1つのノードがダウンすると、2番目のノードがリソースを提供します。

このチュートリアルでは、CentOS 8上でKeepAlivedを使用して高可用性のNginxウェブサーバーを設定する方法を示します。

前提条件

  • マスターノード用とバックアップノード用の2台のCentOS 8サーバー。
  • サーバーにルートパスワードが設定されていること。

両方のノードにNginxをインストールする

まず、両方のノードにNginxパッケージをインストールする必要があります。次のコマンドを使用してインストールできます:

dnf install nginx -y

両方のノードにNginxがインストールされたら、Nginxサービスを開始し、システム再起動時に自動的に開始するように設定します:

systemctl start nginx  
systemctl enable nginx

完了したら、次のステップに進むことができます。

両方のノードにIndex.htmlファイルを作成する

次に、各ノードを識別するために、両方のノードにカスタムindex.htmlファイルを作成する必要があります。

最初のノードで、次のコマンドを使用してindex.htmlファイルを作成します:

echo "

This is My First NGINX Web Server Node

" | tee /usr/share/nginx/html/index.html

2番目のノードで、次のコマンドを使用してindex.htmlファイルを作成します:

echo "

This is My Second NGINX Web Server Node

" | tee /usr/share/nginx/html/index.html

完了したら、ファイルを保存して閉じます。

Keepalivedをインストールして構成する

次に、両方のノードにKeepalivedをインストールする必要があります。デフォルトでは、KeepalivedパッケージはCentOS 8のデフォルトリポジトリにあります。次のコマンドを実行してインストールできます:

dnf install keepalived -y

両方のノードにkeepalivedパッケージがインストールされたら、両方のノードでkeepalivedのデフォルト構成ファイルを編集する必要があります。

最初のノードで、keepalived.confファイルを編集します:

nano /etc/keepalived/keepalived.conf

デフォルトの内容を削除し、次の内容を追加します:

global_defs {
  # Keepalivedプロセス識別子
  router_id nginx
}

# Nginxが実行中かどうかを確認するスクリプト
vrrp_script check_nginx {
  script "/bin/check_nginx.sh"
  interval 2
  weight 50
}

# 仮想インターフェース - プライオリティはフェイルオーバー時に引き継ぐインターフェースの順序を指定します
vrrp_instance VI_01 {
  state MASTER
  interface eth0
  virtual_router_id 151
  priority 110

  # 2つのNGINXウェブサーバー間で共有される仮想IPアドレス
  virtual_ipaddress {
    192.168.1.10/24
  }
  track_script {
    check_nginx
  }
  authentication {
    auth_type AH
    auth_pass secret
  }
}

完了したら、ファイルを保存して閉じます。

2番目のノードで、keepalived.confファイルを編集します:

nano /etc/keepalived/keepalived.conf

デフォルトの内容を削除し、次の内容を追加します:

global_defs {
  # Keepalivedプロセス識別子
  router_id nginx
}

# Nginxが実行中かどうかを確認するスクリプト
vrrp_script check_nginx {
  script "/bin/check_nginx.sh"
  interval 2
  weight 50
}

# 仮想インターフェース - プライオリティはフェイルオーバー時に引き継ぐインターフェースの順序を指定します
vrrp_instance VI_01 {
  state BACKUP
  interface eth0
  virtual_router_id 151
  priority 100

  # 2つのNGINXウェブサーバー間で共有される仮想IPアドレス
  virtual_ipaddress {
    192.168.1.10/24
  }
  track_script {
    check_nginx
  }
  authentication {
    auth_type AH
    auth_pass secret
  }
}

ファイルを保存して閉じたら、Nginxサービスが実行中かどうかを確認するスクリプトを作成する必要があります。次のコマンドを使用して作成できます:

注意:上記の構成ファイルでMASTERをBACKUPに、110を100に置き換えただけです。

nano /bin/check_nginx.sh

次の行を追加します:

#!/bin/sh
if [ -z "`pidof nginx`" ]; then
  exit 1
fi

ファイルを保存して閉じたら、次のコマンドで適切な権限を設定します:

chmod 755 /bin/check_nginx.sh

最後に、次のコマンドを使用してkeepalivedサービスを開始し、システム再起動時に自動的に開始するように設定します:

systemctl start keepalived  
systemctl enable keepalived

次のコマンドを使用してkeepalivedサービスの状態を確認することもできます:

systemctl status keepalived

次の出力が表示されるはずです:

? keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-04-08 04:24:22 EDT; 5s ago
  Process: 3141 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 3142 (keepalived)
    Tasks: 2 (limit: 12524)
   Memory: 2.1M
   CGroup: /system.slice/keepalived.service
           ??3142 /usr/sbin/keepalived -D
           ??3143 /usr/sbin/keepalived -D

Apr 08 04:24:22 node1 Keepalived_vrrp[3143]: (VI_01) Changing effective priority from 110 to 160
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Receive advertisement timeout
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Entering MASTER STATE
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) setting VIPs.
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Sending/queueing gratuitous ARPs on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10

マスターノードで次のコマンドを使用して仮想IPアドレスの状態を確認することもできます:

ip add show

次の出力に仮想IPアドレス192.168.1.10が表示されるはずです:

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:00:2d:3a:20:9b brd ff:ff:ff:ff:ff:ff
    inet 45.58.32.155/24 brd 45.58.32.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.10/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::200:2dff:fe3a:209b/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:00:0a:3a:20:9b brd ff:ff:ff:ff:ff:ff
    inet6 fe80::200:aff:fe3a:209b/64 scope link 
       valid_lft forever preferred_lft forever

完了したら、次のステップに進むことができます。

両方のノードでファイアウォールを構成する

次に、ポート80を許可し、両方のノードでVRRPを許可する必要があります。次のコマンドを使用して行うことができます:

firewall-cmd --permanent --add-service=http  
firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent

次に、変更を適用するためにfirewalldを再読み込みします:

firewall-cmd –reload

Keepalivedを確認する

この時点で、NginxとKeepalivedがインストールされ、構成されています。Nginxの高可用性が機能するかどうかをテストする時が来ました。

ウェブブラウザを開き、URL http://your-virtual-ip にアクセスします。次のページが表示されるはずです:

ノード1のNginxページ

次に、マスターノードでNginxサービスを停止し、仮想IPがノード1からノード2に切り替わるかどうかをテストします。

マスターノードで、次のコマンドを使用してNginxサービスを停止します:

systemctl stop nginx

次に、Node2にログインして、次のコマンドを使用して仮想IPを確認します:

ip add show

次の出力に仮想IPが表示されるはずです:

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:00:2d:3a:26:37 brd ff:ff:ff:ff:ff:ff
    inet 45.58.38.55/24 brd 45.58.38.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.10/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::200:2dff:fe3a:2637/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:00:0a:3a:26:37 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::200:aff:fe3a:2637/64 scope link 
       valid_lft forever preferred_lft forever

次に、URL http://your-virtual-ip を使用してNginxウェブサーバーにアクセスします。ノード2のページが表示されるはずです:

ノード2のNginx

結論

おめでとうございます! Keepalivedを使用して高可用性のNginxサーバーを正常に設定しました。これで、運用環境で高可用性のNginxサーバーを設定するための十分な知識を得たことを願っています。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。