首页 > 其他分享 >pg 流复制集群部署和介绍

pg 流复制集群部署和介绍

时间:2024-11-05 11:12:16浏览次数:1  
标签:主库 备库 复制 集群 pg 参数 basebackup

一、流复制集群介绍
postgresql 在9.x以前是基于wal 日志传送的方式进行复制的,当一个wal写完进行切换之后才会把该wal日志文件传送到备库进行应用,这样延迟比较大。 9.x 以后支持流复制,所谓流复制就是主服务器在 WAL 记录产生时即将它们以流式传送给备服务器而不必等到 WAL 文件被填充,这种模式下传送的单位是 record‌。该复制方式属于物理层面的复制,可以从实例级复制出一个与主库一模一样的实例级的从库。

二、部署流复制集群
ip 角色 操作系统
192.168.167.11 主库 redhat7.4
192.168.167.12 备库1 redhat7.4
192.168.167.13 备库2 redhat7.4

数据库版本用的是pg-12.6

2.1、安装pg
安装步骤见我另一篇博客:https://www.cnblogs.com/sunjiwei/p/18451350

先按照安装文档部署三个实例

2.2、流复制集群部署
1、在主库创建复制账号repuser
create user repuser replication login connection limit 10 encrypted password '111111';

2、修改主库pg_hba配置文件,让复制用户能够连接
vim /opt/pgdata/data/pg_hba.conf

# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust
host    replication     repuser         192.168.167.0/24          md5

# 最下面一行是新加的,192.168.167.0是备库的网段,24是子网掩码,可以在备库上执行ip a 命令查看网段和掩码

# 使配置生效
pg_ctl -D /opt/pgdata/data reload

3、在两个从库上备份主库数据,这里使用pg_basebackup进行物理备份
# 先把备库停了,然后把备库数据目录删除或者备份
mv /opt/pgdata/data  /opt/pgdata/data.bak

# 备份主库数据
[postgres@xl002 pgdata]$ pg_basebackup -D /opt/pgdata/data -Fp -Pv -Xs -Urepuser -R -h192.168.167.11 -p5432 -W
Password: 
pg_basebackup: initiating base backup, waiting for checkpoint to complete
WARNING:  skipping special file "./.s.PGSQL.5432"
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/4000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created temporary replication slot "pg_basebackup_31645"
WARNING:  skipping special file "./.s.PGSQL.5432"data/base.tar          )
24570/24570 kB (100%), 1/1 tablespace                                         
pg_basebackup: write-ahead log end point: 0/4000100
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: base backup completed

注意:备份第一步主库会做个checkpoint,有时这步会比较慢,可以在主库手动执行checkpoint;命令,也可以备份时添加--checkpoint=fast参数

参数解释:
-D  备份到哪个目录
-Ft  打tar包
-F, --format=p|t       #output format (plain (default), tar)

-Pv
-P, --progress         #show progress information
-v, --verbose          #output verbose messages

-Xs 
-X, --wal-method=none|fetch|stream  #include required WAL files with specified method


-R, --write-recovery-conf  # 会自动在配置文件中添加连接主库的参数primary_conninfo

4、修改配置文件中关于replication的参数
注意:pg关于复制的参数,有些只在主库配置,有些只在从库配置,有些主从都配置

# 只在主库配置的参数
synchronous_standby_names = ''

解释:
pg的流复制有两种方式,一种是同步流复制,一种是异步流复制,如果主库的这个参数为空,则所有的备库都是异步流复制,如果主库的该参数不为空,则被指定的备库就是同步流复制备库,没被指定的则为异步流备库,该参数值配置有三种方式:
一是直接写死,比如synchronous_standby_names = 's1',这样就只有s1这台备库是同步流复制,其他备库都是异步流复制,但是一般那不建议这样配置,因为主库开启同步流复制后,如果同步流备库down了,则主库无法写入,会hang住,所以这样写死的风险较大。

