技術を知る:データベース多重化環境における自動起動運用の手法
PostgreSQLインサイド

データベースの冗長化は、システムの可用性を向上させるために欠かせない要素です。Fujitsu Enterprise Postgres(以降、Enterprise Postgres)は、エンタープライズ環境での利用を想定し、データベース多重化機能を搭載しています。
冗長化されたデータベースをLinux上で自動的に起動・停止させたいというニーズは多く、そのためにプログラムをサービスとして制御する「systemd」を利用することが一般的です。

本記事では、データベース多重化機能を利用した冗長化構成、「systemd」の基本的な仕組み、そしてデータベース多重化環境における自動起動運用の方法について詳しく解説します。

データベース多重化機能を利用した構成

データベース多重化機能は、冗長化されたデータベースの監視と制御を行い、障害を検知すると縮退を実行する機能を備えています。この機能を利用した構成を図1に示します。

図1:データベース多重化機能を利用した構成図
図1:データベース多重化機能を利用した構成図

図1は、データベース多重化機能による自動縮退を実現するための監視構成を示しており、裁定サーバー上にMirroring Controller裁定プロセス、データベースサーバー上にMirroring Controllerプロセス(以降、MC)が配置されます。
データベースサーバー上のMCは、自身のデータベースインスタンスや相手側のデータベースサーバーなどを監視します。自身のデータベースインスタンスや相手のデータベースサーバーなどで異常が発生した場合、MCによって縮退が行われます。両方のデータベースサーバーがプライマリとして動作するスプリットブレインを防ぐために、裁定サーバーが配置されています。裁定サーバーは第三者としてデータベースサーバーを監視し、データベースサーバー同士の状態を正確に判断できない場合にデータベースサーバーの状態を確認し、必要に応じて異常なデータベースサーバーを隔離します。

「systemd」の仕組み

「systemd」は、多くのLinuxシステムで標準採用されている、サービスの自動起動・停止を管理するコンポーネントです。複数のサービスの起動順序や依存関係を管理することで、システム全体の安定性を向上させたり、ジャーナル機能でログを管理したりすることが可能です。ここで言うサービスとは、Webサイトを表示するプログラムや、メールを送受信するプログラムなど、Linux上で動作する様々なプログラムを指します。
サービスの登録は、ユニットファイルと呼ばれるテキスト形式の設定ファイルで行います。このファイルには様々なオプションが記述でき、例えば、サービスをどのような順番で起動するかを設定する「After」オプションや、他のサービスとの関係性(依存関係)を設定する「Requires」オプションなどがあります。

「systemd」における簡単な概要図は、以下の図2のようになります。

図2:「systemd」概要図
図2:「systemd」概要図

これらのサービスを制御するためのコマンドラインユーティリティが「systemctl」です。このコマンドを使用することで、サービスの起動、停止、再起動、状態確認、自動起動設定などの操作を実行できます。なお、「systemd」に登録したサービスの起動・停止は、必ず「systemctl」で操作する必要があります。なぜなら、「systemd」が起動したサービスを他のコマンドで停止させると、「systemd」がサービスを正しく制御できなくなるためです。

自動起動運用における2つの運用方法

データベース多重化環境における自動起動運用には2つの方法があります。1つはMCとデータベースインスタンスをまとめて制御する運用方法、もう1つはMCとデータベースインスタンスを別々のサービスとして作成する運用方法です。まとめて制御する場合は、マニュアル「クラスタ運用ガイド(データベース多重化編)」を参照してください。以下では、MCとデータベースインスタンスを別々のサービスとして作成する運用方法について、ユニットファイルの例を用いて解説します。

MCとデータベースインスタンスを分けてサービス登録する方法

MCとデータベースインスタンスのサービスを分ける場合、MCのみを個別に起動・停止できるようにすることと、MCとデータベースインスタンスの適切な起動順序を制御することが重要です。
この章では、Red Hat Enterprise Linux環境において、MCとデータベースインスタンスを個別にサービス登録する方法を、具体的な例を用いて解説します。以下に、データベースインスタンスを「systemd」にサービス登録する際のユニットファイルの例を示します。

[Unit]
Description=Fujitsu Enterprise Postgres <インスタンス名>
Requires=network-online.target
After=network.target network-online.target

