CentOS PostgreSQL 12 主从复制(主从切换)操作
  • 作者:admin
  • 发表时间:2021-05-28 07:51
  • 来源:未知

主从复制

1. 基于文件的日志传送

创建一个高可用性(HA)集群配置可采用连续归档,集群中主服务器工作在连续归档模式下,备服务器工作在连续恢复模式下(1台或多台可随时接管主服务器),备持续从主服务器读取WAL文件。

连续归档不需要对数据库表做任何改动,可有效降低管理开销,对主服务器的性能影响也相对较低。

直接从一个数据库服务器移动WAL记录到另一台服务器被称为日志传送,PostgreSQL通过一次一文件(WAL段)的WAL记录传输实现了基于文件的日志传送。

日志传送所需的带宽取根据主服务器的事务率而变化;

日志传送是异步的,即WAL记录是在事务提交后才被传送,那么在一个窗口期内如果主服务器发生灾难性的失效则会导致数据丢失,还没有被传送的事务将会被丢失;

数据丢失窗口可以通过使用参数archive_timeout进行限制,可以低至数秒,但同时会增加文件传送所需的带宽。

2. 流复制

PostgreSQL在9.x之后引入了主从的流复制机制,所谓流复制,就是备服务器通过tcp流从主服务器中同步相应的数据,主服务器在WAL记录产生时即将它们以流式传送给备服务器,而不必等到WAL文件被填充。

默认情况下流复制是异步的,这种情况下主服务器上提交一个事务与该变化在备服务器上变得可见之间客观上存在短暂的延迟,但这种延迟相比基于文件的日志传送方式依然要小得多,在备服务器的能力满足负载的前提下延迟通常低于一秒;

在流复制中,备服务器比使用基于文件的日志传送具有更小的数据丢失窗口,不需要采用archive_timeout来缩减数据丢失窗口;

将一个备服务器从基于文件日志传送转变成基于流复制的步骤是:把recovery.conf文件中的primary_conninfo设置指向主服务器;设置主服务器配置文件的listen_addresses参数与认证文件即可。

操作系统: CentOS 7

数据库: PostgreSQL 12

一、主库配置

1、创建具有流复制权限的用户

1CREATE ROLE replica login replication encrypted password 'replica的密码';

2、编辑pg_hba.conf

# 新增或修改下列属性设置
# 监听所有IP
listen_addresses = '*'
# 开启归档
archive_mode = on
#归档命令
archive_command = 'test ! -f /var/唐山小程序开发lib/pgsql/12/data/pg_archive/%f && cp %p /var/lib/pgsql/12/data//pg_archive/%f'
# 9.6开始没有hot_standby(热备模式)
wal_level = replica
#最多有2个流复制连接
max_wal_senders = 2
wal_keep_segments = 16
#流复制超时时间
wal_sender_timeout = 60s
# 最大连接数,据说从机需要大于或等于该值
max_connections = 100

 

3、重启postgres