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

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

1.基于文件的日志传送

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

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

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

  1. 日志传送所需的带宽取根据主服务器的事务率而变化;
  2. 日志传送是异步的,即WAL记录是在事务提交后才被传送,那么在一个窗口期内如果主服务器发生灾难性的失效则会导致数据丢失,还没有被传送的事务将会被丢失;
  3. 数据丢失窗口可以通过使用参数archive_timeout进行限制,可以低至数秒,但同时会增加文件传送所需的带宽。

2.流复制

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

  1. 默认情况下流复制是异步的,这种情况下主服务器上提交一个事务与该变化在备服务器上变得可见之间客观上存在短暂的延迟,但这种延迟相比基于文件的日志传送方式依然要小得多,在备服务器的能力满足负载的前提下延迟通常低于一秒;
  2. 在流复制中,备服务器比使用基于文件的日志传送具有更小的数据丢失窗口,不需要采用archive_timeout来缩减数据丢失窗口;
  3. 将一个备服务器从基于文件日志传送转变成基于流复制的步骤是:把recovery.conf文件中的primary_conninfo设置指向主服务器;设置主服务器配置文件的listen_addresses参数与认证文件即可。

操作系统: CentOS 7

数据库: PostgreSQL 12

PostgreSQL 12 安装

一、主库配置

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

CREATE 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 = 2wal_keep_segments = 16#流复制超时时间
wal_sender_timeout =60s
# 最大连接数,据说从机需要大于或等于该值
max_connections = 100  

3、重启postgres

pg_ctl -D /var/lib/pgsql/12/data -l logfile restart

二、从库配置

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

psql -h 10.20.2.195 -U postgres

2、停止从库postgres服务

pg_ctl -D /var/lib/pgsql/12/data -l logfile stop

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

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

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

pg_basebackup -h 主节点IP -p 5432 -U replica -Fp -Xs -Pv -R -D /var/lib/pgsql/12/data

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

## 加入
standby_mode = 'on'

6、修改postgresql.conf文件

#从机信息和连接用户
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、重启从库

pg_ctl -D /var/lib/pgsql/12/data -l logfile start

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

1、连接主库执行

select client_addr,sync_state from pg_stat_replication;

CentOS PostgreSQL 12 主从复制(主从切换)第1张

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

四、主从切换

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

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

主库

CentOS PostgreSQL 12 主从复制(主从切换)第2张

从库

CentOS PostgreSQL 12 主从复制(主从切换)第3张

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

CentOS PostgreSQL 12 主从复制(主从切换)第4张

3、提升从库为主库

su - postgres -c "pg_ctl promote"

server promoting

4、查看从库日志

cat /var/lib/pgsql/912/data/pg_log/postgresql-Mon.log

免责声明:文章转载自《CentOS PostgreSQL 12 主从复制(主从切换)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ECharts问题--散点图中对散点添加点击事件SAP 仓储操作说明书(存)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

centos性能优化cpu相关的测试及方法

工具下载地址https://src.fedoraproject.org/repo/pkgs/stress/stress-1.0.4.tar.gz/a607afa695a511765b40993a64c6e2f4/stress-1.0.4.tar.gzhttps://ftp.osuosl.org/pub/blfs/conglomeration/sysstat...

Python接口自动化实战(第二阶段)- 数据与代码分离

前面我们已经实现了用unittest框架编写测试用例,实现了请求接口的封装,这样虽然已经可以完成接口的自动化测试,但是其复用性并不高。 我们看到每个方法(测试用例)的代码几乎是一模一样的,试想一下,在我们的测试场景中,一个注册接口有可能会有十几条到几十条测试用例,如果每组数据都编写一个方法,这样将会有更多的重复项代码,不仅执行效率不高,也不好维护。 接下来...

c#中高效的excel导入sqlserver的方法

将oledb读取的excel数据快速插入的sqlserver中,很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,最好的办法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 类来实现。不但速度快,而且代码简单,下面测试代码导入一个6万多条数据的sheet,包括读取(全部读取比较慢)在我的开发环境中只需要10秒...

qcow2 磁盘扩容方法,亲测好使

在linux上创建kvm虚拟机,创建的虚拟机觉得硬盘空间太小可能会影响以后的使用,然后找见这篇文章扩容,非常好使   qcow2 磁盘扩容方法 直接扩展现有qcow2格式磁盘大小的方法 1. 查看磁盘文件信息,进行扩展 2. 启动虚拟机查看磁盘信息 3. 开始分区 4. 创建物理卷、加入卷组、扩展逻辑卷 5. 确认磁盘是否增长 直接扩展现有qc...

学习pycharm----自动化接口

1.pycharm中安装requests a:打开pycharm软件,点击file-setting b:在目录下点击Project Interpreter,在目录的右侧,点击右上方的+ c: 在输入框中输入requests,点击安装(提示sucessful时,表名安装第三方库成功) ps:在pycharm中安装其他第三方库是一样的步骤 2.使用pychar...

centos 卸载vsftpd方法

如果服务器上安装了vsftpd,配置出错需要卸载vsftpd 1、查询vsftpd [root@localhost ~]# rpm -aq vsftpd vsftpd-2.0.5-16.el5_5.1 #此处是查找vsftpd的返回结果 2、使用service vsftpd status 查看vsftpd的状态 service vsftpd status...