ホットスタンバイをコピーPostgreSQLの流れ

 

切り替えで約PGホットスタンバイは、オンラインコンテンツの多くを持って、私たちは自分自身のテスト、特に記録プロセスを使用するか、他の人のためのリファレンスを提供します。テストバージョンとして選択した作者pg9.6.1。

スタンバイ・マシンの計画

ホスト名| IP |役割|ポート
:----:|:----:|:----:|:----:|:----:|:----:
マスター| 192.168.0.108 |マスター| 5432
スレーブ| 192.168.0.109 |スレーブ| 5432
前提:二つのホスト良いPGデータベースにインストールされていた、ブログには、インストールプロセスの参照の前に説明http://www.jianshu.com/p/639ebb43bfb4

二つは、ストリームのコピーを作成します

2.1の設定ホスト

マスタ、スレーブノードは、2つの動作を有しています。

[root@bogon ~]# vim /etc/hosts
#编辑内容如下:
192.168.43.127 master
192.168.43.243 slave

保存して終了するには、[esc]キーを押し、WQ!。

2.2マスター・データベースの初期化

以下の操作は、マスターの下で実行されます。

#切换到postgres账户
[root@bogon ~]# su - postgres
#初始化data
[postgres@bogon ~]$ initdb -D $PGDATA
# 启动master数据库
[postgres@bogon ~]$ pg_ctl start -D $PGDATA
#创建流复制用户
[postgres@bogon ~]$ psql
psql (9.6.1)
Type "help" for help.

postgres=# CREATE USER repuser replication LOGIN CONNECTION LIMIT 3 ENCRYPTED PASSWORD 'repuser';
CREATE ROLE

2.3設定pg_hba.confの

次のようにマスターにpg_hba.confの最後の行は増加しました。

host    all             all          0.0.0.0/0       md5
host replication      repuser         slave          md5

2.4コンフィギュレーションのpostgresql.conf

次のようにマスター端末が構成されています。

listen_addresses = '*' 
port = 5432 
max_wal_senders = 1 
wal_level = replica
archive_mode = on 
archive_command = 'cd ./'
hot_standby = on
wal_keep_segments = 64
full_page_writes = on
wal_log_hints = on

設定が完了したら、masterデータベースを再起動します

[postgres@bogon ~]$ pg_ctl restart -D $PGDATA

ライブラリーによって作成された2.5 pg_basebackup

スレーブ側のpostgresに占める行わ:

#切换到postgres账户
[root@bogon ~]# su - postgres
#从主库备份创建备库
[postgres@bogon ~]$ pg_basebackup -D $PGDATA -Fp -Xs -v -P -h master -p 5432 -U repuser
transaction log start point: 0/2000060 on timeline 1
pg_basebackup: starting background WAL receiver
22806/22806 kB (100%), 1/1 tablespace                                         
transaction log end point: 0/2000130
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: base backup completed

次のように修正されたデータディレクトリスレーブの最後の行を変更しpg_hba.confの:

host    all             all          0.0.0.0/0            md5
host replication       repuser       master               md5

2.6設定recovery.confの

マスター側の設定は次のとおりです。

[postgres@bogon ~]$ ls
bin  data  gdal  geos  include  lib  proj4  share
[postgres@bogon ~]$ cp share/recovery.conf.sample data/recovery.done
[postgres@bogon ~]$ vim data/recovery.done
#编辑内容如下
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=slave port=5432 user=repuser password=repuser'
trigger_file = '/home/postgres/data/trigger_file'

スレーブ側の設定は次のよう:

[postgres@bogon ~]$ ls
bin  data  gdal  geos  include  lib  proj4  share
[postgres@bogon ~]$ cp share/recovery.conf.sample data/recovery.conf
[postgres@bogon ~]$ vim data/recovery.conf
#编辑内容如下
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=master port=5432 user=repuser password=repuser'
trigger_file = '/home/postgres/data/trigger_file'

2.7設定.pgpass

スレーブマスターに設定したアクセスパラメータ

[postgres@bogon ~]$ vim .pgpass
slave:5432:postgres:repuser:repuser

スレーブマスターに設定したアクセスパラメータ

[postgres@bogon ~]$ vim .pgpass
master:5432:postgres:repuser:repuser

2.8同期データストリームのコピーテスト

それぞれのマスター、スレーブデータベースを起動し
、マスタ上のデータベースと一時テーブルを作成します

[postgres@bogon data]$ psql
psql (9.6.1)
Type "help" for help.
postgres=# \password  #创建数据库密码
#创建测试数据库
postgres=# create database test;
CREATE DATABASE
postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# create table tt(id serial not null,name text);
CREATE TABLE
test=# insert into tt(name) values ('china');
INSERT 0 1

そして、データルックアップテーブルは、単にデータの同期があるかどうかを判断するために、スレーブ上で作成します

[postgres@bogon data]$ psql
psql (9.6.1)
Type "help" for help.

postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# select * from tt;
 id | name  
----+-------
  1 | china
(1 row)

