努力挣扎的生活 努力挣扎的生活
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 运维基础
  • 监控
  • 日志系统
  • 安全记录
  • 分布式存储
  • gitlab安装
  • jenkins安装和管理
  • Jenkins工具集成
  • pipeline流水线
  • Docker
  • Kubernetes
  • Nexus
  • Rancher
  • Prometheus
  • 日志服务ELK(EFK)
  • 虚拟化
  • istio
  • 日志服务Graylog
  • Mysql
  • PostgreSQL
  • Redis
  • MongoDB
  • clickhouse
  • openguassdb
  • polardb
关于
  • 分类
  • 标签
  • 归档
  • 收藏
  • 更多
GitHub (opens new window)

yangfk

瑟瑟发抖的小运维
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 运维基础
  • 监控
  • 日志系统
  • 安全记录
  • 分布式存储
  • gitlab安装
  • jenkins安装和管理
  • Jenkins工具集成
  • pipeline流水线
  • Docker
  • Kubernetes
  • Nexus
  • Rancher
  • Prometheus
  • 日志服务ELK(EFK)
  • 虚拟化
  • istio
  • 日志服务Graylog
  • Mysql
  • PostgreSQL
  • Redis
  • MongoDB
  • clickhouse
  • openguassdb
  • polardb
关于
  • 分类
  • 标签
  • 归档
  • 收藏
  • 更多
GitHub (opens new window)
  • Mysql

  • PostgreSQL

  • Redis

  • MongoDB

  • ClickHouse

  • SqlServer

  • openGuassDB

  • Polardb

    • 容器运行polardb-pg
    • 容器运行polardb-pg配置主从
      • 容器运行polardb-pg配置主从
        • 主服务器配置
        • docker-compose.yaml
        • 从服务器配置
        • 基于现有的docker镜像,构建一个初始环境的镜像
        • 启动一个初始的
        • 开始复制
        • 创建软链接,启动需要
        • 进入容器,启动-检查服务是否正常
        • 改成docker-compose启动
        • 从库切换为主库
        • 遇到的问题
//
  • DBA
  • Polardb
yangfk
2025-11-27

容器运行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
  • 启动

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
  • 查看复制流

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
  • 重启服务

docker restart poladb-11

# 从服务器配置

  • 数据目录
mkdir -p /data/polardb-11
cd /data/polardb-11
1
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

# 启动一个初始的

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
# 开始复制
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
# 创建软链接,启动需要

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

# 改成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
  • 启动数据库
docker rm -f polar11_replica1
docker-compose -f docker-compose.yaml up -d
1
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
//
如果此文章对您有帮助,点击 -->> 请博主喝咖啡 (opens new window)
容器运行polardb-pg

← 容器运行polardb-pg

最近更新
01
Graylog服务收集k8s容器日志
11-13
02
Nexus3数据异常修复
11-13
03
容器运行polardb-pg
09-23
更多文章>
Theme by Vdoing | Copyright © 2019-2025 yangfk | 湘ICP备2021014415号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×
//