PostgreSQL 主从异步、同步流复制配置(三)

同步、异步多从库复制

该搭建整套环境如下:
PostgreSQL 9.6 SUSE 环境搭建(一)
PostgreSQL 主从异步流复制配置(二)
PostgreSQL 主从异步、同步流复制配置(三)

master上连接pocdb 数据库 ,基于配置二的节点状态

pocdb=# SELECT client_addr,application_name,sync_state FROM pg_stat_replication;
 client_addr | application_name | sync_state 
-------------+------------------+------------
 10.10.56.17 | slave1           | async
 10.10.56.19 | slave2           | async
(2 rows)

master有两个slave都是async(异步)流复制,现在修改slave1节点为sync(同步)流复制,修改master 节点的postgresql.conf中参数synchronous_standby_names

synchronous_standby_names = 'slave1' 
postgres@clw-db1:~> /opt/pgsql-9.6/bin/pg_ctl -D /pgdata/9.6/poc/data/ reload
server signaled

查看master的复制信息:

pocdb=# SELECT client_addr,application_name,sync_state FROM pg_stat_replication;
 client_addr | application_name | sync_state 
-------------+------------------+------------
 10.10.56.17 | slave1           | sync
 10.10.56.19 | slave2           | async
(2 rows)

slave1已经修改为同步复制。

同步复制slave宕机测试

a. 隐式事务,同步slave宕机,事务挂起,slave恢复后写事务继续执行。

pocdb=# SELECT client_addr,application_name,sync_state FROM pg_stat_replication;
 client_addr | application_name | sync_state 
-------------+------------------+------------
 10.10.56.17 | slave1           | sync
(1 row)

slave1为同步复制方式,当slave1宕机(kill -9),在master上执行查询可以执行,但写入的DML语句,将被block;

pocdb=# SELECT * FROM tbl;    
 id | ival | cval 
----+------+------
  1 |    1 | A
  2 |   20 | B
(2 rows)

pocdb=# INSERT INTO tbl (ival,cval) VALUES ( 4,NULL);      

恢复slave1之后,master上的事务将继续执行:
恢复slave:

postgres@clw-db2:~> /opt/pgsql-9.6/bin/pg_ctl -D /pgdata/9.6/poc/data/ start
server starting

master上的事务:

pocdb=# INSERT INTO tbl (ival,cval) VALUES ( 4,NULL);      
INSERT 0 1
pocdb=# SELECT * FROM tbl;
 id | ival | cval 
----+------+------
  1 |    1 | A
  2 |   20 | B
  4 |    4 | 
(3 rows)

在同步复制的slave节点上查询

pocdb=# SELECT * FROM tbl;
 id | ival | cval 
----+------+------
  1 |    1 | A
  2 |   20 | B
  4 |    4 | 
(3 rows)

b. 显式事务,在slave宕机的情况下,提交的事务会本地提交,slave恢复后会将master上本地提交的事务同步到slave,rollback的事务在slave宕机时不受影响。
显式本地提交事务:

pocdb=# BEGIN;  
BEGIN
pocdb=# INSERT INTO tbl (ival,cval) VALUES (5,NULL);
INSERT 0 1
pocdb=# COMMIT;
^CCancel request sent
WARNING:  canceling wait for synchronous replication due to user request
DETAIL:  The transaction has already committed locally, but might not have been replicated to the standby.
COMMIT
pocdb=# 

显式本地ROLLBACK事务:

pocdb=# BEGIN;
BEGIN
pocdb=# INSERT INTO tbl (ival,cval) VALUES (10,'f');  
INSERT 0 1
pocdb=# ROLLBACK;
ROLLBACK
pocdb=# 

在slave上查询:

postgres@clw-db2:~> /opt/pgsql-9.6/bin/psql pocdb
psql (9.6.8)
Type "help" for help.

pocdb=# SELECT * FROM tbl;
 id | ival | cval 
----+------+------
  1 |    1 | A
  2 |   20 | B
  4 |    4 | 
  6 |    5 | 
(4 rows)
异步复制slave宕机

当异步复制slave宕机,master读写不受影响,恢复后可即时同步到最新数据:

pocdb=# SELECT * FROM tbl;    
 id | ival | cval 
----+------+------
  1 |    1 | A
  2 |   20 | B
  4 |    4 | 
  6 |    5 | 
(4 rows)
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL 中的主从复制和归档是实现高可用性和数据备份的两种常见方式。以下是如何配置 PostgreSQL 主从复制和归档的简要说明: 1. 主从复制配置: 首先在主服务器上进行如下配置: - 修改 `postgresql.conf` 文件,启用 WAL 日志记录和复制,并指定要复制的 WAL 日志级别: ``` wal_level = replica max_wal_senders = 5 wal_keep_segments = 32 ``` - 修改 `pg_hba.conf` 文件,允许从服务器连接主服务器: ``` host replication replica 192.168.1.0/24 md5 ``` 然后在从服务器上进行如下配置: - 创建从服务器上用于复制主服务器上数据库的用户: ``` CREATE USER replica WITH REPLICATION LOGIN PASSWORD 'password'; ``` - 在 `recovery.conf` 文件中指定从服务器要连接的主服务器信息和要恢复的时间点: ``` standby_mode = on primary_conninfo = 'host=192.168.1.100 port=5432 user=replica password=password' recovery_target_timeline = 'latest' ``` 2. 归档配置: - 修改 `postgresql.conf` 文件,启用归档并指定归档目录: ``` archive_mode = on archive_command = 'cp %p /mnt/archive/%f' ``` 其中 `%p` 表示要归档的 WAL 日志路径,`%f` 表示要归档的文件名。 - 确认归档目录已经创建,并由 PostgreSQL 用户可以写入。 - 在从服务器上进行如下配置: ``` restore_command = 'cp /mnt/archive/%f %p' ``` 其中 `%p` 表示要恢复的 WAL 日志路径,`%f` 表示要恢复的文件名。 以上是 PostgreSQL 主从复制和归档的简要配置说明。需要注意的是,具体的配置可能会因为环境和需求的不同而有所不同,建议在实际应用中根据需要进行相应的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值