docker版postgresql数据库主从配置

dockerpostgresql主从配置

参考:postgresql16配置主从

注意项:当前操作主路径:~/dockerEnv【示例路径】

操作目录结构如下:
- dockerEnv
-- dbInit
--- a_create_user.sql
-- pg_data
--- ......
--- ......
  1. 创建sql文件,文件路径dockerEnv/dbInit/a_create_user.sql
-- 主从同步账号
CREATE ROLE replicator REPLICATION LOGIN PASSWORD 'abc';

-- 添加用户
create user swmg with password 'abc';

-- 创建数据库
create database sis_server;

-- 将数据库的管理权授予用户
grant all privileges on database sis_server to swmg;

1.0、主从数据库的容器yml文件

注意: 如果在同一个宿主机操作,注意多个yml文件的端口映射,不要冲突!

  • 挂载宿主机sql文件夹到容器的docker-entrypoint-initdb.d路径下,容器启动时,会按照文件夹内的sql文件命名顺序自动执行sql文件。
  1. 主数据库docker-compose.yml文件

    version: '3'
    services:
      dbServer:
        image: "postgres:12.5"
        restart: always
        container_name: pg_server_master
        environment:
          POSTGRES_DB: sis_server
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: swissmic
          PGDATA: /var/lib/postgresql/data
          TZ: 'Asia/Shanghai'
        volumes:
          - ./data:/var/lib/postgresql/data:rw
          - ../dbInit:/docker-entrypoint-initdb.d/:rw
        ports:
          - "10000:5432"
        command: ["docker-entrypoint.sh", "postgres"]
    
  2. 从数据库docker-compose.yml文件

    从数据库,仅比主数据库多了一个中转文件夹backup_data的挂载,主要是为了方便从主数据库备份数据库文件后,迁移使用。

    version: '3'
    services:
      dbServer:
        image: "postgres:12.5"
        restart: always
        container_name: pg_server_slave
        environment:
          POSTGRES_DB: sis_server
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: swissmic
          PGDATA: /var/lib/postgresql/data
          TZ: 'Asia/Shanghai'
        volumes:
          - ./data:/var/lib/postgresql/data:rw
          - ./data-transfer:/var/lib/postgresql/backup_data:rw
          - ../dbInit:/docker-entrypoint-initdb.d/:rw
        ports:
          - "10000:5432"
        command: ["docker-entrypoint.sh", "postgres"]
    

1.1、主数据库

  1. 修改pg_hba.conf文件,追加如下内容:

    # 允许replicator账号进行连接
    host    replication     replicator      0.0.0.0/0       md5
    
  2. 修改postgresql.conf文件,追加如下内容:

    hot_standby = on        # 打开热备
    wal_level = replica     # 设置 WAL 日志级别为 replica
    max_wal_senders = 3     # 允许的 WAL 发送者数量,根据需要进行调整
    archive_mode = on       # 启用归档模式。PostgreSQL 会将 WAL 日志归档到指定的归档目录中。
    
    # 归档模式,指定wal日志归档路径(手动创建archive路径)
    archive_command = 'cp "%p" /var/lib/postgresql/data/archive/%f'
    
  3. 手动创建archive归档路径,并重启容器

1.2、从数据库

  1. 进入容器的/var/lib/postgresql/backup_data路径下,执行以下命令,拉取主数据库信息。(子数据库启动时,yml多挂在了一个中转数据的文件夹)
    • 备份主数据库数据,会要求使用空文件夹,所以挂载了一个backup_data路径,备份数据后,方便在宿主机直接操作替换
    • 备份的主数据文件中,多了一个standby.signal文件,此文件保留不动,不用增加内容
    • 同时,postgresql.auto.conf内会自动生成主服务器的连接地址,此文件不需要改动
# 这个命令,会从主数据库拉取备份,从数据库使用拉取的数据,实现主从同步
pg_basebackup -h 192.168.2.59 -p 40001 -U replicator -D . -Fp -Xs -Pv -R --checkpoint=fast
  1. 执行完后,关闭从数据库容器。

  2. 在宿主机中,将data-transfer文件夹替换掉pg_data文件夹(删掉pg_data,将data-transfer改名为pg_data),然后重启子数据库容器(让子数据库使用主数据库拉取的数据库文件,重启子数据库,会自动进行主从同步)。

故障恢复

主数据库故障

当主数据库故障时,删除子数据库的standby.signal文件,重启子数据库容器,则从数据库将恢复成生产模式,系统再修改数据库连接,指向子数据库的ip端口即可。

  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要使用Docker Compose安装主从PostgreSQL,您可以按照以下步骤进行操作: 1. 首先,创建一个空目录,您可以使用以下命令在终端中执行: ``` mkdir PostgreSQL cd PostgreSQL/ ``` 2. 接下来,创建一个`docker-compose.yml`文件。您可以使用以下命令从GitHub上获取一个现成的`docker-compose.yml`文件: ``` wget https://raw.githubusercontent.com/colovu/docker-postgres/master/docker-compose.yml ``` 3. 在`docker-compose.yml`文件中,您可以定义主从PostgreSQL容器的配置。确保您对该文件进行了适当的配置以满足您的需求。 4. 一旦您完成了配置,您可以使用以下命令在Docker中启动主从PostgreSQL容器: ``` docker-compose up -d ``` 5. 当容器启动后,您可以使用以下命令来查看正在运行的容器: ``` docker ps ``` 这样,您就成功地使用Docker Compose安装了主从PostgreSQL。请根据您的具体需求对`docker-compose.yml`文件进行适当的配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【docker-compose】一键安装PostgreSQL数据库](https://blog.csdn.net/qq_45392321/article/details/124373825)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [fzwcjl#docker-#请求IP地址1](https://download.csdn.net/download/weixin_35809747/86256514)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值