postgreSQLのマスタースレーブのレプリケーション

I.はじめに

複製機構、いわゆるストリーム再生の主流から導入9.0 Postgresの後、対応するデータは、TCPストリームを介してサーバーからマスターサーバーから同期化されます。だから、バックアップがまだ不足しているサーバーからとき、プライマリサーバデータという。
ファイルベースのログシッピングと比較すると、レプリケーションの流れは、サーバから更新ままにされます。WALが終了プライマリファイルサーバーを待たずに、サーバーからのWALに生成されたストリームを記録し、マスタサーバからの接続。
PostgreSQLのストリーミングレプリケーションは、デフォルトでは非同期です。プライマリサーバーのトランザクションに出願し、サーバから見た変化との間にわずかな遅延があり、この遅延ははるかに少ない、ログ・ベースのファイル転送、完全に一般的に1秒未満です。プライマリサーバが突然クラッシュした場合は、データ損失の少量があるかもしれません。
同期レプリケーションのマスタサーバとWAL書かれたサーバーからトランザクションをコミットする前に待機する必要があります。だから、ある程度、トランザクションの応答時間が増加します。
注:この実験は、ドッキングウィンドウの完了に基づいています

二、PostgreSQLのインストール

docker pull postgresql:9.4
docker images
REPOSITORY                                               TAG                 IMAGE ID            CREATED             SIZE
docker.io/postgres                                       9.4                 36726735dc3c        2 weeks ago         206 MB
docker run -it --name postgresql postgres:9.4 bash
su postgres
cd /usr/lib/postgresql/9.4/bin

プレゼンスは/ var / libに/ postgresqlの/ dataディレクトリ、データベースを初期化

./initdb -Dは/ var / libに/ postgresqlの/データ
このデータベースシステムに属するファイルは、ユーザー「のpostgres」によって所有されます。
このユーザーは、サーバープロセスを所有する必要があります。
データベースクラスタは、ロケール「en_US.utf8の」で初期化されます。
デフォルトのデータベースのエンコーディングは、それに応じて、「UTF8」に設定されています。
デフォルトのテキスト検索設定は、「英語」に設定されます。
データ・ページのチェックサムが無効になっています。
OK ...既存のディレクトリ/ var / libに/ postgresqlの/データのアクセス許可を固定
サブディレクトリ... [OK]を作成
選択デフォルトのmax_connections ... 100
選択デフォルトのshared_buffersを... 128メガバイト
のデフォルトのタイムゾーンを選択する...など/ UTC
ダイナミックを選択するには、メモリを共有しました実装... POSIX
設定ファイルを作成... [OK]
を/ var / libに/ postgresqlの/データ/ベース/ 1でtemplate1データベース... [OK]を作成し
、初期化pg_authidを... [OK]を
初期化するの依存関係... [OK]を
作成するシステムビュー... OK
積載システムオブジェクト説明は... OK
照合順序を作成... [OK]
変換を作成... [OK]
辞書を作成... [OK]を
設定権限を組み込みオブジェクトに... OK
情報スキーマ... [OK]を作成
ロードPL / pgSQLのサーバーサイドの言語を。 ... OK
template1データベースを掃除... [OK]を
コピーtemplate1をにtemplate1では... [OK]を
postgresの... [OK]にコピーtemplate1を
ディスクへの同期データ... [OK]

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

        ./postgres -D /var/lib/postgresql/data
or
        ./pg_ctl -D /var/lib/postgresql/data -l logfile start

ここでPGデータベースのインストールは完了です
、あなたがログファイルを追加することはできませんログインしていない場合は、オープンデータベースは、

-Dは/ var / libに/ postgresqlの/データ開始./pg_ctl

また、スタンバイ・データベースを起動します

ドッキングウィンドウの実行-it --name postgresql2のpostgres:9.4 bashの

上記と同様の工程

第三に、プライマリサーバの動作

172.18.0.4がプライマリサーバーされ
たアーカイブ・ログの新しいディレクトリを作成して、私は実際にオンデマンドで尋ね、アーカイブログをしませんしました。

MKDIRは/ opt / pgsqlの/ pg_archive

1.まず、データベースユーザマスタ・スレーブ同期を作成する必要があります。ユーザーのレプリカを作成し、ログインおよびコピーの権限を与えます。

postgresの#はROLEレプリカログイン複製暗号化されたパスワード「レプリカ」を作成します

2.修正pg_hba.confのは、ユーザーがレプリカを同期させることができます。
pg_hba.confの中の2行を追加します。

