レプリケーションとは、冗長データベースノード間の一貫性を確保するために、複数のサーバー間でトランザクションデータを共有することです。マスターは挿入または更新を取得し、それらをデータセットに適用しますが、スレーブはマスターデータセットに加えられた変更に従ってデータを変更します。マスターは一般にプライマリと呼ばれ、先行書き込みログ(WAL)に加えられた変更を記録します。一方、スレーブはセカンダリと呼ばれ、REDOログ(この場合はWAL)からデータを複製します。
PostgreSQLには少なくとも3つのレプリケーションアプローチがあります:
ビルトインレプリケーションまたはストリーミングレプリケーション。
このアプローチでは、データはプライマリノードからセカンダリノードに複製されます。ただし、次のような多くの挫折があります。
- 新しいセカンダリの導入の難しさ。状態全体を複製する必要があり、リソースを大量に消費する可能性があります。
- 組み込みの監視とフェイルオーバーの欠如。後者が失敗した場合は、セカンダリをプライマリに昇格させる必要があります。多くの場合、このプロモーションにより、プライマリーの不在中にデータの不整合が発生する可能性があります。
WALからの再構築
セカンダリはプライマリによって作成されたバックアップから再構築されるため、このアプローチはどういうわけかストリーミングレプリケーションアプローチを採用しています。プライマリは、60秒ごとの増分バックアップに加えて、毎日の後に完全データベースバックアップを実行します。このアプローチの利点は、セカンダリがプライマリに十分に近づき、先行書き込みログ(WAL)のストリーミングを開始してそれに追いつくまで、プライマリに追加の負荷がかからないことです。このアプローチを使用すると、PostgreSQLデータベースのパフォーマンスに影響を与えることなくレプリカを追加または削除できます。
PostgreSQLのボリュームレベルレプリケーション(ディスクミラーリング)
これは、PostgreSQLだけでなく、すべてのリレーショナルデータベースにも適用される一般的なアプローチです。 Linux用の分散複製ストレージシステムであるDistributedReplicateBlock Device(DRBD)を利用します。これは、あるサーバーのストレージに保存されているコンテンツを別のサーバーにミラーリングすることによって動作することを目的としています。構造の簡単な図を以下に示します。
DRBDは、PostgreSQLデータベースをホストするディスクデバイスからの抽象化と見なすことができますが、オペレーティングシステムは、そのデータが別のサーバーにもあることを認識しません。このアプローチを使用すると、データだけでなくファイルシステムも複数のサーバーと共有できます。したがって、DRBDへの書き込みはすべてのサーバーに分散され、各サーバーはローカルの物理ハードディスク(ブロックデバイス)に情報を書き込みます。書き込み操作がプライマリに適用されると、その後DRBDに記録され、セカンダリDRBDサーバーに配布されます。一方、セカンダリがDRBDを介して書き込み操作を受信した場合、それらはローカルの物理デバイスに書き込まれます。フェイルオーバーサポートの場合、情報はブロックレベルで同期的に並べられたプライマリノードと多くのセカンダリノード間で共有されるため、DRBDはデータの高可用性を提供します。
DRBD構成では、自動フェイルオーバーのサポートを強化するために、ハートビートと呼ばれる追加のリソースが必要になります。これについては、別の記事で説明します。このパッケージは基本的に複数のサーバーのインターフェースを管理し、障害が発生した場合にセカンダリサーバーの1つをプライマリに自動的に構成します。
DRBDのインストールと構成
DRBDをインストールする際の推奨される方法は、ビルド前のバイナリインストールパッケージを使用することです。パッケージのカーネルバージョンがアクティブな現在のカーネルと一致していることを確認してください。
プライマリまたはセカンダリであるすべてのノードの構成ファイルは同一である必要があります。また、カーネルバージョンをアップグレードする必要がある場合は、対応するkernel-module-drdbが新しいカーネルバージョンで使用可能であることを確認してください。
プライマリノードのDRBDセットアップ
これは、DRBDブロックデバイスとデータを保存できるファイルシステムを作成する必要がある最初のステップです。構成ファイルは/etc/drbd.confにあります。このファイルは、ブロックサイズ、作成するDRBDデバイスのセキュリティ情報定義、更新の頻度など、DRBD構成のいくつかのパラメーターを定義します。構成は、グローバルに制限することも、特定のリソースに関連付けることもできます。必要な手順は次のとおりです。
-
同期速度。ディスクの交換、障害、または初期セットアップ後に、デバイスがバックグラウンドで同期的にリンクされる速度を定義します。これは、シンカーブロックのレートパラメーターを編集することで設定できます:
syncer{ rate 15M }
-
同じ共有シークレットを持つホストのみがDRBDノードグループに参加できるようにするための認証設定。パスワードは、DRBDでサポートされているハッシュ交換メカニズムです。
cram-hmac-alg “sha1” shared-secret “hash-password-string”
-
ホスト情報の構成。ホストなどのノード情報は、各ノードのdrbd.confファイルにあります。構成するパラメーターのいくつかは次のとおりです。
- アドレス:DRBDデバイスを保持するホストのIPアドレスとポート番号。
- デバイス:DRBDによって作成された論理ブロックデバイスのパス。
- ディスク:データを保存するブロックデバイスを指します。
- メタディスク:DRBDデバイスのメタデータを保存します。そのサイズは最大128MBです。 DRBDが物理ブロックデバイスを使用してこの情報をディスクの最後のセクションに保存するように、内部ディスクとして設定できます。
プライマリの簡単な構成:
on drbd-one { device /dev/drbd0; disk /dev/sdd1; address 192.168.103.40:8080; meta-disk internal; }
対応するホストと一致するIPアドレスを持つセカンダリで構成を繰り返す必要があります。
on drbd-two { device /dev/drbd0; disk /dev/sdd1; address 192.168.103.41:8080; meta-disk internal; }
-
次のコマンドを使用してデバイスのメタデータを作成します:
このプロセスは、プライマリノードを開始する前に必須です。$ drbdadm create create-md all
- 次のコマンドでDRBDを開始します:
これにより、DRBDは、DRBDで定義されたデバイスを起動、初期化、および作成できます。$ /etc/init.d/drbd start
- 新しいデバイスをプライマリとしてマークし、次のコマンドを使用してデバイスを初期化します。
DRBDによって作成された標準のブロックデバイスを使用可能にするために、ブロックデバイス上にファイルシステムを作成します。$ drbdadm -- --overwrite-data-of-peer primary all
- ファイルシステムをマウントして、プライマリを使用できるようにします。次のコマンドで準備できます。
$ mkdir /mnt/drbd $ mount /dev/drbd0 /mnt/drbd $ echo “DRBD Device” > /mnt/drbd/example_file
セカンダリノードのDRBDセットアップ
情報はプライマリノードから自動的に転送されるため、セカンダリノードにファイルシステムを作成することを除いて、上記と同じ手順を使用できます。
-
/etc/drbd.confファイルをプライマリノードからセカンダリノードにコピーします。このファイルには、必要な情報と構成が含まれています。
-
基盤となるディスクデバイスで、次のコマンドを使用してDRBDメタデータを作成します。
$ drbdadm create-md all
-
次のコマンドでDRBDを開始します:
DRBDはプライマリノードからセカンダリノードへのデータのコピーを開始します。時間は転送されるデータのサイズによって異なります。 / proc / drbdファイルを表示すると、進行状況を表示できます。$ /etc/init.d/drbd start
$ cat /proc/drbd version: 8.0.0 (api:80/proto:80) SVN Revision: 2947 build by [email protected], 2018-08-24 16:43:05 0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r--- ns:252284 nr:0 dw:0 dr:257280 al:0 bm:15 lo:0 pe:7 ua:157 ap:0 [==>.................] sync'ed: 12.3% (1845088/2097152)K finish: 0:06:06 speed: 4,972 (4,580) K/sec resync: used:1/31 hits:15901 misses:16 starving:0 dirty:0 changed:16 act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0
-
特定の間隔でwatchコマンドを使用して同期を監視します
$ watch -n 10 ‘cat /proc/drbd‘
DRBDインストール管理
DRBDデバイスのステータスを追跡するには、/ proc/drbdを使用します。
コマンド
を使用して、すべてのローカルデバイスの状態をプライマリに設定できます。$ drbdadm primary all
プライマリデバイスをセカンダリにする
$ drbdadm secondary all
DRBDノードを切断するには
$ drbdadm disconnect all
DRBDノードを再接続します
$ drbd connect all
今日のホワイトペーパーをダウンロードするClusterControlを使用したPostgreSQLの管理と自動化PostgreSQLの導入、監視、管理、スケーリングを行うために知っておくべきことについて学ぶホワイトペーパーをダウンロードする DRBD用のPostgreSQLの構成
これには、PostgreSQLがデータを保存するデバイスの選択が含まれます。新規インストールの場合は、PostgreSQLをDRBDデバイスに完全にインストールするか、新しいファイルシステムに配置するデータディレクトリにインストールするかを選択できます。データディレクトリはプライマリノードにある必要があります。これは、プライマリノードがDRBDデバイスファイルシステムを読み取り/書き込みとしてマウントできる唯一のノードであるためです。 Postgresデータファイルは多くの場合/var/ lib / pgsqlにアーカイブされますが、構成ファイルは/ etc / sysconfig/pgsqlに保存されます。
新しいDRBDデバイスを使用するためのPostgreSQLのセットアップ
-
実行中のPostgreSQLがある場合は、次のコマンドで停止します:
$ /etc/init.d/postgresql -9.0
-
次のコマンドを使用して、DRBDデバイスを構成ファイルで更新します。
$ mkdir /mnt/drbd/pgsql/sysconfig $ cp /etc/sysconfig/pgsql/* /mnt/drbd/pgsql/sysconfig
-
以下を使用して、PostgreSQLデータディレクトリとシステムファイルでDRBDを更新します。
$ cp -pR /var/lib/pgsql /mnt/drbd/pgsql/data
-
次のコマンドを使用して、/ etc / sysconfig/pgsqlからDRBDデバイスファイルシステムの新しい構成ディレクトリへのシンボリックリンクを作成します。
$ ln -s /mnt/drbd/pgsql/sysconfig /etc/sysconfig/pgsql
-
/ var / lib / pgsqlディレクトリを削除し、/ mnt / drbd / pgsqlをアンマウントして、drbdデバイスを/ var / lib/pgsqlにマウントします。
-
次のコマンドでPostgreSQLを起動します:
$ /etc/init.d/postgresql -9.0 start
これで、PostgreSQLデータは、構成されたデバイスの下のDRBDデバイスで実行されているファイルシステムに存在するはずです。データベースのコンテンツもセカンダリDRBDノードにコピーされますが、セカンダリノードで動作しているDRBDデバイスが存在しない可能性があるため、アクセスできません。
DRBDアプローチの重要な機能
- チューニングパラメータは高度にカスタマイズ可能です。
- 既存のデプロイメントは、データを失うことなくDRBDを使用して簡単に構成できます。
- 読み取り要求は均等にバランスが取れています
- 共有秘密認証は、構成とそのデータを保護します。