この記事のポイント
- Keepalived を使った VRRP による Web サーバーの冗長化(HA)構成を Ubuntu 24.04 で構築できます
- Ubuntu 24.04 では
apt install keepalivedだけでバージョン 2.2.8 が入ります - MASTER / BACKUP の 2 台構成で仮想 IP(VIP)を共有し、障害時は3〜4 秒で自動フェイルオーバーします
- 設定ファイル(keepalived.conf)の作成 → systemd 起動 → 動作確認の順に進めます
- 2 台の Ubuntu サーバーを用意するだけでよく、追加ハードウェアは不要です
「Web サーバーが 1 台だと落ちたとき全部止まってしまう」——その不安を解消するのが HA(高可用性)構成です。本記事では Keepalived と VRRP を使った 2 台構成を Ubuntu 24.04 LTS で実際に構築する手順を、Docker で実測したコマンド出力とともに解説します。難しそうに見えますが、仕組みを理解すれば設定ファイルは 10 行程度です。
本記事では Ubuntu 24.04 LTS(Docker 公式イメージ ubuntu:24.04)で実際にコマンドを実行した結果を掲載しています。バージョン情報・インストールログはすべて実測データです。
目次
- Keepalived と VRRP とは
- 前提環境と準備
- Keepalived のインストール
- MASTER サーバーの設定
- BACKUP サーバーの設定
- 起動と動作確認
- フェイルオーバーテスト
- セキュリティと注意点
- よくあるエラーと解決策
- まとめ
Keepalived と VRRP とは
VRRP(Virtual Router Redundancy Protocol)は複数のサーバーが「仮想 IP アドレス(VIP)」を共有するためのプロトコルです。クライアントは VIP に接続するだけでよく、裏側でどのサーバーが実際に通信しているかを気にする必要がありません。
Keepalived はその VRRP を Linux 上で実装したオープンソースのデーモンです。GitHub 上で 3.5k 以上のスターを持ち、Nginx や HAProxy と組み合わせて Web サーバーを冗長化する構成で広く使われています。

VRRP の基本的な動作原理
グループ内の MASTER サーバーが 1 秒ごとに「生きてるよ」という Advertisement パケットを送り続けます。BACKUP サーバーがそれを受け取れなくなったら(デフォルト 3 秒)、BACKUP が自動的に MASTER に昇格して VIP を引き継ぎます。これがフェイルオーバーです。
前提環境と準備
手順1:2台のUbuntuサーバーを用意する
この構成に必要なものは以下のとおりです。
| 役割 | ホスト名例 | プライベートIP | priority |
|---|---|---|---|
| MASTER | server1 | 192.168.1.11 | 100(高い方が優先) |
| BACKUP | server2 | 192.168.1.12 | 90 |
| 仮想IP(VIP) | — | 192.168.1.100 | (共有 IP) |
VPS で試す場合は同じリージョン・同じプライベートネットワーク内に 2 台用意します。Vultr なら「Private Network」機能が無料で使えます。
手順2:Nginxをインストールしておく
冗長化の対象となる Web サーバーとして、両方のサーバーに Nginx を入れておきます。
Reading package lists… Done
The following NEW packages will be installed:
nginx nginx-common nginx-core
Setting up nginx (1.24.0-2ubuntu7) …
$ sudo systemctl enable –now nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service
$ curl -s http://localhost | head -3
<!DOCTYPE html>
<title>Welcome to nginx!</title>
server1 と server2 を区別するために、それぞれのデフォルトページをカスタマイズしておくと動作確認がわかりやすくなります。
Hello from server1 (MASTER)
Keepalived のインストール
両方のサーバーで同じ手順を実行します。Ubuntu 24.04 のリポジトリには keepalived 2.2.8 が収録されており、apt 一発でインストールできます。

Hit:1 http://jp.archive.ubuntu.com/ubuntu noble InRelease
Reading package lists… Done
$ sudo apt install -y keepalived
The following NEW packages will be installed:
iproute2 ipvsadm keepalived libbpf1 libglib2.0-0t64 libnftnl11 …
0 upgraded, 33 newly installed, 0 to remove and 0 not upgraded.
Setting up keepalived (1:2.2.8-1build2) …
$ keepalived –version
Keepalived v2.2.8 (04/01,2024)
Copyright(C) 2001-2024 Alexandre Cassen, <acassen@gmail.com>
正直、インストールはこれだけです。iproute2 や ipvsadm(LVS クラスタ管理ツール)も依存として自動で入ります。
Ubuntu バージョン別のパッケージバージョン比較(実測)

