Linuxにおける高可用性/クラスタリングの設定と維持方法
高可用性 (HA) は、システムが長期間にわたり故障することなく継続的に動作する品質を指します。HAソリューションはハードウェアおよび/またはソフトウェアを使用して実装でき、HAを実装するための一般的なソリューションの1つはクラスタリングです。
コンピュータにおいて、クラスタは、タスクを実行するために協力する2台以上のコンピュータ(一般的にノードまたはメンバーとして知られています)で構成されています。このような設定では、一つのノードのみがサービスを提供し、主ノードが故障した場合には、二次ノードが引き継ぎます。
クラスタは4つの主要なタイプに分類されます:
- ストレージ: クラスター内のサーバー間で一貫したファイルシステムイメージを提供し、サーバーが単一の共有ファイルシステムに同時に読み書きできるようにします。
- 高可用性: 単一障害点を排除し、ノードが動作しなくなった場合に、サービスを1つのクラスターノードから別のノードにフェイルオーバーすることで実現します。
- ロードバランシング: ネットワークサービスリクエストを複数のクラスタノードに分配し、クラスタノード間でリクエストの負荷を均等にします。
- 高性能: 並列または同時処理を実行し、アプリケーションのパフォーマンスを向上させるのに役立ちます。
HAを提供するために広く使用されている別のソリューションは、レプリケーション(特にデータレプリケーション)です。レプリケーションは、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ウェブサーバーのインストール
次のコマンドを使用してNginxウェブサーバーをインストールしてください。
$ 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サービスを開始した後、両方のサーバーで操作を特定しテストするためのカスタムウェブページを作成する必要があります。以下に示すように、デフォルトの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」というシステムユーザーが作成されます。したがって、「pcs」に必要な認証を設定する必要があります。「hacluster」ユーザーの新しいパスワードを作成することから始めましょう。このパスワードはすべてのサーバーで同じにする必要があります。
$ sudo passwd hacluster
次に、サーバーの1つ(Node1)で、pcsに必要な認証を設定するために次のコマンドを実行します。
$ sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force
さて、クラスターを作成し、いくつかのノードでそれを構成します(クラスター名は15文字を超えることができません。この例では、exampleclusterを使用しています)Node1サーバーで。
$ 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 はまだクラスターで有効です。さらに、クラスタリソース/サービスが設定されていません。
クラスタオプションの設定
最初の選択肢は、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は、特定のインターフェースに厳密に束縛されていないIPを指す技術的な一般用語です。
この場合、これは高可用性クラスタのフェイルオーバーをサポートするために使用されます。フローティングIPはフェイルオーバーの状況だけでなく、他にもいくつかの使用例があることを心に留めておいてください。私たちは、クラスタのアクティブなメンバーだけが任意の時点でフローティングIPを「所有する」または応答するように、クラスタを設定する必要があります。
2つのクラスターリソースを追加します:“floating_ip”と呼ばれる浮動IPアドレスリソースと、“http_server”と呼ばれるNginxウェブサーバーのリソースです。
最初に、次のようにfloating_ipを追加します。この例では、私たちのfloating 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)にあるかと、どの標準に準拠しているかを示しています。
- 「op monitor interval=60s」: Pacemakerにこのサービスの健康状態を毎分エージェントのモニターアクションを呼び出してチェックするよう指示します。
次に、2番目のリソースであるhttp_serverを追加します。ここで、サービスのリソースエージェントは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 ” が一覧表示されています。primaryノードが稼働中のため、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ウェブページにアクセスできるようになっているはずです。
別の方法として、次のコマンドをノードの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 サービスを追加する方法を実演しました。共有したい考えや質問がある場合は、以下のフィードバックフォームを利用してください。








