サーバー設定 · 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
  • ルート権限

何をするのか?

  1. ホストファイルのマッピング。
  2. Nginxのインストールと構成。
  3. Pacemaker、Corosync、Crmshのインストール。
  4. Corosyncキーの構成。
  5. すべてのサービスを開始。
  6. クラスタを作成し構成する。
  7. テスト。

ステップ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

すべてのサーバーにpingを送信

ステップ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 nginx

Nginxのインストールと構成が完了しました。

Ubuntu 16.04でNginxをインストールおよび構成

ステップ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 pacemaker

Nginxの高可用性を提供するソフトウェアスタックがインストールされました。

Ubuntu 16.04でPacemaker、Corosync、Crmshをインストール

ステップ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/

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/

web01ノードから他のノードへのCorosync構成をコピー

すべてが完了したら、’web02’ と ‘web03’ サーバーに移動し、ファイルを確認します。

ssh root@web02  
cd /etc/corosync/  
ls -lah

web02ノードのCorosync構成

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アドレスが表示されます。

Corosyncメンバーリスト

ステップ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

結果は以下のようになります。

STONITHを無効にし、クォーラムポリシーを無視

次に、クラスタ用の新しいリソースをいくつか作成する必要があります。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

クラスタに新しいVirtual_ipとWebserverリソースを追加

最後に、フェイルオーバー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

Ubuntu 16.04でのNginx高可用性クラスタ

今、’web01’ ノードが ‘Offline’ であり、virtual_ip と webserver のリソースが ‘web02’ ノードに切り替わった結果が得られます。

再度フローティングIP ‘ ha-web.co ‘ にアクセスすると、web02のページが表示されます。

Ubuntu 16.04でPacemaker、Corosync、Crmshを使用したNginxの高可用性が正常にインストールされ、テストされました。

参考文献

Share: X/Twitter LinkedIn

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

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