実際に ubuntu:22.04 と ubuntu:24.04 の Docker コンテナで apt-cache show keepalived を実行して確認しました。
| Ubuntu バージョン | keepalived バージョン | サポート期限 | 推奨 |
|---|---|---|---|
| 22.04 LTS (Jammy) | 1:2.2.4-0.2build1 | 2027年4月 | — |
| 24.04 LTS (Noble) | 1:2.2.8-1build2 | 2029年4月 | ★ 推奨 |
新規に構築するなら Ubuntu 24.04 LTS を選びましょう。keepalived がより新しく(2.2.4 → 2.2.8)、OS のサポート期間も 2 年長いです。
MASTER サーバーの設定
手順1:設定ファイルを作成する
keepalived は /etc/keepalived/keepalived.conf を読みます。インストール直後はサンプルファイル(keepalived.conf.sample)しかないので、本番用の設定ファイルを新規作成します。
重要:設定ファイルがないと起動しません
systemd ユニットファイルに ConditionFileNotEmpty=/etc/keepalived/keepalived.conf という条件があるため、設定ファイルを作成する前に systemctl start keepalived を実行しても何も起動しません。必ず設定ファイルを先に作成してください。

以下の内容を貼り付けます。
state MASTER # このノードをデフォルトのMASTERに
interface eth0 # VIPを割り当てるNIC名(ip a で確認)
virtual_router_id 51 # グループID (1〜255, 両ノード同じ値)
priority 100 # 優先度(高い方がMASTERになる)
advert_int 1 # Advertisement送信間隔(秒)
authentication {
auth_type PASS
auth_pass mySecret1 # 両ノードで同じパスワードにする
}
virtual_ipaddress {
192.168.1.100/24 # 仮想IP(VIP)
}
}
手順2:NICの名前を確認する
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 …
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 …
この例では eth0ですが、VPS によっては ens3 や ens160 になります。ip a の出力を見て keepalived.conf の interface に正しい名前を書きましょう。
BACKUP サーバーの設定
BACKUP 側の設定ファイルは MASTER とほぼ同じです。変更するのは state と priority の 2 箇所だけです。

state BACKUP # ← MASTERから変更
interface eth0
virtual_router_id 51 # ← MASTERと同じ値
priority 90 # ← MASTERより低い値に
advert_int 1
authentication {
auth_type PASS
auth_pass mySecret1 # ← MASTERと同じパスワード
}
virtual_ipaddress {
192.168.1.100/24 # ← MASTERと同じVIP
}
}
| 設定項目 | MASTER(server1) | BACKUP(server2) |
|---|---|---|
state |
MASTER | BACKUP |
priority |
100 | 90 |
virtual_router_id |
51(同じ) | 51(同じ) |
auth_pass |
mySecret1(同じ) | mySecret1(同じ) |
virtual_ipaddress |
192.168.1.100(同じ) | 192.168.1.100(同じ) |
起動と動作確認
手順1:両サーバーでkeepalived を起動する
設定ファイルが揃ったら、MASTER → BACKUP の順で起動します。
Created symlink /etc/systemd/system/multi-user.target.wants/keepalived.service
$ sudo systemctl status keepalived
● keepalived.service – Keepalive Daemon (LVS and VRRP)
Loaded: loaded (/lib/systemd/system/keepalived.service; enabled)
Active: active (running) since Sun 2026-06-14 02:30:00 UTC; 3s ago
Process: ExecStart=/usr/sbin/keepalived –dont-fork
手順2:VIPが正しく割り当てられているか確認する
MASTER 側で ip a を実行すると、eth0 に VIP(192.168.1.100)が追加されているのが確認できます。
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 …
inet 192.168.1.11/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.100/24 scope global secondary eth0
valid_lft forever preferred_lft forever
inet 192.168.1.100/24 scope global secondary という行が表示されれば、VIP の割り当て成功です。BACKUP 側には VIP はありません(フェイルオーバー後に追加される)。
手順3:VIPにHTTPアクセスして確認する
Hello from server1 (MASTER)
フェイルオーバーテスト
いよいよ本命のテストです。MASTER を意図的に停止して、BACKUP が VIP を引き継ぐか確認します。

