服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - PostgreSQL - CentOS PostgreSQL 12 主从复制(主从切换)操作

CentOS PostgreSQL 12 主从复制(主从切换)操作

2021-04-05 20:52VicLW PostgreSQL

这篇文章主要介绍了CentOS PostgreSQL 12 主从复制(主从切换)操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

主从复制

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、创建具有流复制权限的用户

?
1
create role replica login replication encrypted password 'replica的密码';

2、编辑pg_hba.conf

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 新增或修改下列属性设置
# 监听所有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

?
1
pg_ctl -d /var/lib/pgsql/12/data -l logfile restart

二、从库配置

1、验证在从库是否可以访问主节点

?
1
psql -h 10.20.2.195 -u postgres

2、停止从库postgres服务

?
1
pg_ctl -d /var/lib/pgsql/12/data -l logfile stop

3、清空从库数据存储文件夹

?
1
rm -rf /var/lib/pgsql/12/data/*

4、从主服务器上copy数据到从服务器,这一步叫做“基础备份”

?
1
pg_basebackup -h 主节点ip -p 5432 -u replica -fp -xs -pv -r -d /var/lib/pgsql/12/data

5、此时data目录下会出现standby.signal文件,编辑此文件

?
1
2
## 加入
standby_mode = 'on'

6、修改postgresql.conf文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#从机信息和连接用户
primary_conninfo = 'host=主节点ip port=5432 user=replica password=replica用户的密码'
#说明恢复到最新状态
recovery_target_timeline = latest
#大于主节点,正式环境应当重新考虑此值的大小
max_connections = 120
#说明这台机器不仅用于数据归档,还可以用于数据查询
hot_standby = on
#流备份的最大延迟时间
max_standby_streaming_delay = 30s
#向主机汇报本机状态的间隔时间
wal_receiver_status_interval = 10s
#r出现错误复制,向主机反馈
hot_standby_feedback = on

7、重启从库

?
1
pg_ctl -d /var/lib/pgsql/12/data -l logfile start

三、验证主从搭建是否成功

1、连接主库执行

?
1
select client_addr,sync_state from pg_stat_replication;

CentOS PostgreSQL 12 主从复制(主从切换)操作

说明从服务器正在接收流,而且是异步流复制。主从配置成功

四、主从切换

主数据库是读写的,备数据库是只读的。当主数据库宕机了,可以通过pg_controldata命令将从库提升为主库(将只读模式变成读写),实现一些基本的ha应用。也可以通过建立触发文件提升为主库,不推荐。命令快捷不容易出错。

1、查看/var/lib/pgsql/12/data复制状态

主库

CentOS PostgreSQL 12 主从复制(主从切换)操作

从库

CentOS PostgreSQL 12 主从复制(主从切换)操作

2、主库故障,停止主库服务

CentOS PostgreSQL 12 主从复制(主从切换)操作

3、提升从库为主库

?
1
2
su - postgres -c "pg_ctl promote"
server promoting

4、查看从库日志

?
1
cat /var/lib/pgsql/912/data/pg_log/postgresql-mon.log

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://www.cnblogs.com/VicLiu/p/12993542.html

延伸 · 阅读

精彩推荐
  • PostgreSQLPostgreSQL标准建表语句分享

    PostgreSQL标准建表语句分享

    这篇文章主要介绍了PostgreSQL标准建表语句分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    码上得天下7962021-02-27
  • PostgreSQLpostgresql 中的to_char()常用操作

    postgresql 中的to_char()常用操作

    这篇文章主要介绍了postgresql 中的to_char()常用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    J符离13432021-04-12
  • PostgreSQLpostgresql 数据库中的数据转换

    postgresql 数据库中的数据转换

    postgres8.3以后,字段数据之间的默认转换取消了。如果需要进行数据变换的话,在postgresql数据库中,我们可以用"::"来进行字段数据的类型转换。...

    postgresql教程网12482021-10-08
  • PostgreSQLPostgresql开启远程访问的步骤全纪录

    Postgresql开启远程访问的步骤全纪录

    postgre一般默认为本地连接,不支持远程访问,所以如果要开启远程访问,需要更改安装文件的配置。下面这篇文章主要给大家介绍了关于Postgresql开启远程...

    我勒个去6812020-04-30
  • PostgreSQLPostgresql查询效率计算初探

    Postgresql查询效率计算初探

    这篇文章主要给大家介绍了关于Postgresql查询效率计算的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Postgresql具有一定的参考学习价...

    轨迹4622020-05-03
  • PostgreSQL分布式 PostgreSQL之Citus 架构

    分布式 PostgreSQL之Citus 架构

    节点 Citus 是一种 PostgreSQL 扩展,它允许数据库服务器(称为节点)在“无共享(shared nothing)”架构中相互协调。这些节点形成一个集群,允许 PostgreSQL 保存比单...

    未知802023-05-07
  • PostgreSQL深入理解PostgreSQL的MVCC并发处理方式

    深入理解PostgreSQL的MVCC并发处理方式

    这篇文章主要介绍了深入理解PostgreSQL的MVCC并发处理方式,文中同时介绍了MVCC的缺点,需要的朋友可以参考下 ...

    PostgreSQL教程网3622020-04-25
  • PostgreSQLRDS PostgreSQL一键大版本升级技术解密

    RDS PostgreSQL一键大版本升级技术解密

    一、PostgreSQL行业位置 (一)行业位置 在讨论PostgreSQL(下面简称为PG)在整个数据库行业的位置之前,我们先看一下阿里云数据库在全球的数据库行业里的...

    未知1192023-05-07