各位新朋友~记得先点蓝字关注我哦~
接着上期,我们提到流复制环境的重要性,那么本期我们就来介绍一下如何搭建一个流复制环境,我们使用PG自带的pg_basebackup工具来搭建。
pg_basebackup是从postgresql 9.1版本开始提供的一个方便基础备份的工具,它会把整个数据库实例的数据都拷贝出来,而不只是把实例中的部分(如某个数据库或表)单独备份。
pg_basebackup原理
pg_basebackup通过流复制协议与数据库建立连接,WAL Sender进程向pg_basebackup发送数据库物理文件;pg_basebackup接收到文件后写入目标位置(压缩或不压缩)。
搭建流复制环境
那我们利用这个工具来搭建我们的流复制环境。
对主库进行如下参数的设置,编辑postgresql.conf文件
listen_addresses = '*'wal_level = 'replica'wal_keep_segments= 256max_wal_senders = 32hot_standby_feedback = on
★
注意
★
在修改参数文件的时候我们需要优先检查一下listen_address参数是否允许连接,在新环境创建的时候很容易忽视掉这个问题。
wal_level参数的设置需要replica或者更高的级别,它决定了多少信息会记录到wal日志中,max_wal_senders用来指定发送wal的最大并发量,wal_keep_segments限制了为备库保留的过去最少个数,如果设置的太小,wal日志切换会变得频繁,可能会导致wal还没被传送到备端就被清理了,在PG13中此参数已经改为了wal_keep_size,其含义就是为备库保存最少wal日志的总量大小。hot_standby_feedback置为on,如果有错误的数据复制,它就能够向主库进行反馈。
创建一个流复制用户,并赋予复制权限
postgres=# create user repl replication password '123456';CREATE ROLE
接下来配置pg_hba.conf白名单文件,使得备库的连接能够允许连接到我们的主库
host all all 192.168.242.39/32 md5host replication repl 192.168.242.39/32 md5
重启一下主库实例,使得以上配置生效
使用pg_basebackup工具搭建备库环境,我们创建好备库的数据目录,注意该目录的属组和权限,常常有人因为这个原因导致报错,使用下面这个命令复制出一个完整的数据库来作为备库使用。
$ pg_basebackup -h 192.168.242.38 -U repl -D PG/pg12.5.bak/data/ -X stream -P -R
其中"-R"参数能够帮你自动完成备库连接主库的参数设置,如果没有指定该参数,我们需要配置以下参数,为了能够在主备切换的时候正常工作,建议为主库也增加这个参数
primary_conninfo = 'host=192.168.242.38 port=5432 user=repl password=123456'
最后在备库的数据目录下创建一个备库标识文件
$ touch standby.signal
启动备库服务,流复制就搭建完成了
我们可以在主库环境上通过查看pg_stat_replication视图来查看流复制状态

在这个视图中我们可以看到一个字段sync_state,显示的是async即异步复制流模式,当然地,PG也支持同步流复制模式。
那如何搭建使用同步流模式,并且同步流模式对数据库性能影响有多少,我们将会在下一期告诉大家!敬请关注!
美创运维中心数据库服务团队拥有Oracle ACE 1人、OCM 10余人、数十名Oracle OCP、MySQL OCP、红帽RHCA、中间件weblogic、tuxedo认证、达梦工程师 ,著有《Oracle DBA实战攻略》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》等多本数据运维优化书籍。目前运维各类数据库合计2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。







