從9.1后,提供了同步流復制的架構。同步復制要求在數據寫入standby數據庫后,事務的commit才返回,所以standby庫出現問題時,會導致主庫hang住。可以啟動兩個standby數據庫,只要有一個是正常的,主庫就不會hang住。但是因為資源限制,這里只配置一個standby庫。環境:主機名ip地址角色數據目錄pg186.168.100.14主庫/PostgreSQL/9.6.1/datanpghs186.168.100.24standby/PostgreSQL/9.6.1/datass實現同步復制功能主要是在主庫上配置參數“synchronous_standby_names”,這個參數指定多個standby的名稱,各個名稱通過逗號分隔,而standby名稱是在standby連接到主庫時,由連接參數“application_name”指定的。要使用同步復制,standby庫中的recovery.conf里的PRimary_conninfo一定要指定“application_name”。配置步驟:在主庫上配置:host replication postgres 186.168.100.0/24 trustpostgresql.conf設置:listen_addresses = '*'max_wal_senders = 5wal_level = hot_standby增加:synchronous_standby_names='standby01' --在最后只需reloadstandby庫的操作:[postgres@pghs ~]$ pg_basebackup -h 186.168.100.14 -U postgres -F p -P -x -R -D /PostgreSQL/9.6.1/datass -l postgresbackup2017021045098/45098 kB (100%), 2/2 tablespaces修改recovery.confstandby_mode = 'on'primary_conninfo = 'application_name=standby01 user=postgres host=186.168.100.14 port=5432 sslmode=disable sslcompression=1'在主庫reload,使synchronous_standby_names='standby01' 生效起備庫:[postgres@pghs datass]$ pg_ctl start -D /PostgreSQL/9.6.1/datass測試:主庫創建新表及插入數據:postgres=# create table testss(id int ,name varchar(10));CREATE TABLEpostgres=# insert into testss values(1,'dxmy');INSERT 0 1目標端查看:[postgres@pghs ~]$ psqlpsql (9.6.1)Type "help" for help.postgres=# select * from testss; id | name----+------ 1 | dxmy(1 row)postgres=模擬備庫掛掉:[postgres@pghs ~]$ pg_ctl stop -D /PostgreSQL/9.6.1/datass/waiting for server to shut down.... doneserver stopped在主庫插入數據嘗試:postgres=# insert into testss values(2,'dxmy');一直卡著,不完成備庫起來:postgres=# insert into testss values(2,'dxmy');INSERT 0 1立馬成功!
新聞熱點
疑難解答