Insun Lee

命由己造,相由心生,世间万物皆是化相,心不动,万物皆不动,心不变,万物皆不变
Email insunsgmail.com
Country China
LocationHangZhou, ZheJiang

postgresql 13主从流复制配置


一. 概要

原先有个项目用的是mongodb数据库,这东西太费资源,如果数量不是特别大还是不太建议用。

目前已迁移至postgresql。数据从mongodb导入到postgresql后,想着还是要再上线一个从库比较安全,因此折腾了一番。

这次折腾的主要原因是,线上找的资料版本不一致造成的。实际上pgsql1.3点主副配置很简单。下面分步介绍。

二. 配置步骤

主库配置

1、 新增用于同步的用户repl(名称可以自行修改)

create role repl login replication encrypted password 'you password';

2、 主库修改pg_hba.conf文件,允许备库IP通过复制用户访问数据库vi pg_hba.conf,在尾部添加:

host    replication     repl         0.0.0.0/0        md5

最后一行,添加了repl用户可以从备库IP 局域网ip访问主库。这个地方折腾的比较久,刚开始用的是192.168.1.1/32类似的局域网ip始终访问不了,后来索性改成0.0.0.0/0就可以了。
如果没有防火墙设置,那么配置上面规则后,从任何地方都可以访问主库。因此主库这里需要特别注意防火墙设置,别把5432端口给放开了(除非本身就有这个需求)。
如果是云服务器,则防火墙的公网规则不要放开5432。自己托管的机器可以添加下防火墙规则:

sudo iptables -A INPUT -t tcp -m tcp -s 192.168.1.1/24 --dport 21 -j ACCEPT
sudo service iptables save
192.168.1.1/24 改成自己局域网的ip

3、 设置完重启主库

从库设置

1、 在从库上对主库做基础备份

pg_basebackup -h 192.168.1.100 -p 5432 -U repl --password -X stream -Fp --progress -D /var/lib/postgresql/data -R
注意,备份完从库的数据库目录下应该有 standby.signal这个文件,并且这个文件postgresql.auto.conf会自动生成流复制的相关配置,类似于primary_conninfo = 'user=repl password=xxx channel_binding=disable host=192.168.1.100 port=5432 sslmode=disable sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=postgres target_session_attrs=any'

当然了,如果我们没有使用-R来备份主库的话。我们完全可以在备库上手工创建standby.signal文件,然后手工编辑postgresql.auto.conf,并在其内容中配置主库的信息。

2、启动从库pg_ctl start

本文配置参考: https://www.modb.pro/db/468978

docker中pgsql主从配置

docker中安装postgresql与直接安装配置无异,注意一下几点:
1、数据库目录要从docker中映射到主机目录,否则docker更新后容易造成数据丢失;
2、network_mode 建议采用 host,这样局域网之间的网络更容易配置;
3、从库可以采用下列命令先从主库复制基础信息:

docker run -it --rm 
    --network host 
    -v /data/pgsql:/var/lib/postgresql/data 
    postgres:13-alpine 
    pg_basebackup -h 192.168.1.100 -p 5432 -U repl --password -X stream -Fp --progress -D /var/lib/postgresql/data -R
注意修改命令中的数据目录、局域网ip、端口、用户名等为自己的
  • 分享:
评论

    • 博主

    说点什么