データベースサーバーからバックアップサーバーへのデータ複製をできるだけ迅速かつ簡単に整理する必要がありました。 Webの広大さでは、シンプルでわかりやすい方法は決して見つかりませんでしたので、情報を部分的に収集する必要があり、それがこの記事になりました。
問題を解決しました。 ソースデータ
したがって、クライアントが動作するデータベースサーバーと、メインデータベースからのレプリケーションを構成する必要があるバックアップサーバーがあります。
私の場合、PostgreSQL 9.2.1が使用されます。これは両方のサーバーにインストールされ、ストリーミングレプリケーションをサポートしています。 メインサーバー上のデータベースが展開され、実行され、バックアップのみがインストールされ、PostgreSQLが構成されていないとします。 たとえば、メインサーバのアドレスにIPアドレス192.168.1.1を、バックアップアドレスにIPアドレス192.168.1.2を使用します。
メインデータベースサーバーを構成する
「ログインロール」セクションで、PgAdminを使用して、「ストリーミングレプリケーションとバックアップを作成できます」という権限を持つユーザー(ロール)replを作成します。 pg_hbaに追加するか、PgAdminの「サーバー構成」を使用して、ユーザーreplがデータベースに接続できるようにする行を作成します。
host replication repl 192.168.1.2/32 trust
postgresql.confファイルに次の変更が加えられました。
初期値 | 値を変更しました | 説明 |
---|---|---|
#max_wal_senders = 1 | max_wal_senders = 2 | プライマリサーバーに接続できるバックアップサーバーの数 |
#wal_keep_segments = 32 | wal_keep_segments = 32(256を入れることができます) | 保存するセグメントの数。 バックアップサーバーがすべてを収集して処理する時間があるように、量を選択する必要があります。 walファイルが1日に上書きされないように256を設定しました |
#wal_level = hot_standby | wal_level = hot_standby | hot_standbyは、読み取り専用要求をスタンバイサーバーに実行するために必要な情報を追加します |
#checkpoint_segments = 3 | checkpoint_segments = 16 | WALログのセグメント数を増やすことができます |
バックアップサーバーを構成する
バックアップサーバーでPostgresql 9.2サービスを停止し、PostgreSQLのインストール時に作成されたデータ(D:\データベースなど)を含むフォルダーをクリアします。 その後、コマンドラインからバックアップを実行します。
"C:\PostgreSQL\bin\pg_basebackup.exe" --host=192.168.1.1 --port=5432 --username=repl -D "D:\database"
D:\データベースでpostgresql.confを構成します
初期値 | 値を変更しました | 説明 |
---|---|---|
#hot_standby = off | hot_standby = on | 回復プロセス中にDBMSへの読み取り専用クエリを許可します。 |
Dのrecovery.confを構成します:\データベース
価値 | 説明 |
---|---|
standby_mode = 'on' | 復旧モードを有効にし、バックアップサーバー(スレーブ)として機能する |
primary_conninfo = 'ホスト= 192.168.1.1ポート= 5432ユーザー= repl' | メインサーバーに接続するためのパラメーター |
trigger_file = 'D:\\データベース\\ end_trig' | 指定したフォルダーにend_trigというファイルを作成すると、サーバーはレプリケーションモードを終了し、通常のサーバーになります |
バックアップサーバーでPostgresqlサービスを開始します。 エラーなしで起動するはずです。 レプリケーションを確認します。メインサーバー上のテーブルに変更を加え、バックアップに影響があるかどうかを確認します。
ログアーカイブの構成(必要な場合)
メインサーバー上のpostgresql.confファイルに、次を含めます。
archive_mode = on | archive_command = 'copy "%p" "e:\\バックアップ\\%f"' |
ログファイルはe:\ Backupフォルダーにドロップされます。 (注意、彼らはすべてのディスクスペースを詰まらせる可能性があります、あなたはオーバーフローしたときにクリーニングを設定する必要があります)
ログアーカイブを使用するには、復元元のフォルダーにログをコピーし、recovery.confに行を追加する必要があります。
restore_command = 'copy "e:\\Backup\\%f" "%p"'
失敗アクション
バックアップサーバーに障害が発生した場合、そのサーバーでPostgresサービスを停止し、「バックアップサーバーの構成」の手順をすべて実行します。
メインサーバーに障害が発生した場合、バックアップサーバーを通常の動作モードにする必要があります。このためには、recovery.conf trigger_file = 'D:\\ database \\ end_trig' bで指定されたフォルダーにend_trigファイルを作成する必要があります。
注釈
レプリケーションは、Windows XPからWindows 7へ、またはその逆に構成できます。
Windows 7とWndows XPでは、pg_hbaの設定が異なります。 XPでは、ip6プロトコルはありません。その場合、その行はコメントアウトする必要があります。