このチュートリアルでは、Pacemaker、Corosync、Crmshを使用して高可用性クラスター化Nginxウェブサーバーを作成する方法を段階的に説明します。 Ubuntu 16.04でPacemakerを使用して、アクティブ-パッシブクラスターまたはフェールオーバークラスターNginxWebサーバーを作成します。
ペースメーカー は、サービスの最大の高可用性を実現するオープンソースのクラスターマネージャーソフトウェアです。これは、2007年からClusterLabsによって開発された高度でスケーラブルなHAクラスターマネージャーです。
Corosync Cluster Engineは、2008年のOpenAISプロジェクトから派生したオープンソースプロジェクトであり、BSDライセンスの下でリリースされています。これは、アプリケーション内に高可用性を実装するための追加機能を備えたグループ通信システムです。
PacemakerインターフェースとCrmshで利用できるアプリケーションがいくつかあります。 それらの1つです。これは、Pacemaker高可用性スタックを管理するためのPacemakerコマンドラインインターフェイスです。 CrmshはPythonで書かれています。 Crmshコマンドラインツールを使用して、Pacemaker HAスタックを作成、構成、およびトラブルシューティングできます。
前提条件
- 3台のUbuntu16.04サーバー
- web01 10.0.15.11
- web02 10.0.15.12
- web03 10.0.15.13
- フローティングIPアドレス10.0.15.15
- ルート権限
何をしますか?
- Hostsファイルのマッピング。
- Nginxをインストールして構成します。
- Pacemaker、Corosync、およびCrmshをインストールします。
- Corosyncキーを設定します。
- すべてのサービスを開始します。
- クラスターを作成して構成します。
- テスト。
注:
3つのサーバー「web01」、「web02」、「web03」すべてで手順1〜3を実行します。
このチュートリアルでは、3つのUbuntu 16.04サーバーを使用します。各サーバーには、「web01」、「web02」、「web03」という一意のホスト名があります。各サーバーは、サーバーのホスト名を使用して他のサーバーに接続できます。
これを実現するには、vimを使用してすべてのサーバーの「/ etc/hosts」ファイルを編集します。
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
次に、Pacemakerを使用してフェールオーバークラスターを作成することにより、NginxWebサーバーの高可用性セットアップの作成を開始します。最初に各サーバーノードにNginxをインストールする必要があります。
以下のaptコマンドを使用してNginxをインストールします。
apt install -y nginx
インストールが完了したら、以下のコマンドを実行して、nginxのデフォルトページを各サーバーの一意のページに置き換えます。これにより、後でどのサーバーがページを配信したかを特定できます。
#Run Command on 'web01'
echo '<h1>web01 - hakase-labs</h1>' > /var/www/html/index.html
#Run Command on 'web02'
echo '<h1>web02 - hakase-labs</h1>' > /var/www/html/index.html
#Run Command on 'web03'
echo '<h1>web03 - hakase-labs</h1>' > /var/www/html/index.html
次に、Webサーバーを停止します。
systemctl stop nginx
Nginxのインストールと構成が完了しました。
ステップ3-Pacemaker、Corosync、およびCrmshをインストールします
Pacemakerは、オープンソースのクラスターマネージャーアプリです。 CorosyncはPacemaker用のクラスターエンジンであり、CrmshはPacemakerクラスターを管理するためのPythonベースのツールです。これらのアプリケーションはすべて、Uubuntuリポジトリで利用できます。
以下のaptコマンドを使用して、Pacemaker、Corosync、およびcrmshをインストールします。
apt install -y pacemaker corosync crmsh
インストール後、これらのサービスはすべてシステム上で自動的に実行されます。以下のsystemctlコマンドで停止してください。
systemctl stop corosync
systemctl stop pacemaker
Nginxの高可用性を提供するソフトウェアスタックがインストールされました。
注:
「web01」サーバーでのみ手順4を実行します。
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 Protocol Configuration
totem {
version: 2
cluster_name: hakase-cluster
transport: udpu
# Interface configuration for Corosync
interface {
ringnumber: 0
bindnetaddr: 10.0.15.0
broadcast: yes
mcastport: 5407
}
}
# Nodelist - Server List
nodelist {
node {
ring0_addr: web01
}
node {
ring0_addr: web02
}
node {
ring0_addr: web03
}
}
# Quorum configuration
quorum {
provider: corosync_votequorum
}
# Corosync Log configuration
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/* [email protected]:/etc/corosync/
scp /etc/corosync/* [email protected]:/etc/corosync/
すべてが完了したら、「web02」サーバーと「web03」サーバーに移動し、ファイルを確認します。
ssh [email protected]
cd /etc/corosync/
ls -lah
Corosyncの設定が完了しました。
注:
すべてのサーバーで手順5を実行します。
すべてのサーバーで、HAクラスターソフトウェアスタック、ペースメーカー、およびcorosyncを起動します。次に、起動時に自動的に起動するようにします。
Corosyncを起動して追加し、起動時に自動的に起動します。
systemctl start corosync
systemctl enable corosync
次に、ペースメーカーを起動し、起動時に起動できるようにします。
systemctl start pacemaker
update-rc.d pacemaker defaults 20 01
systemctl enable pacemaker
すべてのサービスが開始されました。すべてのノードをチェックし、すべてのノードでサーバーのステータスが「オンライン」であることを確認してください。
crm status
または、以下のcorosync-cmapctlコマンドを使用してCorosyncメンバーを確認することでステータスを確認できます。
corosync-cmapctl | grep members
すべてのサーバーIPアドレスが表示されます。
注:
web01サーバーでのみ手順6を実行します
このステップでは、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)-クラスターコンピューティング用のツールセット。このプロジェクトはLinuxFoundationの一部です。
Nginx HAウェブサーバーの場合、2つのOCFリソースを作成する必要があります。フローティングIP用の「virtual_ip」とnginxサービス用の「webserver」です。
以下の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」を確認します。すべてのリソースのステータスが「開始済み」であることを確認してください。
crm resource status
最後に、フェールオーバーIPサービスの新しい構成用のグループを追加する必要があります。 「webserver」リソースの「Nginx」サービスを「virtual_ip」リソースのフローティングIPで移行したいと考えています。
すでにフローティングIPとサービスを作成しました。次に、以下のコマンドを使用して、これらのリソースを「hakase_balancing」という名前の新しいグループに追加します。もちろん、ここで独自のグループ名を選択できます。名前は、使用されている場所で必ず置き換えてください。
sudo crm configure group hakase_balancing virtual_ip webserver
'hakase_balancing'という名前の新しいリソースグループが定義されました。以下のコマンドで確認できます。
crm resource show
メンバー「virtual_ip」および「webserver」リソースを持つhakase_balancingという名前のグループを取得します。
クラスターの構成が完了しました。
ノードステータスとクラスタステータスをテストします。
crm status
ステータスが「オンライン」のノードが3つあります。
「hakase_balancing」という名前のリソースグループがあり、「web01」ノードで実行されています。
WebブラウザからNginxWebサーバーをテストします。フローティングIPアドレスにアクセスします。私のテストサーバーの名前は-ha-web.co 。ここでサーバーに選択した名前を使用してください。
すべてのリソースは「web01」ノードにあります。
アクティブ-パッシブクラスターまたはフェイルオーバーのテスト
「web01」ノードで以下のコマンドを実行して、「web01」サーバー上のクラスターを停止します。
crm cluster stop
結果が表示されます'情報:クラスタサービスが停止しました '。
次に、「web02」ノードにログインして、クラスターのステータスを確認します。
crm status
これで、「web01」ノードが「オフライン」になり、virtual_ipとwebserverのリソースがノード「web02」に切り替えられるという結果が得られました。
フローティングIPに再度アクセスすると' ha-web.co '、web02ページが表示されます。
Ubuntu 16.04でのPacemaker、Corosync、CrmshによるNginx高可用性が正常にインストールされ、テストされました。