pg_basebackup 配置 stream replication 异步/同步
os :oel 6.8
postgresql: 9.6.3
PostgreSQL9.0 standby數據庫在應用WAL日志的同時,也可以提供只讀服務,
這是PostgreSQL9.0中最激動人心的功能,這個功能在oracle數據庫中也只是最新版本11g中才有的新功能。
這個功能在oracle中叫 active dataguard,在PostgreSQL中稱為 hot standby。
在利用日志恢復數據的同時可以用只讀的方式打開數據庫,用戶可以在備用數據庫上進行查詢、報表等操作,也可用做讀寫分離。
在PostgreSQL9.0之前,也可以搭建standby數據庫,但standby數據庫只能處于恢復狀態中,不能打開,也不支持只讀打開。
而這種情況在9.0之后徹底改變了。
PostgreSQL 9.0中日志傳送的方法有兩種:
基于文件(base-file)的傳送方式,這種方式是PostgreSQL9.0之前就提供的方法。
也就是服務器寫完一個WAL日志文件后,才把WAL日志文件拷貝到standby數據庫上去應用。類似于oracle dg 的 arch 方式
流復制(streaming replication)的方法,這是PostgreSQL9.0才提供的新方法。
這個方法就是事務提交后,就會把生成的日志異步的傳送到standby數據庫上應用,
這比基本文件的日志傳送方法有更低的數據延遲。類似于oracle dg 的 lgwr sync/async 方式
master 庫創建復制用戶
master庫參數調整
$ vi postgresql.confalter system set listen_addresses = '0.0.0.0';
alter system set port = '5432';alter system set wal_level = 'logical';
alter system set fsync = on;
alter system set synchronous_commit = on;
alter system set wal_sync_method = fdatasync;
alter system set full_page_writes = on;
alter system set wal_log_hints = on;alter system set wal_keep_segments = '100';
alter system set max_wal_senders = '10';alter system set hot_standby = 'on';alter system set archive_mode = 'on';
alter system set archive_command = 'cp %p /mnt/pgarchive/%f < /dev/null';
alter system set archive_timeout = '300';
listen_addresses = ‘*’ 表示在所有的ipv4、ipv6地址上添加監聽
listen_addresses = ‘0.0.0.0’ 表示在所有的ipv4地址上添加監聽
master庫重啟
$ pg_ctl stop -m fast -D /var/lib/pgsql/9.6/main/
$ pg_ctl start -D /var/lib/pgsql/9.6/main/
master機器上,創建 replicator 用戶:
$ psql
CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'pass0rd'; master庫修改 pg_hba.conf 文件
$ vi pg_hba.conf
host replication replicator 192.168.56.0/24 md5 $ psql -c "select pg_reload_conf();"
說明允許用戶postgres 從192.168.56.0/24 網絡上發起到本地數據庫的流復制,使用md5
master切換日志
$ psql -c "select pg_switch_xlog();"
slave庫參數調整
postgresql停止的前提下,刪除data目錄的內容:
$ rm -rf /var/lib/pgsql/9.6/main/
slave庫修改參數
$ vi postgresql.confwal_level = 'logical'
fsync = on
synchronous_commit = on
wal_sync_method = fdatasync
full_page_writes = on
wal_log_hints = onwal_keep_segments = '100'
max_wal_senders = '10'
hot_standby = 'on'
slave庫執行 pg_basebackup 拉取文件
$ pg_basebackup -h 192.168.56.201 -D /var/lib/pgsql/9.6/main/ -U replicator -v -P -R-D, --pgdata=DIRECTORY receive base backup into directory
-v, --verbose output verbose messages
-P, --progress show progress information
-R, --write-recovery-conf write recovery.conf for replication
slave庫ecovery.conf文件
$ vi /var/lib/pgsql/9.6/main/recovery.conf#restore_command = ''
#archive_cleanup_command = ''
standby_mode = 'on'
recovery_target_timeline = 'latest'
primary_conninfo='host=192.168.56.201 port=5432 user=replicator password=pass0rd'
trigger_file = '/tmp/postgresql.trigger' slave啟動服務
$ pg_ctl start -D /var/lib/pgsql/9.6/main/
數據驗證
master端查看replication狀態
select * from pg_stat_replication ;
select client_addr,pg_xlog_location_diff(sent_location, write_location) as write_delay,pg_xlog_location_diff(sent_location, flush_location) as flush_delay,pg_xlog_location_diff(sent_location, replay_location) as replay_delay from pg_stat_replication;
同步復制
alter system set synchronous_commit = 'on';
alter system set synchronous_standby_names = '*'; pg_ctl restart -D /var/lib/pgsql/9.6/main/pg_ctl reload -D /var/lib/pgsql/9.6/main/
select pg_reload_conf();
slave端也要修改 recovery.conf
primary_conninfo = 'host=192.168.56.201 port=5432 user=replicator password=pass0rd application_name=node2'
增加了 application_name=node2
不過采用同步的方式最好配置多臺slave,防止單臺slave宕機導致master上無法執行事務
alter system set synchronous_standby_names = 'node2,node3';
或者
alter system set synchronous_standby_names = '*';
轉載于:https://www.cnblogs.com/ctypyb2002/p/9792901.html
總結
以上是生活随笔為你收集整理的pg_basebackup 配置 stream replication 异步/同步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 0x58 数据结构优化DP
- 下一篇: 求大佬帮忙啊