切り替えで約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是一致的了。