postgres standby实现同步流复制

postgres可以实现基于流传递wal日志然后实现standby,从而实现数据库的高可用。在创建standby的过程中,有两种方式,一种是同步的方式,另外一种方式是异步的方式。同步和异步的差别在于,异步的方式为当master将wal日志传递给slave端之后,不需要standby端进行确认就进行了返回。这样如果数据发生了崩溃会导致数据有误差。而同步的方式则是需要standby对master端穿过来的wal日志进行确认,知道确认成功才会进行返回,这就保证了两边数据的完全的一直。但是这种模式会存在一个问题,如果standby出现问题,然后一直不能对master的请求进行确认,就会导致master主机将会被hang住,从而导致数据库不能写。所以我们在搭建同步的数据库集群的时候,要求standby的数量在两个以上。

环境说明:(为了方便下面的实验环境一共采用了一个standby,不过正式的环境中一定要注意)

master:

192.168.8.4

192.168.8.147

 

更改master端的配置文件(postgres.conf)

wal_level =hot_standby

max_wal_senders =5

listen_addresses ='*'

synchronous_standby_names= 'standby01' (此处的名字一定要写,多个名字利用逗号分开,代表的是standby的名字)

创建用户并且对登录情况进行限制(pg_hba.conf)

在配置文件中添加如下的行

host     replication     all             all          md5

在standby进行数据文件的拷贝

pg_basebackup  -U replicaiton  -h 192.168.8.4 -F p -P -x -R -D/data/postgresdata_backup/ -l backup20170611

之后修改数据目录下面的recovery.conf配置文件

primary_conninfo ='application_name=name user=replication password=*** host=192.168.8.4 port=5432sslmode=disable sslcompression=1'

注意此处的需要添加application_name=name(此时的name和在主配置中的synchronous_standby_names保持一致)

修改配置文件打开standby

hot_standby = on

然后就可以对数据库进行重启了

之后可以在master端进行查看同步情况

selectpid,state,client_addr,sync_priority,sync_state from pg_stat_replication;

  pid |   state   | client_addr  | sync_priority |sync_state

-------+-----------+---------------+---------------+------------

 32379 | streaming | 192.168.8.147 |             1 | sync

表示现在同步正常,如果有多台standby的话另外的standby也会出现在这个列表中,不过他的状态为potential,表示他可以成为sync状态。

另外hang住的情况也可以自行测试,在此处我就不测试了。


 

 

 

 

你可能感兴趣的:(linux)