使用docker-compose搭建达梦数据库主备集群

目录

1. Docker集群的搭建

2. 检查主备数据库

3. 主备集群的JDBC连接设置


1. Docker集群的搭建

达梦的镜像文件都是tar文件,通过docker load命令导入:

docker load -i dm8_20240422_x86_rh6_64_rq_ent_8.1.3.140.tar

成功导入后,可看到镜像的仓库名和标签:

docker images
REPOSITORY   TAG                                 IMAGE ID       CREATED       SIZE
dm8          dm8_20240422_rev222308_x86_rh6_64   c6c32f5a271c   6 weeks ago   1.25GB

选择一个目录创建我们的docker-compose.yml文件:

networks:
  dmnet:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/24
services:
  dm_monitor:
    container_name: dm_monitor
    image: dm8:dm8_20240422_rev222308_x86_rh6_64
    networks:
      dmnet:
        ipv4_address: 172.20.0.2
    restart: always
    volumes:
      - ./data/monitor:/opt/dmdbms/data
    environment:
      - MODE=docker_dmwatcher
      - PAGE_SIZE=16
      - CASE_SENSITIVE=1
      - UNICODE_FLAG=1
      - LENGTH_IN_CHAR=1
      - SYSDBA_PWD=SYSDBA001
      - DMWATCHER_ROLE=monitor
      - CLUSTER_IPS="172.20.0.2,172.20.0.3,172.20.0.4"
      - LD_LIBRARY_PATH=/opt/dmdbms/bin
  dm_primary:
    container_name: dm_primary
    image: dm8:dm8_20240422_rev222308_x86_rh6_64
    networks:
      dmnet:
        ipv4_address: 172.20.0.3
    ports:
      - '30136:5236'
    restart: always
    volumes:
      - ./data/primary:/opt/dmdbms/data
    environment:
      - MODE=docker_dmwatcher
      - PAGE_SIZE=16
      - CASE_SENSITIVE=1
      - UNICODE_FLAG=1
      - LENGTH_IN_CHAR=1
      - SYSDBA_PWD=SYSDBA001
      - DMWATCHER_ROLE=primary
      - DW_NO=1
      - CLUSTER_IPS="172.20.0.2,172.20.0.3,172.20.0.4"
      - LD_LIBRARY_PATH=/opt/dmdbms/bin
    depends_on:
      - dm_monitor
  dm_standby:
    container_name: dm_standby
    image: dm8:dm8_20240422_rev222308_x86_rh6_64
    networks:
      dmnet:
        ipv4_address: 172.20.0.4
    ports:
      - '30236:5236'
    restart: always
    volumes:
      - ./data/standby:/opt/dmdbms/data
    environment:
      - MODE=docker_dmwatcher
      - PAGE_SIZE=16
      - CASE_SENSITIVE=1
      - UNICODE_FLAG=1
      - LENGTH_IN_CHAR=1
      - SYSDBA_PWD=SYSDBA001
      - DMWATCHER_ROLE=standby
      - DW_NO=2
      - CLUSTER_IPS="172.20.0.2,172.20.0.3,172.20.0.4"
      - LD_LIBRARY_PATH=/opt/dmdbms/bin
    depends_on:
      - dm_primary

就在这个docker-compose.yml文件的目录下,执行docker-compose载入配置:

docker-compose up -d --wait

载入完成后可以查看运行着的3个容器:

docker ps --format "table {{.Image}}\t{{.Ports}}\t{{.Names}}"
IMAGE                                   PORTS                                           NAMES
dm8:dm8_20240422_rev222308_x86_rh6_64   52141/tcp, 61141/tcp, 0.0.0.0:30236->5236/tcp   dm_standby
dm8:dm8_20240422_rev222308_x86_rh6_64   52141/tcp, 61141/tcp, 0.0.0.0:30136->5236/tcp   dm_primary
dm8:dm8_20240422_rev222308_x86_rh6_64   5236/tcp, 52141/tcp, 61141/tcp                  dm_monitor

可以检查日志来确认3个容器都初始化完成:

docker logs dm_primary | more
docker logs dm_standby | more
docker logs dm_monitor | more

有可能standby或monitor节点没有能正常启动,这时就需要手动将primary节点的数据库tar文件和备份tar文件手动复制到没有能复制的standby或monitor节点的数据目录。然后再重启相应的standby或monitor容器。

cp data/primary/*.tar data/standby
docker restart dm_standby

cp data/primary/*.tar data/monitor
docker restart dm_monitor

也可以直接检查这些tar文件:

ls -l1 data/*/*.tar
data/monitor/BACKUP_FILE_01.tar
data/monitor/DAMENG.tar
data/primary/BACKUP_FILE_01.tar
data/primary/DAMENG.tar
data/standby/BACKUP_FILE_01.tar
data/standby/DAMENG.tar

2. 检查主备数据库

我们开两个Console窗口:一个窗口先进入容器dm_monitor,然后尝试连接各自主数据库和备用数据库;另一个窗口用来停止和启动主数据库和备用数据库的运行容器,从而模仿实际情况下数据库的宕机和重启。

docker exec -it dm_monitor bash

这样就以root用户登陆到了dm_monitor的命令行窗口。然后尝试连接dm_primary节点的主数据库,既可以用容器名dm_primary,也可以用docker-compose.yml文件中定义的IP地址172.20.0.3:

/opt/dmdbms/bin/disql SYSDBA/SYSDBA001@dm_primary:5236

## OR

/opt/dmdbms/bin/disql SYSDBA/SYSDBA001@172.20.0.3:5236

这时就会显示进入了集群数据库主节点的SQL模式:

Server[dm_primary:5236]:mode is primary, state is open
login used time : 41.247(ms)
disql V8
SQL>

## OR

Server[172.20.0.3:5236]:mode is primary, state is open
login used time : 11.328(ms)
disql V8
SQL>

quit退出后,又尝试备用节点dm_standby,或IP 172.20.0.4:

/opt/dmdbms/bin/disql SYSDBA/SYSDBA001@dm_standby:5236

## OR

/opt/dmdbms/bin/disql SYSDBA/SYSDBA001@172.20.0.4:5236

显示进入了集群数据库备用节点的SQL模式:

Server[dm_standby:5236]:mode is standby, state is open
login used time : 33.271(ms)
disql V8

## OR

Server[172.20.0.4:5236]:mode is standby, state is open
login used time : 11.359(ms)
disql V8

另外,可以通过跟踪dm_monitor节点的日志来判定主备服务器的状态及变化情况:

docker logs dm_monitor -f
......
[monitor]         2024-06-10 17:08:32: <MON CHECK GRP453331_DW1>
[monitor]         2024-06-10 17:08:32: Dmwatcher process GRP453331_DW1 status switching [STARTUP-->OPEN]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2024-06-10 17:08:32  OPEN           OK        GRP453331_DW1    OPEN        PRIMARY   VALID    4        43564           43564

[monitor]         2024-06-10 17:08:32: </MON CHECK GRP453331_DW1>

[monitor]         2024-06-10 17:08:32: <MON CHECK GRP453331_DW2>
[monitor]         2024-06-10 17:08:32: Dmwatcher process GRP453331_DW2 status switching [STARTUP-->OPEN]
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN
                  2024-06-10 17:08:32  OPEN           OK        GRP453331_DW2    OPEN        STANDBY   VALID    4        43564           43564

[monitor]         2024-06-10 17:08:32: </MON CHECK GRP453331_DW2>
......

请注意“INAME”和“IMODE”这两列,分别是数据库实体的名字和实体的主备模式。这里看到实体GRP453331_DW1的模式为PRIMARY,而实体GRP453331_DW2的模式为STANDBY。

3. 主备集群的JDBC连接设置

达梦的服务网站可以下载JDBC驱动程序:产品下载 | 达梦数据库,而在其技术文档中有基本的JDBC连接配置说明:JDBC 接口 | 达梦技术文档

jdbc:dm[://host][:port][?propName1=propValue1][&propName2=propValue2]...

然而,主备集群的JDBC连接url有所不同:

jdbc:dm://dmconn?dmconn=(host1:port1,host2:port2,host3:port3)

我在DBeaver中分别配置了单服务器和主备服务集群的驱动模版,然后用它们又配置了主数据库和备用数据库各自的连接,以及涵盖主备数据库的集群的连接。

单数据库服务器的驱动模版:

以及主数据库和备用数据库各自的连接:

而集群的驱动模版设置如下:

由此设置的数据库集群连接为:

### 使用 `docker-compose` 部署达梦数据库 要通过 `docker-compose` 文件配置并启动达梦数据库服务,需按照以下方法操作: #### 1. 创建存储目录 在服务器中创建一个用于存储达梦数据库数据的目录。例如,在 `/data/dm` 路径下创建该目录[^4]。 ```bash mkdir -p /data/dm ``` 此路径将被挂载至容器内部作为数据库的数据存储位置。 --- #### 2. 准备 Docker Compose 文件 在一个指定的工作目录下(如 `/data/dm`),创建名为 `docker-compose.yaml` 的文件,并编辑其内容以适配达梦数据库的需求。以下是典型的 `docker-compose.yaml` 配置示例[^1]: ```yaml version: '3' services: dm_db: image: dameng8:latest container_name: dm_database_container ports: - "5236:5236" environment: - DM_DB_NAME=damengdb - DM_USER=SYSDBA - DM_PASSWORD=sysdba_password volumes: - ./dm_data:/dm/data restart: always ``` 上述配置说明: - **image**: 指定使用达梦数据库镜像名称。如果本地未存在,则会尝试从远程拉取最新版本。 - **ports**: 将主机端口映射到容器内的默认监听端口 (通常是 5236)。 - **environment**: 设置必要的环境变量,包括数据库名 (`DM_DB_NAME`)、用户名 (`DM_USER`) 和密码 (`DM_PASSWORD`)。 - **volumes**: 把当前工作目录下的子目录 `./dm_data` 映射到容器中的 `/dm/data` 路径,以便持久化保存数据库文件。 --- #### 3. 加载或构建镜像 如果尚未加载所需的达梦数据库镜像,可以通过以下命令导入预准备好的 `.tar` 格式的镜像文件[^5]: ```bash docker load -i /path/to/dm8_20240422_x86_rh6_64_rq_std_8.1.3.100_pack2.tar ``` 或者直接从官方仓库或其他可信源获取最新的镜像版本。 --- #### 4. 启动服务 进入包含 `docker-compose.yaml` 文件所在的目录后运行以下指令来启动达梦数据库实例: ```bash docker-compose up -d --wait ``` 其中 `-d` 参数表示以后台模式运行;而 `--wait` 则等待直到所有服务完全可用再返回提示信息给终端用户。 --- #### 5. 查看初始化参数 为了确认数据库已成功初始化以及了解具体设置情况,可利用下面这条命令查询相关详情[^2]: ```bash docker inspect dameng8 ``` 这一步骤有助于验证实际生效的各项属性值是否符合预期设定标准。 --- ### 注意事项 对于某些特定场景可能还需要额外调整优化措施,比如针对高并发访问需求调优性能指标或是增强安全性防护策略等。这些都需要依据实际情况深入研究后再做决定实施。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值