You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Docker Compose中的两个服务进行扩容?附配置示例

对Docker Compose中的cryptohds和cryptohds-mysql服务进行扩容的方法

我有如下Docker Compose配置文件:

version: '2'
services:
  cryptohds:
    image: cryptohds:cryptohds-2.0.0-SNAPSHOT
    environment:
      - APP_SLEEP=10 # 为应用启动前预留数据库启动时间
      - SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.jdbc.Driver
      - SPRING_DATASOURCE_URL=jdbc:mysql://cryptohds-mysql:3306/cryptohds?useUnicode=true&characterEncoding=utf8&useSSL=false
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=cryptohds
  cryptohds-mysql:
    extends:
      file: mysq...

现需对上述配置中的两个服务进行扩容,请问具体操作方法是什么?

针对你的需求,我来分别说明两个服务的扩容方法——毕竟无状态应用和数据库的扩容逻辑完全不同:

一、扩容cryptohds应用服务

这个Spring Boot应用从配置来看是无状态的(没有依赖本地存储,所有数据都存在MySQL里),所以扩容非常简单直接:

  • 直接用Docker Compose的--scale参数指定要运行的实例数量,比如要扩到3个实例,执行:
    docker-compose up -d --scale cryptohds=3
    
  • 扩容后,所有实例都会自动通过Docker的服务发现连接到cryptohds-mysql,不需要修改任何配置——因为你的数据库连接地址用的是服务名,Docker会自动处理负载均衡和路由。
  • 如果你后续升级到Docker Compose v3+,也可以在配置文件里直接加deploy.replicas字段固定实例数,但你当前用的是v2版本,命令行--scale是最直接的方式。

二、扩容cryptohds-mysql数据库服务

MySQL默认是单节点架构,直接用--scale扩容会导致多个节点数据完全独立,根本没法用。所以得用主从复制或者集群方案来实现:

方案1:手动搭建主从复制(适合小规模场景)

  1. 先修改MySQL的配置,开启二进制日志(主节点需要这个来同步数据)。在你的mysql.yml扩展文件里,给主节点添加启动参数:
    command: --server-id=1 --log-bin=mysql-bin
    
    每个从节点的server-id必须唯一,比如从节点设为2、3。
  2. 主节点启动后,创建用于复制的账号:
    CREATE USER 'repl'@'%' IDENTIFIED BY 'your_repl_password';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    FLUSH PRIVILEGES;
    
  3. 导出主节点的初始数据,导入到从节点,然后在从节点执行同步命令(替换成主节点的实际日志文件名和位置):
    CHANGE MASTER TO
    MASTER_HOST='cryptohds-mysql-master',
    MASTER_USER='repl',
    MASTER_PASSWORD='your_repl_password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS= 107;
    START SLAVE;
    
  4. 修改Docker Compose配置,添加主从节点:
    services:
      cryptohds-mysql-master:
        extends:
          file: mysql.yml
        environment:
          - MYSQL_ROOT_PASSWORD=cryptohds
        command: --server-id=1 --log-bin=mysql-bin
      cryptohds-mysql-slave1:
        extends:
          file: mysql.yml
        environment:
          - MYSQL_ROOT_PASSWORD=cryptohds
        command: --server-id=2
        depends_on:
          - cryptohds-mysql-master
    
  5. 最后调整cryptohds的配置,实现读写分离——可以通过Spring自带的配置,或者用MyCat这类中间件来路由请求。

方案2:使用成熟的MySQL集群方案(适合大规模场景)

如果需要更高的可用性和扩展性,可以用MySQL官方的InnoDB Cluster,或者Percona XtraDB Cluster这类第三方方案。这些方案会自动处理数据同步和故障转移,但需要调整Docker Compose配置来适配对应的镜像和初始化流程,比如使用官方提供的集群镜像,或者编写初始化脚本完成集群搭建。

内容的提问来源于stack exchange,提问作者SnackK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:29:28