明らかに、ライブラリがメインライブラリーからのデータを同期化された、これはオーバー作成されたPGストリームが、ホットスタンバイをコピーすると言うことができます。いくつかの簡単なアプリケーションを行うには、次の対流をコピーします。

三スタンバイスイッチング

通常、データベースの属性を照会するには、いくつかのコマンドにより、プライマリ・データベースが読み書きされ、読み取り専用のスタンバイ・データベースを。プライマリ・データベースがダウンしているときは、トリガー・ファイルを作成することができ、スタンバイ・データベースは、メインデータベースへのHAのいくつかの基本的なアプリケーションを推進していきます。

3.1クエリの待機

3.1.1 pg_controldata

主机
[postgres@localhost ~]$ pg_controldata
pg_control version number:            960
Catalog version number:               201608131
Database system identifier:           6362107256088627972
Database cluster state:               in production
备机
pg_control version number:            960
Catalog version number:               201608131
Database system identifier:           6362107256088627972
Database cluster state:               in archive recovery

クラスタの状態のホストがクラスタ状態機械は、アーカイブの回復に用意され、生産しています。

3.1.2辞書テーブルpg_stat_replication

メイン辞書では表に記載されています記録である、バックアップ・マシンは、クエリではありません。

postgres=# select pid,application_name,client_addr,client_port,state,sync_state from pg_stat_replication;
  pid  | application_name |  client_addr  | client_port |   state   | sync_state 
-------+------------------+---------------+-------------+-----------+------------
 17131 | walreceiver      | 192.168.0.105 |       55734 | streaming | async
(1 row)

3.1.3識別処理情報

プロセスの表示WAL送信者が表示WAL受信機が用意マシンで、ホストである
マスター:

 

ホストプロセス.PNG

 

スレーブ:

 

バックアップ・マシンのプロセス.PNG

PG機能により、3.1.4

調製マシンは、ホストがFであり、Tです。
ホストコンピューター

postgres=# select pg_is_in_recovery();
 pg_is_in_recovery 
-------------------
 f
(1 row)

準備マシン

postgres=# select pg_is_in_recovery();
 pg_is_in_recovery 
-------------------
 t
(1 row)

ホストマシンの3.2調製に切り替えられます

ホストダウンの前に:

備前・マシンのダウンタイムプロセス.PNG

 

ホストがにpg_ctl stopコマンドを実行します。
ダウンタイムの後:

 

ホストは.PNGダウンした後、

 

調製マシンは、ホストが接続できないこと与えられます。
彼は以前に設定されていました。

 trigger_file = '/home/postgres/datatrigger_file'

ホストマシンへのスタンバイスイッチは、バックアップ上で実行されます

[postgres@localhost ]$  touch /home/postgres/data/trigger_file;

プロセスを見るためにスタンバイ・マシン上で移動します:

バックアップ・マシンのプロセス.PNG

準備はホストに切り替えられました。

3.3原盤は、スタンバイ・マシンに切り替えられます

現在のホストではINSERT文を実行し(今スレーブ、ホストの切り替え)

postgres=#  insert into tt(name) values('sdf');

マスター・データ・ディレクトリー・recovery.doneはrecovery.confのになっていない場合は、手動で変更を強制することができます。

[postgres@data]$  mv recovery.done recovery.conf

すでにrecovery.confのすぐ下に実行された場合。

#启动数据库
[postgres@data]$  pg_ctl start
[postgres@bogon data]$ ERROR:  requested starting point 0/6000000 on timeline 1 is not in this server's history
DETAIL:  This server's history forked from timeline 1 at 0/4000098.
ERROR:  requested starting point 0/6000000 on timeline 1 is not in this server's history
DETAIL:  This server's history forked from timeline 1 at 0/4000098.
ERROR:  requested starting point 0/6000000 on timeline 1 is not in this server's history
#其实还有很多时间线不一致等

その理由は、現在のマスタスレーブデータ変更、元のマスタデータと現在のデータの矛盾は、データの整合性のタイムラインを確保することです。私たちは、タイムラインを同期するためにpg_rewindを使用しています。
マスターで(オペレーティングから)

#从slave上拉取最新时间线和数据给当前的master
[postgres@bogon ~]$ pg_rewind  --target-pgdata=/home/postgres/data --source-server='host=slave port=5432 user=postgres dbname=postgres'

target server must be shut down cleanly
Failure, exiting

发现报错了,说target server 必须关闭,source-server是slave,那么target server就是master,那么停掉master上pg服务。

#先停止服务
[postgres@bogon ~]$  pg_ctl stop
#再拉取数据
[postgres@bogon ~]$ pg_rewind  --target-pgdata=/home/postgres/data --sourceserver='host=slave port=5432 user=postgres dbname=postgres'
servers diverged at WAL position 0/4000098 on timeline 1
rewinding from last common checkpoint at 0/4000028 on timeline 1
Done!
#重启服务
[postgres@bogon ~]$  pg_ctl start

可以检查下,现在的master上数据和slave是一致的了。

发布了17 篇原创文章 · 获赞 2 · 访问量 5万+

おすすめ

転載: blog.csdn.net/u011250186/article/details/103779846