[Service]
# 起動, 停止, リロードコマンド
ExecStart=/bin/bash -c '<インストールディレクトリ>/bin/pgx_symstd start <インストールディレクトリ> <データ格納先ディレクトリ>'
ExecStop=/bin/bash -c '<インストールディレクトリ>/bin/pgx_symstd stop <インストールディレクトリ> <データ格納先ディレクトリ>'
ExecReload=/bin/bash -c '<インストールディレクトリ>/bin/pgx_symstd reload <インストールディレクトリ> <データ格納先ディレクトリ>'
Type=forking
User=<ユーザー名>
Group=<グループ名>

[Install]
WantedBy=multi-user.target
  • 注:
    <インスタンス名>、<インストールディレクトリ>、<データ格納先ディレクトリ>、<ユーザー名>、<グループ名>などは、環境に合わせて変更してください。

上記の例では、データベースインスタンスのユニットファイルにはMCとの起動順序の設定はありません。しかし、MCのユニットファイルには、データベースインスタンスとの起動順序の設定が必要になります。具体的には、データベースインスタンスが起動完了後にMCを起動させるために、依存関係(同時制御)を定義する「Requires」オプションと、起動順を制御する「After」オプションを使用します。これにより、Linuxシステムの起動時にデータベースインスタンス、MCの順で起動処理が行われます。また、データベースインスタンスが起動しなかった場合はMCも起動しないため、起動・停止順序が確実に守られるようになります。
また、MCのみを起動・停止するにあたり、ユニットファイルの[Service]セクションにある「ExecStart(開始コマンド)」と「ExecStop(停止コマンド)」に、「--mc-only」オプションを指定します。このオプションにより、「systemctl stop MCサービス」と実行すると、MCだけを停止できるようになります。
裁定サーバーを利用する場合、デフォルト設定では裁定サーバーを起動後にデータベースサーバーのMCを起動する必要があります。しかし、自動起動環境では裁定サーバーの起動タイミングを制御できないため、MC起動時に裁定サーバーが未起動でもMCを起動できるように、「--async-connect-arbiter」オプションを指定することを推奨します。

以下に、MCを「systemd」にサービス登録する際のユニットファイルの例を示します(上記内容を反映した部分を赤文字にしています)。

[Unit]
Description=Fujitsu Enterprise Postgres Mirroring Controller <インスタンス名>
Requires=network-online.target <データベースのサービス名>
After=network.target network-online.target <データベースのサービス名>

[Service]
ExecStart=/bin/bash -c '<インストールディレクトリ>/bin/mc_std start <インストールディレクトリ> <MC管理ディレクトリ> --mc-only --async-connect-arbiter'
ExecStop=/bin/bash -c '<インストールディレクトリ>/bin/mc_std stop <インストールディレクトリ> <MC管理ディレクトリ> --mc-only'
Type=forking
User=<ユーザー名>
Group=<グループ名>

[Install]
WantedBy=multi-user.target

作成したユニットファイルを、ディレクトリ「/usr/lib/systemd/system」に配置し、OSのスーパーユーザーで「systemctl enable <ユニットファイル>」を実行することで、MCとデータベースインスタンスの自動起動が有効になります。詳細は、製品マニュアルを参照してください。

本記事では、Enterprise Postgresのデータベース多重化環境における自動起動運用について、運用上の重要なポイントとその具体的な手法を解説しました。自動起動運用をご検討の際は、ぜひ本記事で紹介した設定例を参考にしてください。

補足情報

  • 自動起動・停止利用時のMCコマンドの利用について
    「systemd」に登録したサービスの起動停止は、必ず「systemctl」コマンドで行う必要があります。ただし、MCコマンドによるサーバーの状態表示、切り替え、および切り離し操作は、サービス利用時でも使用できます。

  • 裁定サーバーの自動起動設定
    裁定サーバーを自動起動させたい場合は、参考に記載されているマニュアルを参照してユニットファイルを作成してください。

  • Windows環境でのサービスの自動起動
    Windows環境でサービスの自動起動運用を行う際は、製品マニュアルを参照して設定してください。

参考

2025年6月30日公開

富士通のソフトウェア公式チャンネル(YouTube)

本コンテンツに関するお問い合わせ

Webでのお問い合わせ

当社はセキュリティ保護の観点からSSL技術を使用しております。

ページの先頭へ