容器运行polardb-pg配置主从
//
# 容器运行polardb-pg配置主从
环境:
操作系统:ubuntu:22.04
docker: 28.4.0
polardb镜像: polardb/polardb_pg_local_instance:11
网段:192.168.5.0/24,主:192.168.5.118
# 主服务器配置
# docker-compose.yaml
cat >docker-compose.yaml<<'EOF'
version: '3'
services:
polardb-11:
restart: always
container_name: polardb-11
#image: polardb/polardb_pg_local_instance:11
image: docker.1ms.run/polardb/polardb_pg_local_instance:11
volumes:
- ./polardb:/var/polardb
- /etc/localtime:/etc/localtime
ports:
- "5432:5432"
environment:
- TZ=Asiz/Shanghai
privileged: true
cap_add:
- SYS_PTRACE
network_mode: bridge
entrypoint: ["./docker-entrypoint.sh","postgres"]
EOF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- 启动
docker-compose -f docker-compose.yaml up -d
- 主库创建复制槽
poladb-11]# docker exec -it polardb-11 bash
postgres@2636328ce7b3:~$ psql -U postgres
postgres=# SELECT pg_create_physical_replication_slot('replica1_slot', true);
postgres=# SELECT pid,usename,application_name,state,sync_state FROM pg_stat_replication;
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 查看复制流
SELECT pid,usename,application_name,state,sync_state FROM pg_stat_replication;
- 修改配置
类似和postgresql,配置主从同步
[root@location-197 poladb-11]# tail -2 ./polardb/primary_datadir/pg_hba.conf
host replication all 192.168.5.0/24 trust
1
2
2
- 重启服务
docker restart poladb-11
# 从服务器配置
- 数据目录
mkdir -p /data/polardb-11
cd /data/polardb-11
1
2
2
# 基于现有的docker镜像,构建一个初始环境的镜像
cat >Dockerfile<<'EOF'
FROM docker.1ms.run/polardb/polardb_pg_local_instance:11
ENTRYPOINT ["/bin/bash"]
EOF
#修改默认启动方式
docker build . -t docker.1ms.run/polardb/polardb_pg_local_instance:11-2
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 启动一个初始的
cd /data/polardb-11
mkdir -p `pwd`/polardb/replica
chmod 750 `pwd`/polardb/replica
chown -R 1000:999 `pwd`/polardb
#启动一个初始的
docker run -d --name polar11_replica1 -v `pwd`/polardb:/var/polardb -p 5433:5432 -e POSTGRES_PASSWORD=Yfklife#csdm8888 polardb/polardb_pg_local_instance:11-2 -c "tail -F test"
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 开始复制
docker exec -it polar11_replica1 bash
export POSTGRES_PASSWORD=Dimine#csdm8888
pg_basebackup -h 192.168.5.118 -U postgres -Fp -Xs -P -R -D /var/polardb/replica -v
#退出初始容器,在宿主机执行
exit
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 创建软链接,启动需要
docker exec -it polar11_replica1 ln -s /var/polardb/replica/polar_shared_data /var/polardb/shared_datadir
# 进入容器,启动-检查服务是否正常
docker exec -it polar11_replica1 bash
pg_ctl -D /var/polardb/replica start
#等待大概一两分钟,登录,测试在主库创建库,是否同步
psql -U postgres
1
2
3
4
5
2
3
4
5
# 改成docker-compose启动
cat >docker-compose.yaml<<'EOF'
version: '3'
services:
polardb-11:
restart: always
container_name: polardb-11
image: docker.1ms.run/polardb/polardb_pg_local_instance:11-2
volumes:
- ./polardb:/var/polardb
- /etc/localtime:/etc/localtime
ports:
- "5432:5432"
environment:
- TZ=Asiz/Shanghai
privileged: true
cap_add:
- SYS_PTRACE
entrypoint: ["postgres","-D","/var/polardb/replica"]
network_mode: bridge
EOF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- 启动数据库
docker rm -f polar11_replica1
docker-compose -f docker-compose.yaml up -d
1
2
2
再次检查服务是否正常
连上主库查询流
SELECT pid,usename,application_name,state,sync_state FROM pg_stat_replication;
# 从库切换为主库
docker exec -it poladb-11 pg_ctl -D /var/polardb/replica promote
1
# 遇到的问题
环境:
centos7.9
docker version: 19.03
启动报错信息:怀疑是docker版本原因,或者centos系统,换回ubuntu22.04 正常启动
postgres@f6a56b85d5b0:/var/polardb/replica$ pg_ctl -D /var/polardb/replica/ start
popen failure: Cannot allocate memory
The program "postgres" is needed by pg_ctl but was not found in the
same directory as "/home/postgres/tmp_basedir_polardb_pg_1100_bld/bin/pg_ctl".
Check your installation.
postgres@f6a56b85d5b0:/var/polardb/replica$ ldd /home/postgres/tmp_basedir_polardb_pg_1100_bld/bin/postgres
ldd: error: you do not have read permission for `/home/postgres/tmp_basedir_polardb_pg_1100_bld/bin/postgres'
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
//
如果此文章对您有帮助,点击 -->> 请博主喝咖啡 (opens new window)