サーバー設定 · 3 min read · Nov 29, 2025
Pacemaker、Corosync、Crmshを使用してUbuntu 16.04でNginxの高可用性を設定する方法
このチュートリアルでは、Pacemaker、Corosync、Crmshを使用して、高可用性のクラスタ型Nginxウェブサーバーを作成する方法をステップバイステップで説明します。Ubuntu 16.04上でPacemakerを使用して、アクティブ-パッシブクラスタまたはフェイルオーバークラスタNginxウェブサーバーを作成します。
Pacemakerは、サービスの最大高可用性を実現するオープンソースのクラスターマネージャーソフトウェアです。2007年からClusterLabsによって開発された高度でスケーラブルなHAクラスターマネージャーです。
Corosyncクラスタエンジンは、2008年にOpenAISプロジェクトから派生したオープンソースプロジェクトで、BSDライセンスの下でリリースされています。アプリケーション内で高可用性を実装するための追加機能を持つグループ通信システムです。
Pacemakerインターフェース用のアプリケーションはいくつかあり、Crmshはその1つです。Pacemaker高可用性スタックを管理するためのPacemakerコマンドラインインターフェースです。CrmshはPythonで書かれています。Crmshコマンドラインツールを使用して、Pacemaker HAスタックを作成、構成、トラブルシューティングできます。
前提条件
- 三つのUbuntu 16.04サーバー - web01 10.0.15.11
- web02 10.0.15.12
- web03 10.0.15.13
- フローティングIPアドレス 10.0.15.15
- ルート権限
何をするのか?
- ホストファイルのマッピング。
- Nginxのインストールと構成。
- Pacemaker、Corosync、Crmshのインストール。
- Corosyncキーの構成。
- すべてのサービスを開始。
- クラスタを作成し構成する。
- テスト。
ステップ1 - ホストファイルのマッピング
注意:
ステップ1 - 3をすべてのサーバー ‘web01’、’web02’、’web03’ で実行します。
このチュートリアルでは、3つのUbuntu 16.04サーバーを使用し、それぞれにユニークなホスト名 ‘web01’、’web02’、’web03’ があります。各サーバーは、サーバーのホスト名を使用して他のサーバーに接続できます。
それを実現するために、すべてのサーバーで’/etc/hosts’ファイルをvimで編集します。
vim /etc/hosts以下の/etc/hosts構成を貼り付けます。
10.0.15.11 web01
10.0.15.12 web02
10.0.15.13 web03
10.0.15.15 ha-web.coファイルを保存してvimを終了します。
次に、各ホスト名を介して他のサーバーにpingを送信して、すべてのサーバーをテストします。
ping -c 3 web01
ping -c 3 web02
ping -c 3 web03
ステップ2 - Nginxのインストールと構成
次に、Pacemakerを使用してフェイルオーバークラスタを作成することにより、Nginxウェブサーバーの高可用性セットアップを作成し始めます。最初に各サーバーノードにNginxをインストールする必要があります。
以下のaptコマンドでNginxをインストールします。
apt install -y nginxインストールが完了したら、各サーバーでユニークなページにNginxのデフォルトページを置き換えるために、以下のコマンドを実行します。
# 'web01'でコマンドを実行
echo 'web01 - hakase-labs
' > /var/www/html/index.html
# 'web02'でコマンドを実行
echo 'web02 - hakase-labs
' > /var/www/html/index.html
# 'web03'でコマンドを実行
echo 'web03 - hakase-labs
' > /var/www/html/index.html次に、ウェブサーバーを停止します。
systemctl stop nginxNginxのインストールと構成が完了しました。

ステップ3 - Pacemaker、Corosync、Crmshのインストール
Pacemakerはオープンソースのクラスターマネージャーアプリです。CorosyncはPacemaker用のクラスタエンジンで、CrmshはPacemakerクラスタを管理するためのPythonベースのツールです。これらのアプリケーションはすべてUbuntuリポジトリで入手できます。
以下のaptコマンドでPacemaker、Corosync、crmshをインストールします。
apt install -y pacemaker corosync crmshインストール後、これらのサービスはシステムで自動的に実行されます。以下のsystemctlコマンドで停止します。
systemctl stop corosync
systemctl stop pacemakerNginxの高可用性を提供するソフトウェアスタックがインストールされました。

