Nginxは無料のオープンソースであり、世界中で最も人気のあるWebサーバーの1つです。リバースプロキシ、ロードバランサー、HTTPキャッシュとしても使用できます。高可用性により、アプリケーションは、障害が発生した場合に作業を別のシステムに再ルーティングできます。高可用性システムをセットアップするために利用できるさまざまなテクノロジーがあります。
Keepalivedは、サービスまたはシステムを継続的に監視し、障害が発生した場合に高可用性を実現するシステムデーモンです。 1つのノードがダウンしている場合、2番目のノードがリソースを提供しました。
このチュートリアルでは、CentOS8でKeepAlivedを使用して高可用性NginxWebサーバーをセットアップする方法を紹介します。
- CentOS 8を実行している2台のサーバー。1台はマスターノード用、もう1台はバックアップノード用です。
- ルートパスワードはサーバーで構成されています。
まず、両方のノードにNginxパッケージをインストールする必要があります。次のコマンドを使用してインストールできます:
dnf install nginx -y
Nginxが両方のノードにインストールされたら、Nginxサービスを開始し、システムの再起動時に開始できるようにします。
systemctl start nginx
systemctl enable nginx
終了したら、次のステップに進むことができます。
次に、各ノードを識別するために、両方のノードにカスタムindex.htmlファイルを作成する必要があります。
最初のノードで、次のコマンドを使用してindex.htmlファイルを作成します。
echo "<h1>This is My First NGINX Web Server Node</h1>" | tee /usr/share/nginx/html/index.html
2番目のノードで、次のコマンドを使用してindex.htmlファイルを作成します。
echo "<h1>This is My Second NGINX Web Server Node</h1>" | tee /usr/share/nginx/html/index.html
終了したら、ファイルを保存して閉じます。
Keepalivedのインストールと構成
次に、両方のノードにキープアライブをインストールする必要があります。デフォルトでは、KeepalivedパッケージはCentOS8のデフォルトリポジトリで利用できます。次のコマンドを実行してインストールできます:
dnf install keepalived -y
keepalivedパッケージが両方のノードにインストールされたら、両方のノードでkeepalivedのデフォルト構成ファイルを編集する必要があります。
最初のノードで、keepalived.confファイルを編集します。
nano /etc/keepalived/keepalived.conf
デフォルトのコンテンツを削除し、次のコンテンツを追加します。
global_defs {
# Keepalived process identifier
router_id nginx
}
# Script to check whether Nginx is running or not
vrrp_script check_nginx {
script "/bin/check_nginx.sh"
interval 2
weight 50
}
# Virtual interface - The priority specifies the order in which the assigned interface to take over in a failover
vrrp_instance VI_01 {
state MASTER
interface eth0
virtual_router_id 151
priority 110
# The virtual ip address shared between the two NGINX Web Server which will float
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 process identifier
router_id nginx
}
# Script to check whether Nginx is running or not
vrrp_script check_nginx {
script "/bin/check_nginx.sh"
interval 2
weight 50
}
# Virtual interface - The priority specifies the order in which the assigned interface to take over in a failover
vrrp_instance VI_01 {
state BACKUP
interface eth0
virtual_router_id 151
priority 100
# The virtual ip address shared between the two NGINX Web Server which will float
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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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
この時点で、NginxとKeepalivedがインストールおよび構成されています。 Nginxの高可用性が機能するかどうかをテストするときが来ました。
Webブラウザーを開き、URL http:// your-virtual-ipにアクセスします 。次のページが表示されます:
次に、マスターノードでNginxサービスを停止し、仮想IPがノード1からノード2に切り替えられるかどうかをテストします。
マスターノードで、次のコマンドを使用してNginxサービスを停止します。
systemctl stop nginx
次に、Node2にログインし、次のコマンドを使用して仮想IPを確認します。
ip add show
次の出力に仮想IPが表示されます。
1: lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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を使用してNginxWebサーバーにアクセスします。 。 Node2ページが表示されます:
おめでとう!これで、Keepalivedを使用して高可用性Nginxサーバーを正常にセットアップできました。実稼働環境で可用性の高いNginxサーバーをセットアップするための十分な知識が得られたことを願っています。