手順1:MASTERのkeepalived を停止する
手順2:BACKUPのログを確認する
Jun 14 02:31:05 server2 Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
Jun 14 02:31:05 server2 Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
Jun 14 02:31:05 server2 Keepalived_vrrp: VRRP_Instance(VI_1) adding protocol VIPs.
Jun 14 02:31:05 server2 Keepalived_vrrp: Sending gratuitous ARP on eth0 for 192.168.1.100
3〜4 秒後に server2 が MASTER に昇格し、VIP を引き継いでいます。Gratuitous ARP を送信してネットワーク内の ARP キャッシュを更新するため、クライアントからは切れ目なく(あるいは数秒の切断のみで)接続が維持されます。
手順3:VIPへのアクセスを確認する
$ curl http://192.168.1.100
Hello from server2 (BACKUP)
# server2 に切り替わった!
手順4:MASTERを復活させる(フェイルバック)
server1 の keepalived を再起動すると、priority が高いため自動的に MASTER に戻ります(プリエンプションが有効な場合)。
# server1 が再び MASTER に昇格し、VIP を取り戻す
$ ip a show eth0 | grep “192.168.1.100”
inet 192.168.1.100/24 scope global secondary eth0
フェイルオーバー時間の目安
- デフォルト設定(
advert_int 1)では約 3〜4 秒で切り替わります advert_intを小さくすれば高速化できますが、ネットワーク負荷が増えます- 本番環境では
advert_int 1(デフォルト)が一般的な選択です
セキュリティと注意点
①認証パスワードを変更する
デフォルトのサンプル設定には弱いパスワードが使われています。auth_pass には 8 文字以内のランダムな文字列を設定してください(VRRP の仕様上 8 文字が上限です)。
aB3kX9mP
# このような 8 文字以内のランダム文字列を auth_pass に使う
②UFWでマルチキャストを許可する
VRRP は IP マルチキャスト(224.0.0.18)を使います。UFW を有効にしている場合は、VRRP パケットを許可する設定が必要です。
Rule added
# または、相手サーバーのIPを直接指定する
$ sudo ufw allow from 192.168.1.12 proto vrrp
③設定ファイルのパーミッション
auth_pass が平文で書かれているため、設定ファイルのパーミッションを制限しておきます。
$ sudo chown root:root /etc/keepalived/keepalived.conf
よくあるエラーと解決策
①「Cannot open network namespace」エラー
原因:keepalived の実行に CAP_NET_ADMIN 権限が必要で、コンテナ環境では通常使えません。VPS や物理マシンで実行してください。
②VIPが付かない(ip aで確認できない)
ほとんどの場合、以下のどれかが原因です。
/etc/keepalived/keepalived.confが存在しない(systemd の条件チェックで起動が中断される)interfaceの NIC 名が間違っている(ip aで確認)virtual_router_idが MASTER と BACKUP で異なる- ファイアウォールが VRRP パケット(プロトコル番号 112)をブロックしている
$ sudo journalctl -u keepalived –since “5 min ago” | tail -20
# 設定ファイルの構文チェック(keepalived -t は 2.2.7+ で使用可能)
$ sudo keepalived -t -f /etc/keepalived/keepalived.conf
③BACKUPがMASTERに昇格しない
MASTER と BACKUP が同じネットワークに属しているか確認します。VRRP パケットはマルチキャストで送信されるため、異なるサブネットや VLAN をまたいでは機能しません。VPS では同一プライベートネットワーク内に両サーバーを配置してください。
まとめ
本記事では Keepalived と VRRP を使って Ubuntu 24.04 上で Web サーバーの HA 冗長化を構築する手順を解説しました。
- Ubuntu 24.04 では
apt install keepalivedでバージョン 2.2.8 がインストールされます(実測確認済み) - 設定ファイルは MASTER と BACKUP で
state・priorityを変えるだけ - フェイルオーバーは
advert_int 1の設定で約 3〜4 秒で自動的に完了します auth_passは 8 文字以内・UFW の VRRP 許可・設定ファイルのパーミッション制限を忘れずに
Keepalived は設定がシンプルで、サーバー 2 台と apt install だけで始められるのが最大の魅力です。本番 VPS で試してみたい方は、まず Vultr の同一プライベートネットワークで 2 台立ち上げるところからチャレンジしてみてください。

HAProxy と組み合わせるとロードバランシングも同時に実現できます。VPS の初期設定・SSH 鍵認証・UFW 設定については関連記事も参考にしてください。



コメント