Docker部署PostgreSQL主从
阅读原文时间:2023年07月08日阅读:1

#准备

PostgreSQL12.3版本容器两台,部署参考https://www.cnblogs.com/zspwf/p/16113298.html

主库: 192.168.3.14:2200

从库: 192.168.3.14:2201

#主库

1.新建用于复制的用户

CREATE ROLE replicate WITH LOGIN PASSWORD 'xyz!345' REPLICATION ;

2.往主库的pg_hba.conf文件追加以下内容,其中192.168.3.14为从库IP,/data/nismes/bd-test/为映射容器目录,未映射请进入容器执行

METHOD参数解析

md5是常用的密码认证方式,如果你不使用ident,最好使用md5。密码是以md5形式传送给数据库,较安全,且不需建立同名的操作系统用户。

password是以明文密码传送给数据库,建议不要在生产环境中使用。

trust是只要知道数据库用户名就不需要密码或ident就能登录,建议不要在生产环境中使用。

reject是拒绝认证。

#映射执行
echo "host replication replicate 192.168.3.14/32 trust" >> /data/nismes/bd-test/pg_hba.conf
#未映射执行
docker exec -it 容器id /bin/bash
echo "host replication replicate 192.168.3.14/32 trust" >> /var/lib/postgresql/data/pg_hba.conf

3.主库开启归档模式

方式1

ALTER SYSTEM SET archive_command = ON ;
ALTER SYSTEM SET archive_command ='cp -i %p /home/%f </dev/null';

方式二:打开postgresql.conf文件,修改参数

4.主库配置完成,重启数据库

#从库

1.进入容器 ,执行命令

//将文件备份至Home目录
pg_basebackup -h 192.168.3.14 -p 2200 -U replicate -w -Fp -Xs -Pv -R -D /home
//覆盖数据目录
cp -R /home/* /var/lib/postgresql/data/
//清空home目录
rm -rf /home/*

2.设置备用服务器连接字符串

primary_conninfo

指定备用服务器用来连接发送服务器的连接字符串。这个字符串的格式在libpq-connstring中描述。 如果在这个字符串中有任何选项未被指定,那么将检查相应的环境变量(见libpq-envars)。 如果环境变量也没有被设置,则使用默认值。

连接字符串应当指定发送服务器的主机名(或地址),以及端口号(如果它和备用服务器的默认端口不同)。 还要指定对应于发送服务器上合适权限角色的用户名(见streaming-replication-authentication)。 如果发送服务器要求口令认证,还需要提供一个口令。它可以在primary_conninfo字符串中提供,或者在后备服务器(使用replication作为数据库名)的一个单独~/.pgpass文件中提供。 不要在primary_conninfo字符串中指定一个数据库名。

这个参数只能在服务器启动时被设置。如果服务器没有处于备用模式,则此设置无效。

ALTER SYSTEM SET primary_conninfo = 'user=replicate passfile=''/root/.pgpass'' host=192.168.3.14 port=2200 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any';

ALTER SYSTEM SET max_connections ='300';

3.重启从库

#测试

主库查看复制

select * from pg_stat_replication;

主库创建数据库测试

CREATE TABLE test2(fc1 varchar(50),fc2 int);

主库插入测试

INSERT INTO test2 SELECT '测试1',1

从库查看

SELECT * FROM test2

从库删除测试

DROP TABLE test2