二是synchronous_standby_names = 'FIRST 2 (s1, s2, s3)'这种写法,
方法FIRST指定一种基于优先级的同步复制并且让主库事务提交等待,直到它们的WAL记录被复制到基于优先级选中的所要求数量的同步流备库上为止。数字2表示主库会有2个同步流备库,(s1, s2, s3) 这个是你自己给备库起的名字,要和备库配置文件primary_conninfo参数中的配置项application_name保持一致,下文会介绍primary_conninfo参数。在列表中靠前的备库被给予较高的优先级,并且将被考虑为同步后备。其他在这个列表中位置靠后的备服务器表示潜在的(potential)同步流备库。如果任何当前的同步后备由于任何原因断开连接,它将立刻被下一个最高优先级的后备所替代。

在上面这个例子中,有三个后备服务器s1、s2、s3在运行,两个后备服务器s1和s2将被选中为同步流备库,因为它们出现在后备服务器名称列表的前部。s3是一个潜在的同步流备库,当s1或s2中的任何一个失效, 它就会取而代之。如果主库还有其他备库,比如s4,但是因为s4的名字不在列表中,所以s4无论什么情况都只能是异步流备库。

第三种写法是synchronous_standby_names = 'ANY 2 (s1, s2, s3)',
在这个例子中,方法ANY指定一种基于规定数量的同步复制,数字2表示主库会有两个同步流复制备库。这里意思是会任意选择两台作为同步流备服务器。另一台则作为潜在同步流备服务器。如果主库还有其他备库,比如s4,但是因为s4的名字不在列表中,所以s4无论什么情况都只能是异步流备库。


# 只在备库上配置的参数,如果备份时添加了-R参数,则会在postgresql.auto.conf中自动配置好该参数,不用手动配置
primary_conninfo = ''
例如:
primary_conninfo = 'host=192.168.167.11  port=5432 user=repuser password=111111 application_name=xl001'

这个参数表示备库要去连哪个主库,application_name是给备库起个名字,一般使用主机名即可,如果不配置,默认是配置文件中 cluster_name的值。

注意:在pg12版本以前,这个参数是单独放在recovery.conf文件中的,所以从库的postgresql.conf文件中就不需要配置了。pg12以后,把该参数放到了postgresql.conf中了,不再有recovery.conf文件。添加-R 参数备份的文件中有个standby.signal文件,主备切换需要通过standby.signal文件来触发备用模式,所以这个文件必不可少,如果备份时没有添加-R参数,则需要手动在数据目录中创建改文件:
touch /opt/pgdata/data/standby.signal


# 主备库都要配置的参数。
# wal_level=replica (枚举类型) 
    pg10版本中,待选的值为minimal、replica、logical。
	minimal --不能通过基础备份和wal日志恢复数据库。
	replica = 9.6版本以前的archive和hot_standby  --该级别支持wal归档和复制。
	logical --在replica级别的基础上添加了支持逻辑解码所需的信息。
# hot_standby=on   #开启备库才能作为只读库,不开启备库不能进行读
#max_wal_senders = 10		# max number of walsender processes
				# (change requires restart)
#wal_keep_segments = 0		# in logfile segments; 0 disables
#wal_sender_timeout = 60s	# in milliseconds; 0 disables

#max_replication_slots = 10	# max number of replication slots
				# (change requires restart)
#track_commit_timestamp = off	# collect timestamp of transaction commit
				# (change requires restart)


复制参数的总结:
除了主库的synchronous_standby_names参数外,建议其他所有参数主备库保持一致,这样方便主备库切换后不需改动太多参数,然后备份时添加-R参数,使备库的配置文件中自动配置上primary_conninfo参数即可。

4、启动备库
pg_ctl -D /opt/pgdata/data start

5、查看集群状态,在主库查询
select * from pg_stat_replicaiton;

至此,流复制集群搭建完成

参考文档:
官网:postgresql.org

标签:主库,备库,复制,集群,pg,参数,basebackup
From: https://www.cnblogs.com/sunjiwei/p/18520917

