🌐
自宅サーバーのNginxを冗長化してみた
自宅サーバーのNginxを冗長化してみた
初めに
Proxmoxでクラスタリングをしていても、Nginxが動いている物理サーバーが落ちるとWebサービスがすべて止まってしまうという問題がありました。特に家庭用の自宅サーバー環境では、ハードやソフトの安定性が商用環境に比べて弱く、再起動やクラッシュは避けられません。そこで、Keepalived を使ってNginxを冗長化し、どちらかのノードが落ちてもサービスを継続できるようにしました。
構成
- 物理ノード2台 (Proxmox VE)
- 各ノード上に LXC コンテナで Nginx を配置
- VIP (Virtual IP) を Keepalived で制御
- LAN内のアドレス設計
ノード | IP | 役割 |
---|---|---|
nginx1 | 192.168.0.96 | MASTER |
nginx2 | 192.168.0.97 | BACKUP |
VIP | 192.168.0.95 | 仮想IP |
ルータのポートフォワーディングは VIP (192.168.0.95) に設定することで、外部からアクセスしても常にアクティブなNginxへ接続されるようにしています。
手順
1. LXCコンテナの複製
既存のNginxコンテナをフルクローンして2台目に配置しました。
2. Keepalivedの導入
両方のLXCにインストール。
apt update -y
apt install keepalived -y
nginx1 (MASTER) の /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.0.95
}
}
nginx2 (BACKUP) の /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.0.95
}
}
実際のテスト
- MASTER 側コンテナで VIP を確認
ip addr show eth0
192.168.0.96/24
192.168.0.95/32 ← VIPが割り当てられている
- VIPに対して ping 実行
ping 192.168.0.95
- 応答は nginx1 (MASTER) から返ってきます。
- MASTERをシャットダウンしてみる
shutdown -h now
- ssh接続が切断され、ネットワークから消えます。
- BACKUP 側で VIPの引き継ぎを確認
ip addr show eth0
192.168.0.97/24
192.168.0.95/32 ← VIPがBACKUPに移動
- VIP経由でNginxにアクセス
curl http://192.168.0.95
- ページが正常に返ってくることを確認。
まとめ
これで、どちらかのサーバーやNginxコンテナが落ちても、もう一方がVIPを引き継いでサービスを継続できることが確認できました。
Keepalivedを利用することでシンプルに冗長化を実現できたのは大きなメリットです。
今後は、コンフィグや、Let's Encryptの証明書更新を両ノードで同期させる仕組みを追加して、さらに安定性を高めていきたいです。
Discussion