ウェブサイト検索

Linux で高可用性/クラスタリングを構成および維持する方法


高可用性 (HA) とは、長期間にわたって障害なく継続的に動作するシステムの品質を指します。 HA ソリューションはハードウェアやソフトウェアを使用して実装でき、HA を実装するための一般的なソリューションの 1 つはクラスタリングです。

コンピューティングでは、クラスターはタスクを実行するために連携して動作する 2 つ以上のコンピューター (一般にノード またはメンバー と呼ばれます) で構成されます。このような設定では、1 つのノードだけがサービスを提供し、障害が発生した場合はセカンダリ ノードが引き継ぎます。

クラスターは、次の 4 つの主要なタイプに分類されます。

  • ストレージ: クラスタ内のサーバー間で一貫したファイル システム イメージを提供し、サーバーが単一の共有ファイル システムに対して同時に読み書きできるようにします。
  • 高可用性: ノードが動作不能になった場合にサービスをあるクラスタ ノードから別のクラスタ ノードにフェイルオーバーすることで、単一障害点を排除します。
  • 負荷分散: ネットワーク サービス リクエストを複数のクラスタ ノードにディスパッチして、クラスタ ノード間でリクエストの負荷のバランスをとります。
  • 高パフォーマンス: 並列処理または同時処理を実行し、アプリケーションのパフォーマンスの向上に役立ちます。

HA を提供するために広く使用されているもう 1 つのソリューションは、レプリケーション (特にデータ レプリケーション) です。レプリケーションは、1 つ以上の (セカンダリ) データベースを 1 つのプライマリ (またはマスター) データベースと同期させるプロセスです。

クラスターをセットアップするには、少なくとも 2 つのサーバーが必要です。このガイドでは、次の 2 つの Linux サーバーを使用します。

  • ノード1: 192.168.10.10
  • ノード2: 192.168.10.11

この記事では、Ubuntu 16.04/18.04 および CentOS 7 で高可用性/クラスタリングを展開、構成、維持する方法の基本を説明します。Nginx HTTP サービスをクラスターに追加する方法を説明します。

各サーバーでのローカル DNS 設定の構成

2 つのサーバーが相互に通信できるようにするには、両方のサーバーの /etc/hosts ファイルで適切なローカル DNS 設定を構成する必要があります。

お気に入りのコマンド ライン エディタを使用してファイルを開いて編集します。

sudo vim /etc/hosts  

サーバーの実際の IP アドレスを使用して次のエントリを追加します。

192.168.10.10	node1.example.com
192.168.10.11 	node2.example.com

変更を保存してファイルを閉じます。

Nginx Webサーバーのインストール

次に、次のコマンドを使用して Nginx Web サーバーをインストールします。

sudo apt install nginx  [On Ubuntu]
sudo yum install epel-release && sudo yum install nginx [On CentOS 7]

インストールが完了したら、とりあえず Nginx サービスを起動し、起動時の自動起動を有効にしてから、systemctl コマンドを使用して起動して実行中かどうかを確認します。
Ubuntu では、パッケージの事前構成が完了した直後にサービスが自動的に開始されます。これを有効にするだけで済みます。

sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

Nginx サービスを開始した後、両方のサーバーでの操作を識別してテストするためのカスタム Web ページを作成する必要があります。デフォルトの Nginx インデックス ページの内容を次のように変更します。

echo "This is the default page for node1.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS1
echo "This is the default page for node2.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS2

Corosync と Pacemaker のインストールと構成

次に、 次のように各ノードにPacemakerCorosync、およびPcsをインストールする必要があります。

sudo apt install corosync pacemaker pcs	#Ubuntu 
sudo yum install corosync pacemaker pcs	#CentOS 

インストールが完了したら、pcs デーモンが両方のサーバーで実行されていることを確認します。

sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl status pcsd

クラスターの作成

インストール中に、「hacluster 」 というシステム ユーザーが作成されます。そのためパソコンに必要な認証を設定する必要があります。まず、「hacluster」 ユーザーの新しいパスワードを作成します。すべてのサーバーで同じパスワードを使用する必要があります。

sudo passwd hacluster

次に、サーバーの 1 つ (Node1) で次のコマンドを実行して、pc に必要な認証を設定します。

sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force

ここでクラスターを作成し、ノード 1 サーバー上にいくつかのノードを追加します (クラスター名は 15 文字を超えることはできません。この例ではexamplecluster を使用しています)。

sudo pcs cluster setup --name examplecluster node1.example.com node2.example.com 

ここで、ブート時にクラスターを有効にし、サービスを開始します。

sudo pcs cluster enable --all
sudo pcs cluster start --all

次に、次のコマンドを使用して、クラスター サービスが稼働しているかどうかを確認します。

sudo pcs status
OR
sudo crm_mon -1

