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


ハイアベイラビリティ HA )とは、単に障害なく長期間にわたって継続的に動作するシステムの品質のことです。 HAソリューションはハードウェアまたはソフトウェア、あるいはその両方を使用して実装でき、HAを実装するための一般的なソリューションの1つはクラスタリングです。

コンピューティングでは、クラスターは、タスクを実行するために連携して動作する2つ以上のコンピューター(一般にノードまたはメンバーとして知られる)で構成されています。このような設定では、1つのノードだけが、失敗した場合に引き継ぐ2次ノードにサービスを提供します。

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

  • Storage: provide a consistent file system image across servers in a cluster, allowing the servers to simultaneously read and write to a single shared file system.
  • High Availability: eliminate single points of failure and by failing over services from one cluster node to another in case a node goes becomes inoperative.
  • Load Balancing: dispatch network service requests to multiple cluster nodes to balance the request load among the cluster nodes.
  • High Performance: carry out parallel or concurrent processing, thus helping to improve performance of applications.

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

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

  • Node1: 192.168.10.10
  • Node2: 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]

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のインストールと設定

次に、次のように各ノードに Pacemaker Corosync 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)で次のコマンドを実行して、 PC に必要な認証を設定します。

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

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

$ 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 を無効にするには、次のコマンドを実行します。

$ sudo pcs property set stonith-enabled=false

次に、次のコマンドを実行して定足数ポリシーを無視します。

$ sudo pcs property set no-quorum-policy=ignore

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

$ sudo pcs property list

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

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

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

以下のように、まず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: is the name of the service.
  • “ocf:heartbeat:IPaddr2”: tells Pacemaker which script to use, IPaddr2 in this case, which namespace it is in (pacemaker) and what standard it conforms to ocf.
  • op monitor interval=60s”: instructs Pacemaker to check the health of this service every one minutes by calling the agent’s monitor action.

次に、 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

コマンドの出力を見ると、“ floating_ip” “ http_server” の2つの追加リソースがリストされています。プライマリノードが稼働中のため、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 

最後の重要なステップは、高可用性設定が機能することをテストすることです。ウェブブラウザを開き、アドレス 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ウェブページにアクセスできるはずです。

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

 
$ sudo crm_resource --resource http_server --force-stop 

その後、 crm_mon をインタラクティブモード(デフォルト)で2分以内の監視間隔で実行する必要があります。 http_server が失敗して移動したことをクラスタが確認できるはずです別のノードに送信してください。

クラスタサービスを効率的に実行するには、いくつかの制約を設定する必要があります。すべての使用コマンドの一覧については、 pcs のmanページ(man pcs)をご覧ください。

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

このガイドでは、Ubuntu 16.04/18.04およびCentOS 7で高可用性/クラスタリング/レプリケーションを展開、設定、および維持する方法の基本を説明しました。NginxHTTPサービスをクラスタに追加する方法を説明しました。ご意見やご質問がありましたら、下記のフィードバックフォームをご利用ください。