相关文章

  • WEB集群- 高可用服务
    1.概述高可用:HAHighAvailablity-->Keepalived生成vip,dns解析到这个ip地址即可选型说明keepalived活着高可用软件,负载使用,一些不涉及数据服务.起初开发出来是给lvsheartbeat心跳高可用软件,涉及数据库,存储数据相关可以用.heartbeat+drbd......
  • Harbor双主复制高可用部署
    环境信息:主机名称IP备注harbor01192.168.61.56harbor1服务器harbor02192.168.61.57harbor2服务器192.168.61.59Nginx代理192.168.61.56/57两个节点分别部署docker-ce,docker-compose,harbor-offline-installer-v2.9.1.tgz部署docker-cedocker-com......
  • centos7-kernel-upgrade-内核升级
    CentOS7升级内核版本yum安装参考1参考2参考3首先查看当前系统的内核版本uname-rs导入ELRepo仓库的公钥信息rpm--importhttps://www.elrepo.org/RPM-GPG-KEY-elrepo.org安装指令#RHEL-7,SL-7orCentOS-7yuminstallhttps://www.elrepo.org/elrepo-release-7.e......
  • MySQL主从复制
    https://blog.51cto.com/u_16175461/119038601.配置主服务器修改配置文件my.cnf[mysqld]server-id=1#设置id,这个可以是任意数字log-bin=/mydata/log/master-bin#启动binlog日志,名字必须是log-binsync_binlog=1......
  • 这款Chrome 插件,帮助我们复制网页上不能复制的内容
    前言最近在上网查找博客时,经常遇到想要复制网页上的内容,但是,一点击复制,就会弹出来各种各样的弹框,导致复制不能继续,非常麻烦。这时,我想到了一个办法,那就是下载安装一个chrome插件,那今天就介绍给大家,让大家上网复制文本时可以任性。如何复制首先,我们需要安装一个插件,SimpleAllow......
  • HDFS 高可用集群的搭建
    HDFS高可用集群的搭建由于条件限制,电脑只够我开3台虚拟机,所以我们就用这3台虚拟机搭建一个HDFS的高可用。在搭建之前我们先来理清一下3台虚拟机master,node1,node2分别会有哪些进程在高可用集群中会有2个NameNode,一个是活跃的(ANN),一个是备用的(SNN),每一个NAmeNode节点上都应该有一......
  • tiup dm集群扩缩容
    扩容dm集群的worker节点操作:增加扩容配置文件vimdm-add-work.yml点击查看代码worker_servers:-host:192.168.9.131进行扩容操作:tiupdmscale-outdm-testdm-add-work.yml-uroot-p![image](https://img2024.cnblogs.com/blog/3549886/202411/3549886-202411041......
  • 基于FPGA的可控分频器设计与应用
    ###标题:基于FPGA的可控分频器设计与应用---####正文:可控分频器在数字电路中扮演着重要角色,尤其是在频率合成和时钟管理方面。基于FPGA的实现不仅灵活且易于修改,本文将详细介绍如何设计和实现一个可控分频器,并展示其应用实例。---###一、可控分频器的基本概念可控分频......
  • FPGA在图像伽玛校正中的应用
    随着数字图像处理技术的不断发展,图像质量优化成为了一个重要的研究方向。在图像处理中,伽玛(Gamma)校正是一种广泛应用的技术,用于调整图像的亮度和对比度,以改善图像质量,使之更符合人眼的视觉感知。特别是在FPGA(现场可编程门阵列)平台上实现伽玛校正,由于其高并行性和灵活性,成为了图像处......
  • FPGA中的图像平移技术
    在图像处理领域,图像平移是一种基本的几何变换操作,它能够将图像中的所有像素在二维平面上按照指定的方向和距离进行移动。这种操作不改变图像的形状或大小,但会显著影响图像在坐标系中的位置。随着FPGA(现场可编程门阵列)技术的快速发展,将图像平移算法部署到FPGA上已成为提高图像处理......