サーバー専門のフリーランスエンジニアです。クラウドサービスを利用してWebサイト、ITシステムのサーバー構成設計とサーバー構築を行います。はじめに少し前に「負荷分散用途のNginxサーバーをPacemakerで冗長化する」サーバー構成を構築する機会がありました。構築手順は、ほぼ、以下の記事のとおりです。技術メモメモhttps://tech-mmmm.blogspot.com/2022/06/nginxpacemaker.htmlここでは、構築の手順と、Pacemakerのリソース設定についての僕なりの解釈や、フェイルオーバーなど運用の注意点をまとめます。長いので、前後編に分けました。構築、操作手順は2023年4月時点のものです。IPアドレスが稼働している状態を「アクティブ」、稼働していない待機状態を「スタンバイ」といいます。サーバー構成サーバーは2台で、基本情報は以下のとおりです。192.168.1.178VIPが、外部へのサービス公開用IPアドレスとなります。アクティブな場合の構成図は以下のとおりです。アクセスできればOKとします。ように、FQDNのホスト名かつHTTPSでアクセスするよう設定してください。8のリポジトリから、Nginxをインストールします。nginxより新しいバージョンを使用したい場合は、Nginx公式サイトからソースをダウンロードしてビルドするか、Nginx公式リポジトリを設定し、インストールするとよいでしょう。packageshttp://nginx.org/en/linux_packages.html#RHEL※ここでは、Nginxの設定はデフォルトままとします。本番稼働するWebサーバーでは、VirtualHostやSSLの設定などを行ってください。ドキュメントルートにテスト用HTMLを設置します。それぞれのホスト名を表示するようにします。nginx)は不要です。※仮に自動起動設定をしていていも、「スタンバイ」のほうのNginxはPacemakerにより強制的に停止されます。Pacemakerの自動起動設定ソフトウェアPacemakerとCorosyncをインストール、設定します。設定の前に、以下のとおり、補足します。pcsコマンドで行います。pcsコマンドによる制御は、冗長構成のクラスターを構成する全サーバー間で通信されるため、基本的には、Pacemakerが稼働しているいずれか1台のサーバーで実行すればよいです。pcsコマンドの実行には、pcsdサービスが稼働している必要があります。ノードとリソースPacemakerでは、冗長構成に含まれるサーバーOSのことを、「ノード(Node)」と呼びます。冗長化の制御・監視対象を「リソース(Resource)」と呼びます。PacemakerとCorosyncの役割Pacemakerはクラスター制御、リソース監視および障害検出とリカバリーを担当し、Corosyncはクラスター通信層の制御、ノード死活監視を担当する。(と、僕は理解しました。IPアドレスを付与し、Nginxを起動してWebサービスを稼働させるノードの状態を「アクティブ」と呼ぶことにします。アクティブではないもう1台のノードの状態を「スタンバイ」と呼ぶことにします。PacemakerとCorosyncのインストールPacemakerとCorosyncをインストールします。トラブルシュートで使用するとのこと。一時的に有効にして、インストールします。pcp-zeroconfhaclusterユーザーが自動作成されたことを確認します。User:/var/lib/nfs:/sbin/nologinPacemakerの設定用pcsコマンドを使用するための、pcsdサービスを起動します。あわせて、自動起動設定も行います。ファイアウォール設定2台のサーバー間で、firewalldやnftablesなど、ファイアウォールによるアクセス制御を設定している場合は、相手サーバーからの以下のポートのInbound通信を許可します。UDP/5404は不要と思われます。Pacemakerの初期設定pcsコマンドによる設定は、2台でpcsdを起動し、ファイアウォールでアクセス許可ルールがあれば、どちらか1台で実行すればよいです。2台のサーバーで通信して、設定をもう1台に反映してくれます。/etc/hosts設定Pacemakerのクラスター設定で使用するホスト名を設定する。/etc/hosts192.168.1.101pm-test1192.168.1.102pm-test2haclusterユーザーのパスワード設定haclusterユーザーのパスワードを設定します。このユーザー、パスワードは、のちにクラスターの認証設定で使用します。hacluster<パスワード文字列を入力>クラスターの認証設定クラスターに参加させるノードを認証させる。コマンドで、クラスター名と、クラスター構成に組み込むノード(=サーバー)と、リンクアドレスを指定します。Corosyncのドキュメントを読むと、「リンク(link)」という用語がたくさん出てきます。具体的に説明している箇所は見つけられませんでしたが、僕は「クラスターを構成するネットワーク」と理解しました。「リンクアドレス」は、「ノード間監視の通信で使用するIPアドレス」と考えればよいでしょうか。リンクアドレスは、サービス用のIPアドレスとは別の監視用IPアドレス(ネットワーク)でも構いませんし、サービス用のIPアドレスと監視用IPアドレスの複数を指定しても構いません。--startオプションをつけて、設定と同時に、pacemakerサービスを起動します。up.」と表示されればOKです。コマンドでクラスターの状態を確認します。なっていればOKです。クラスターの管理通信(Colosyncの通信)を確認します。表示されればOKです。localhost--クラスターパラメータの設定Pacemakerは複数のクラスタからアクティブなノードを選出する際に、多数決によって決定します。ノードが2台の場合は多数決による決定ができないため、以下2点の設定を行います。現在の設定を確認します。falseクォーラムの状態を無視する(ignore)設定をします。no-quorum-policy=ignoreSTONITHを無効とする設定をします。stonith-enabled=false再度、現在の設定を確認します。falseクォーラムやSTONITHについて補足します。クラスターがクォーラムを持っていないときの動作を定義します。2台構成の場合は、片方が停止しても動作を続行できるよう、ignoreを指定するのが望ましいそうです。STONITHの機能により、強制的に相手のノードを再起動(フェンシング)することで、複数のサーバーがアクティブになり、サービスが競合する不具合を防ぐことができます。STONITH機能を使用するには、物理サーバーのハードウェアもしくは仮想マシンの管理ソフトウェアが外部からの電源ON/OFFに対応している必要があります。今回のサーバーは対応していないため、STONITHは無効とします。これらの設定については、末尾に記載した参考記事(6)の説明がわかりやすいです。Pacemakerのクラスターリソース設定Pacemakerによるクラスター動作の要件として、以下を考えます。IPを付与し、Nginxを起動する。IPを付与し、Nginxを起動する。上記の要件を満たすため、以下の3つのリソース設定を行います。systemd:nginxsystemdを使用してNginxサービスを起動・停止する。ひとつずつ設定していきます。作成し、--groupオプションでリソースを所属させます。VIP制御リソース」を作成します。Nginx制御リソース」を作成します。ネットワーク監視用Pingリソース」を作成します。デフォルトゲートウェイを確認します。ネットワーク監視は2台のノードでアクティブ/アクティブで稼働させ、常に両方のノードにてネットワークの正常性を確認させておくため、Cloneリソースとします。rs-ping-gwロケーションの制約設定を追加します。Pingリソースは、「pingd」という名称のパラメータを持っており、Ping成功時は1000、失敗時は0の値を返します。IPのリソースグループを起動させないというロケーション制約を定義します。pingdロケーションの制約設定を確認します。Constraints:リソース設定を確認します。timeout=100とあるので、Nginxサービスの監視は60秒間隔ですね。コマンドでPacemakerの状態を確認します。Resources:」で、アクティブなノードを確認できます。アクティブとなっていることがわかります。Pacemakerにより制御されていることがわかります。起動していないことを確認します。割り当てられたことを確認します。Webページにアクセスしてみます。ほうにアクセスしていることがわかります。IPのようなエイリアスアドレスは、ENIにもIPアドレスを設定しないと、他のサーバーからはアクセスできません。他のIaaSクラウドサーバーでも同様かもしれません。念のため、アクセスログを確認します。両サーバーで設定します。o前編の、Pacemakerの設定と、正常系の動作確認としては、ここまでで完了です。後編では、とくに運用面の、Packmakerの動作や自動/手動フェイルオーバーなどについて記載します。DesignInaba【お問い合わせ】お名前または法人名・団体名、メールアドレスと、簡潔な内容で構いませんので、お問い合わせ内容をご記入ください。折り返しご連絡いたします。※いただいた情報は他の目的には使用いたしません(個人情報の取り扱いについてはこちらのプライバシーポリシーをご参照ください)。(必須)↑お問い合わせ内容をご確認のうえ、チェックを入れてから「送信」してください。