ステップ4 - Corosyncの構成
注意:
ステップ4は ‘web01’サーバーでのみ実行します。
Ubuntu用のpcsdを使用していないため、Corosyncを手動で構成する必要があります。クラスタ認証用のCorosyncキーを生成し、’web01’サーバーに新しいCorosync構成ファイルを作成し、そのキーと構成を他のサーバー ‘web02’ と ‘web03’ にコピーします。
Corosyncキーを生成する前に、新しいパッケージ ‘haveged’ をインストールする必要があります。これは、Corosyncキー生成のためのより良いランダム数を取得するために使用されます。
以下のaptコマンドでリポジトリからhavegedをインストールします。
apt install -y haveged次に、以下のコマンドで新しいCorosyncキーを生成します。
corosync-keygenキー生成が完了すると、’/etc/corosync/‘ディレクトリに新しいキー ‘authkey’ が表示されます。
ls -lah /etc/corosync/
次に、’/etc/corosync’ディレクトリに移動し、デフォルトの構成ファイル ‘corosync.conf’ をバックアップします。
cd /etc/corosync/
mv corosync.conf corosync.conf.bekup次に、vimで新しい ‘corosync.conf’ 構成ファイルを作成します。
vim corosync.conf以下の構成をそのファイルに貼り付けます。
# Totemプロトコル構成
totem {
version: 2
cluster_name: hakase-cluster
transport: udpu
# Corosyncのインターフェース構成
interface {
ringnumber: 0
bindnetaddr: 10.0.15.0
broadcast: yes
mcastport: 5407
}
}
# ノードリスト - サーバーリスト
nodelist {
node {
ring0_addr: web01
}
node {
ring0_addr: web02
}
node {
ring0_addr: web03
}
}
# クォーラム構成
quorum {
provider: corosync_votequorum
}
# Corosyncログ構成
logging {
to_logfile: yes
logfile: /var/log/corosync/corosync.log
to_syslog: yes
timestamp: on
}
service {
name: pacemaker
ver: 0
}ファイルを保存してエディタを終了します。
次に、’web01’サーバーから ‘web02’ と ‘web03’ サーバーに認証キーと構成ファイルをコピーします。
scp /etc/corosync/* root@web02:/etc/corosync/
scp /etc/corosync/* root@web03:/etc/corosync/
すべてが完了したら、’web02’ と ‘web03’ サーバーに移動し、ファイルを確認します。
ssh root@web02
cd /etc/corosync/
ls -lah
Corosync構成が完了しました。
ステップ5 - すべてのクラスタサービスを開始
注意:
ステップ5はすべてのサーバーで実行します。
すべてのサーバーでHAクラスタソフトウェアスタック、PacemakerおよびCorosyncを開始します。次に、ブート時に自動的に開始するように設定します。
Corosyncを開始し、自動的にブート時に開始するように設定します。
systemctl start corosync
systemctl enable corosync次に、Pacemakerを開始し、ブート時に開始するように設定します。
systemctl start pacemaker
update-rc.d pacemaker defaults 20 01
systemctl enable pacemakerすべてのサービスが開始され、すべてのノードのサーバーステータスが ‘Online’ であることを確認します。
crm status
または、以下のcorosync-cmapctlコマンドでCorosyncメンバーのステータスを確認できます。
corosync-cmapctl | grep membersすべてのサーバーのIPアドレスが表示されます。

ステップ6 - クラスタを作成し構成する
注意:
ステップ6はweb01サーバーでのみ実行します。
このステップでは、crmshコマンドラインツールを使用してアクティブ-パッシブNginxクラスタを構成します。STONITHデバイスを使用していないため、STONITHを無効にし、クラスタのクォーラムポリシーを無視するようにします。
以下のcrmコマンドを実行して、’STONITH’を無効にし、クォーラムポリシーを無視します。
crm configure property stonith-enabled=false
crm configure property no-quorum-policy=ignore次に、以下のcrmコマンドでSTONITHのステータスとクォーラムポリシーを確認します。
crm configure show結果は以下のようになります。

次に、クラスタ用の新しいリソースをいくつか作成する必要があります。Pacemakerは以下のタイプのリソースエージェント(RA)をサポートしています。
- LSB(Linux Standard Based) - Linuxディストリビューションによって提供されます。例:’/etc/init.d/service’スクリプト。
- OCF(Open Cluster Framework) - クラスタコンピューティング用のツールセット。プロジェクトはLinux Foundationの一部です。
Nginx HAウェブサーバー用に、フローティングIP用の ‘virtual_ip’ とNginxサービス用の ‘webserver’ の2つのOCFリソースを作成する必要があります。
以下のcrmコマンドでフローティングIP構成用の新しい ‘virtual_ip’ リソースを作成します。
sudo crm configure primitive virtual_ip \
ocf:heartbeat:IPaddr2 params ip="10.0.15.15" \
cidr_netmask="32" op monitor interval="10s" \
meta migration-threshold="10"Nginx ‘webserver’用のリソースは、以下のコマンドで作成します。
sudo crm configure primitive webserver \
ocf:heartbeat:nginx configfile=/etc/nginx/nginx.conf \
op start timeout="40s" interval="0" \
op stop timeout="60s" interval="0" \
op monitor interval="10s" timeout="60s" \
meta migration-threshold="10"これが完了したら、以下のコマンドで新しいリソース ‘virtual_ip’ と ‘webserver’ を確認します。すべてのリソースが ‘started’ ステータスであることを確認します。
crm resource status
最後に、フェイルオーバーIPサービスの新しい構成のためのグループを追加する必要があります。フローティングIP上の ‘virtual_ip’ リソースで ‘webserver’リソース上の ‘Nginx’サービスを移行したいと考えています。
すでにフローティングIPとサービスを作成したので、以下のコマンドでそれらのリソースを ‘hakase_balancing’ という新しいグループに追加します。もちろん、ここで自分のグループ名を選択できますが、使用される場所で名前を置き換えることを確認してください。
sudo crm configure group hakase_balancing virtual_ip webserver新しいリソースグループ ‘hakase_balancing’ が定義されました。以下のコマンドで確認できます。
crm resource show‘hakase_balancing’という名前のグループが、メンバー ‘virtual_ip’ と ‘webserver’ リソースを持っていることがわかります。

クラスタ構成が完了しました。
ステップ7 - テスト
ノードのステータスとクラスタのステータスをテストします。
crm status
3つのノードが ‘Online’ ステータスです。
リソースグループ ‘hakase_balancing’ があり、現在 ‘web01’ ノードで実行中です。
ウェブブラウザからNginxウェブサーバーをテストします。フローティングIPアドレスにアクセスし、私のテストサーバーの名前は - ha-web.co です。ここで選択したサーバーの名前を使用してください。
すべてのリソースは ‘web01’ ノードにあります。
アクティブ-パッシブクラスタまたはフェイルオーバーのテスト
以下のコマンドを ‘web01’ ノードで実行して、クラスタを停止します。
crm cluster stop結果は ‘ INFO: クラスタサービスが停止しました ‘ となります。
次に、’web02’ ノードにログインしてクラスタのステータスを確認します。
crm status
今、’web01’ ノードが ‘Offline’ であり、virtual_ip と webserver のリソースが ‘web02’ ノードに切り替わった結果が得られます。
再度フローティングIP ‘ ha-web.co ‘ にアクセスすると、web02のページが表示されます。
Ubuntu 16.04でPacemaker、Corosync、Crmshを使用したNginxの高可用性が正常にインストールされ、テストされました。
参考文献
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。