ホストすべてすべて172.18.0.5/32信頼#0.5は、メインに接続されたサーバができます
172.18.0.5/32 MD5#0.5ホスト複製レプリカは、ユーザーがレプリカを使用してコピーすることができます

これにより、ユーザは、ストリーミング172.18.0.4からレプリカコピー要求を設定することができます。
*注:2番目のフィールドを埋めなければならないレプリケーション
4. [変更のpostgresql.conf

すべてのIP上のlisten_addresses = '*' #のリッスン
にarchive_mode = ON#はアーカイブできます
にarchive_command = 'CP%Pは/ opt #1 / pgsqlの/ pg_archive /%F' ログファイルセグメントのオンデマンド要件は、次のコマンドをアーカイブするために使用されます。
= hot_standby wal_level
max_wal_senders =#32このセットは、好ましくは、わずかに大きく設定され、いくつかを設定するために、いくつかのストリーム複製にほとんど複数のスレーブを接続することができます。
wal_keep_segments = 256#xlogのストリームを設定されたコピーの予約の最大数、16メガバイトのセグメントは、メインのライブラリ生成が速いログhot_standyまでの時間が覆われていた持っていません防ぐために大きな値を設定してみてください。
wal_sender_timeout = 60秒#セットのタイムアウト期間。レプリケートマスタ送信データ
100#この設定の下で、ライブラリはMAX_CONNECTIONSメインライブラリよりも大きくなければならないことに留意すべき= MAX_CONNECTIONS

2つの設定ファイルの後、サーバーを再起動します。

pg_ctl停止-Dの/ var / libに/ postgresqlの/データ
にpg_ctl -D開始の/ var / libに/ postgresqlの/データ

0.5 0.4 3.テストデータベースが接続できます。0.5上で次のコマンドを実行します。

psqlの-h 172.18.0.4 -U postgresの

データベースにアクセスできるかどうかを確認します。もしそうなら、通常。

第四に、サーバーからの操作

1.スレーブノードにマスターノードからデータをコピー

SU - Postgresの
RM -rfは/ opt / pgSQLに/データ/ *最初のデータのデータディレクトリにある#空になった
pg_basebackup -h 172.18.0.4 -Uレプリカ-Dの/ var / libに/ postgresqlの/データ-Xストリーム-P番号から0.4〜0.5コピーデータ(ベースのバックアップ)
MKDIR / OPT / pgSQLの/ pg_archive

2. [設定recovery.confのの
/var/lib/postgresql/data/recovery.confにコピー/usr/share/postgresql/9.4/recovery.conf.sample

CP /usr/share/postgresql/9.4/recovery.conf.sample /var/lib/postgresql/data/recovery.conf

修正recovery.confの

サーバーからのノードの記述にstandby_mode =
primary_conninfo =「ホスト= 172.18.0.4ポート= 5432ユーザー=レプリカパスワード=レプリカ」#のマスターサーバーとユーザーの接続情報
recovery_target_timeline =「最新」

3.設定のpostgresql.conf

= hot_standby wal_level
ライブラリからの接続のより大きな最大数よりMAX_CONNECTIONS = 1000#書き込み、より一般的な検索アプリケーション
hot_standby#説明では、このマシンはないだけアーカイブデータのために使用され=、データがクエリにも使用される
max_standby_streaming_delay = 30秒#データストリームバックアップの最大遅延時間
wal_receiver_status_interval =時間からメインレポートには、当然のことながら、間隔ここで最長の設定時間をメインレポートに各状態からデータをコピーしますが、どのくらいの10S#
データの複製にエラーがある場合か、#にhot_standby_feedback =マスターへのフィードバック

設定後、サーバーからの再起動

pg_ctl停止-Dの/ var / libに/ postgresqlの/データ
にpg_ctl -D開始の/ var / libに/ postgresqlの/データ

V.は、展開を成功させることを確認し

メインノードのデータベースで実行:

CLIENT_ADDR、pg_stat_replicationからsync_stateを選択します。

結果は以下の通りであります:

postgres=# select client_addr,sync_state from pg_stat_replication;
 client_addr | sync_state 
-------------+------------
 172.18.0.5  | async
(1 row)

postgres=# 

0.5サーバから、ストリームを受信する説明、およびストリームは、非同期複製です。
:|あなたはまた、個別ノードのPS AUXから実行し、メインにすることができますgrepをPostgresは、プロセスを確認し
、プライマリサーバ(0.4):

psの補助| グレップのPostgresの
根0.0 0.0 48508 1548 210?S 6:34夜12時SUのPostgresの
Postgresの211 0.0 0.1 19864 2256?S 6時34夜12時のbash
のpostgres 250 0.0 0.9 273940 17632?S 6:41夜12時/usr/lib/postgresql/9.4/bin/postgres -Dの/ var / libに/のPostgreSQL /データ
のPostgres 252 0.0 0.2 274044 3800?SS午前6時41分午後12時00分のPostgres:checkpointerプロセス
のPostgres 253 0.0 0.1 274072 3216?Ssの午前6時41分夜12時のpostgres:ライター・プロセス
のpostgres 254 0.0 0.3 273940 6108?Ssの午前6時41分夜12時のpostgres:WALライター・プロセス
のpostgres 255 0.0 0.1 274348 2656?Ssの午前6時41分夜12時のpostgres:自動バキュームランチャプロセス
のpostgres 256 0.0 0.0 129220 1836?Ssの午前6時41分午後十二時のpostgres:統計情報コレクタ・プロセス
postgresの276 0.0 0.1 274480 3164?Ssの午前6時57分午後12時のpostgres:WAL送信元プロセスのレプリカ172.18.0.5(42834)0 / 3019C90ストリーミング
のpostgres 391 0.0 0.0 38296 1752?R + 7時36夜12時のPSのAUX
のpostgres 392 0.0 0.0 12772 692?S + 7時36の0:00のgrep postgresの

私たちは、WAL送信者のプロセスがある見ることができます。

サーバー(94)から:

psの補助| グレップのPostgresの
根0.0 0.0 48508 1548 394?S午前6時42夜12時SUのPostgresの
Postgresの395 0.0 0.1 19884 2320?S午前6時42夜12時のbash
のpostgres 488 0.0 2.3 314268 45052?S 6時57分夜12時/usr/lib/postgresql/9.4/bin/postgres -Dの/ var / libに/ postgresqlの/データ
のpostgres 489 0.0 0.2 314452 4904?Ssの午前6時57分夜12時のpostgres:000000010000000000000003回復起動プロセス
のpostgres 490 0.0 0.1 314388 3524を?SS 6:57夜12時のPostgres:checkpointerプロセス
のPostgres 491 0.0 0.1 314268 2956?Ssの午前6時57分夜12時のpostgres:ライター・プロセス
のpostgres 492 0.0 0.0 129220 1848?SS午前6時57分午後12時00分のPostgres:統計コレクタプロセス
のPostgres 493 0.0 0.2 319036 4384?SS 6時57分午後12時01分のpostgres:0 / 3019C90をストリーミングWAL受信プロセス
508 0.0 0.0 38 296 1756 Postgresの?R + 7:37午後12時00分PS AUX
Postgresの0.0 12772 509 0.0 700?S + 7:37の午後12時00分のgrepのPostgresは
WAL受信プロセスがある見ることができます。
これまでのところ、PostgreSQLのインストールは、メインストリームの複製から展開されます。
プライマリサーバ上のデータを挿入する、またはサーバー上の削除データは、対応する変化から見ることができます。サーバーからの唯一のクエリは、あなたが挿入または削除することはできません。

主なオン:

postgresの=#\ Cテスト。
あなたは現在、ユーザー「postgresの」とデータベース「テスト」に接続されています。
テスト=#テーブルの会社を作成(
テスト(#IDはint型PRIMARY KEY NOT NULL、
テスト(#名TEXT NOT NULL、
テスト(#年齢INT NOT NULL、
テスト(#アドレスCHAR(50)、
テスト(#給与REAL、
テスト( #join_date DATEの
試験(#);
表CREATE
試験=#INSERT INTO COMPANY(ID、氏名、年齢、住所、SALARY、JOIN_DATE)VALUES(1、 'ポール'、32 'カリフォルニア'、20000.00、 '2001-07- 13' );
INSERT 0 1
テスト=#
テスト=#
テスト=#会社から選択*;
ID |名|年齢|アドレス|給与| join_date
---- + ------ + ----- + -------------------------------------------------- - + -------- + ------------
1 | ポール| 32 | カリフォルニア| 20000 | 2001年7月13日
(1行)

投稿者:

postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 test      | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
(4 rows)

postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# select * from company
test-# ;
 id | name | age |                      address                       | salary | join_date  
----+------+-----+----------------------------------------------------+--------+------------
  1 | Paul |  32 | California                                         |  20000 | 2001-07-13
(1 row)
s

コンプリート!

おすすめ

転載: blog.51cto.com/13670314/2449031