上記のコマンドの出力から、STONITH デバイスが存在しないにもかかわらず、クラスター内で STONITH がまだ有効であるという警告が表示されていることがわかります。また、クラスターのリソース/サービスは構成されていません。

クラスターオプションの構成

最初のオプションは、Pacemaker のフェンシング実装である STONITH ( またはShoot The Other Node In The Head) を無効にすることです。

このコンポーネントは、同時アクセスによるデータの破損を防ぐのに役立ちます。このガイドでは、デバイスを構成していないため、これを無効にします。

STONITH をオフにするには、次のコマンドを実行します。

sudo pcs property set stonith-enabled=false

次に、次のコマンドを実行して、クォーラム ポリシーも無視します。

sudo pcs property set no-quorum-policy=ignore

上記のオプションを設定した後、次のコマンドを実行してプロパティ リストを表示し、上記のオプションであるstonithクォーラム ポリシーが無効になっていることを確認します。

sudo pcs property list

リソース/クラスターサービスの追加

このセクションでは、クラスター リソースを追加する方法を見ていきます。同じネットワークまたはデータセンター内のあるサーバーから別のサーバーに即座に移動できる IP アドレスであるフローティング IP を構成します。つまり、フローティング IP は技術的な共通用語であり、単一のインターフェイスに厳密にバインドされていない IP に使用されます。

この場合、高可用性クラスターでのフェールオーバーをサポートするために使用されます。フローティング IP はフェイルオーバーの場合だけでなく、他にもいくつかの使用例があることに注意してください。いつでもクラスターのアクティブなメンバーだけがフローティング IP を「所有」するか、フローティング IP に応答するようにクラスターを構成する必要があります。

2 つのクラスター リソースを追加します。「floating_ip 」というフローティング IP アドレス リソースと、「http_server 」という Nginx Web サーバー用のリソースです。

まず、次のように Floating_ip を追加することから始めます。この例では、フローティング IP アドレスは192.168.10.20 です。

sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s

どこ :

  • floating_ip: サービスの名前です。
  • 「ocf:heartbeat:IPaddr2 」: Pacemaker に、どのスクリプト (この場合は IPaddr2) を使用するか、どの名前空間 (pacemaker) にあるか、どの規格が ocf に準拠しているかを指示します。
  • opmonitorinterval=60s」:エージェントの監視アクションを呼び出して、このサービスの状態を 1 分ごとにチェックするように Pacemaker に指示します。

次に、http_server という名前の 2 番目のリソースを追加します。ここで、サービスのリソース エージェントはocf:heartbeat:nginxです。

sudo pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor timeout="20s" interval="60s"

クラスター サービスを追加したら、次のコマンドを発行してリソースのステータスを確認します。

sudo pcs status resources

コマンドの出力を見ると、2 つの追加リソース、「floating_ip 」「http_server 」 がリストされています。プライマリノードが稼働中のため、Floating_ip サービスはオフになっています。

システムでファイアウォールが有効になっている場合は、ノード間の通信を適切に行うために、Nginx とすべての高可用性サービスへのすべてのトラフィックがファイアウォールを通過できるようにする必要があります。

-------------- CentOS 7 -------------- 
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=high-availability		
sudo firewall-cmd --reload

-------------- Ubuntu -------------- 
sudo ufw allow http	
sudo ufw allow high-availability						
sudo ufw reload 

高可用性/クラスタリングのテスト

最後の重要なステップは、高可用性セットアップが機能することをテストすることです。 Web ブラウザを開いてアドレス 192.168.10.20 に移動すると、スクリーンショットに示すように、node2.example.com からデフォルトの Nginx ページが表示されます。

障害をシミュレートするには、次のコマンドを実行して node2.example.com 上のクラスターを停止します。

sudo pcs cluster stop http_server

次に、192.168.10.20 でページをリロードすると、node1.example.com からデフォルトの Nginx Web ページにアクセスできるようになります。

あるいは、ノードの 1 つで次のコマンドを使用して、どのノードでもクラスターを停止せずに、サービスに直接停止するように指示することで、エラーをシミュレートすることもできます。

 
sudo crm_resource --resource http_server --force-stop 

次に、対話モード (デフォルト) で crm_mon を実行する必要があります。監視間隔 2 分以内に、http_server が失敗したことを示すクラスター通知が表示され、移動できるはずです。それを別のノードに転送します。

クラスター サービスを効率的に実行するには、いくつかの制約を設定する必要がある場合があります。すべての使用コマンドのリストについては、pcs マニュアル ページ (man pcs) を参照してください。

Corosync と Pacemaker の詳細については、https://clusterlabs.org/ をご覧ください。

まとめ

このガイドでは、Ubuntu 16.04/18.04 および CentOS 7 で高可用性/クラスタリング/レプリケーションを展開、構成、維持する方法の基本を説明しました。Nginx HTTP サービスをクラスターに追加する方法を示しました。共有したい考えや質問がある場合は、以下のフィードバック フォームを使用してください。