如果为了模拟多实例PG环境,有不想开多个虚拟机,也不想在单机多端口运行的话,docker是一个不错的选择。
这里简单介绍下自定义的pg docker容器的制作和使用用法。
1 制作Dockerfile
代码语言:shell复制mkdir /root/pg_docker/
cd /root/pg_docker/
vim Dockerfile 内容如下
FROM centos:7
RUN yum install -y epel-release maven wget iproute telnet vim
&& yum clean all
&& yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
&& yum install -y postgresql15-server postgresql15-contrib
2 打包
代码语言:shell复制$ docker build .
$ docker images | head -3
$ docker tag pg15_sb 52037b76ba71 (这里的值,是根据上面docker images看到的none的镜像的id)
3 宿主机上创建持久化目录
代码语言:shell复制cd /usr/local/software/
mkdir pg15_lab
cd pg15_lab
mkdir primary_data standby1_data
chmod 700 primary_data standby1_data
4 创建容器网络
代码语言:shell复制docker network create --subnet=192.168.100.0/24 pg_network
5 启动pg主节点
代码语言:shell复制docker run -d -it --cap-add=SYS_PTRACE --cap-add SYS_ADMIN --privileged=true --name primary --net pg_network --ip 192.168.100.2 -v ./primary_data:/var/lib/pgsql/15/data pg15_sb:latest
注意: 我这里没有把端口暴露出来,如果需要暴露端口,使用-p参数即可
6 登录进pg主节点进行初始化操作
代码语言:shell复制docker exec -ti primary bash
cd /var/lib/pgsql/15/
chown postgres.postgres data/ -R
chmod 700 data/
su - postgres -c "/usr/pgsql-15/bin/initdb -D /var/lib/pgsql/15/data/"
然后,改下认证策略(可选),加个复制用的账号
(我这里测试用,直接用dts给了super权限,日常各种操作都用这个账号进行)
postgres=# alter system set password_encryption='md5';
postgres=# select pg_reload_conf();
postgres=# create user dts with password 'dts';
postgres=# alter user dts superuser;
postgres=# alter user dts replication;
改下pg_hba.conf 加一行
host replication dts 192.168.100.0/24 md5
然后,重载下pg
postgres=# select pg_reload_conf();
7 启动备库容器
代码语言:shell复制docker run -d -it --cap-add=SYS_PTRACE --cap-add SYS_ADMIN --privileged=true --name standby1 --net pg_network --ip 192.168.100.3 -v ./standby1_data:/var/lib/pgsql/15/data pg15_sb:latest
8 在备库上配置与主库的同步
代码语言:shell复制docker exec -ti standby1 bash
cd /var/lib/pgsql/15/
chown postgres.postgres data/ -R
chmod 700 data/
su - postgres
cd /var/lib/pgsql/15/data/
pg_basebackup -h192.168.100.2 --write-recovery-conf --checkpoint=fast --progress --port=5432 --username=dts --password --format=p -D ./
9 启动备库进程
代码语言:shell复制/usr/pgsql-15/bin/initdb -D /var/lib/pgsql/15/data/