文档说明

本文档用于介绍使用docker来部署postgresql(主从)

环境

软件 版本信息
docker Docker version 20.10.1, build 831ebea
postgresql postgres:12.5

部署步骤

1、docker拉postgresql镜像。
docker pull postgres:12.5
2、编辑配置文件docker-compose.yml如下。

version: ``'3'
services:
``database:
``image: ``'postgres:12.5'
``container_name: ``'postgres-dev-slave'
``restart: always
``privileged: ``true
``environment:
``POSTGRES_USER: ``'postgres'
``POSTGRES_PASSWORD: ``'fdafadfafa'
``POSTGRES_DB: ``'postgres'
``PGDATA: ``'/var/lib/postgresql/data/pgdata'
``ports:
``- ``'5501:5432'
``volumes:
``- /data/postgresql/pg_data/data2:/var/lib/postgresql/data/pgdata

3、启动postgresql。
在配置文件目录下,执行docker-compose up -d
4、配置master主库
编辑配置文件pg_hba.conf,添加如下配置

// replication_username: 复制账号; slave_ip: 从库所在的服务器ip
``host replication <replication_username> <slave_ip>/``32 md5

5、进入master容器,创建复制账号并验证

# ``1``.进入容器
``docker exec -it pgsmaster bash
# ``2``.连接PostgreSQL
``psql -U postgres
# ``3``.创建用户
``set synchronous_commit =off;
``// replication_username: 对应上面设置的复制账号; replication_username_password: 认证密码
``create role <replication_username> login replication encrypted password ``'<replication_username_password>'``;
# ``4``.验证用户
``\du

6、配置slave从库

# ``1``.拷贝主库的data文件到从库
使用cp、ssh方式均可
# ``2``.修改从库配置文件postgresql.conf文件,添加以下配置
// replication_username: 复制账号(同主库); master_ip: 主库所在的服务器ip; master_port: 主库端口; replication_username_password: 认证密码
``primary_conninfo = ``'host=<master_ip> port=<master_port> user=<replication_username> password=<replication_username_password>'
# ``3``.在与postgresql.conf同级的目录下,新增空文件standby.signal
# ``4``.启动从库

7、测试
在主库建表,发现在从库会自动同步该表。
从库无法进行写操作。

演练主库故障

1、将主库关闭
docker stop postgres-dev-master
2、进入从库
docker exec -it postgres-dev-slave /bin/bash
3、进入postgres
psql -U postgres
4、执行
select pg_promote(true,60);

以下步骤就将从库提升为主库,如果需要添加其他从库,需要按照上面的配置进行配置即可。