forked from opencurve/curveadm
    
        
        - 
                Notifications
    You must be signed in to change notification settings 
- Fork 2
topology
        dongwei edited this page Oct 29, 2025 
        ·
        3 revisions
      
    集群拓扑文件用来描述哪些服务部署在哪些机器上,以及每一个服务实例的配置。
kind: dingofs
global:
  log_dir: ${home}/dingofs/logs/${service_role}
  data_dir: ${home}/dingofs/data/${service_role}
  raft_dir: ${home}/dingofs/raft/${service_role}
  default_replica_num: 3
  variable:
    home: /tmp
    machine1: server-host1
    machine2: server-host2
    machine3: server-host3
coordinator_services:
  config:
    container_image: dingodatabase/dingo-store:latest
    server.port: 6500
    raft.port: 7500
  deploy:
    - host: ${machine1}
    - host: ${machine2}
    - host: ${machine3}
store_services:
  config:
    container_image: dingodatabase/dingo-store:latest
    server.port: 6600
    raft.port: 7600
  deploy:
    - host: ${machine1}
    - host: ${machine2}
    - host: ${machine3}
mds_services:
  config:
    container_image: dingodatabase/dingofs:latest
    server.port: 6900
  deploy:
    - host: ${machine1}
    - host: ${machine2} 
    - host: ${machine3}
executor_services:
  config:
    container_image: dingodatabase/dingo:latest
    port: 8765
    mysqlPort: 3307
  deploy:
    - host: ${machine1}为使拓扑文件配置更灵活、更精简,我们给拓扑文件添加了以下几个特性:
拓扑文件中的配置分为以下 3 个层级:
- 全局配置:作用于拓扑文件中的全部服务实例
- 服务配置:作用于同角色下的所有服务实例
- 实例配置:作用于单一服务实例
配置优先级为:实例配置 > 服务配置 > 全局配置。
 
以下是 2 个不同的配置文件,但是其具备相同的配置效果:
mds_services:
  config:
  deploy:
    - host: server-host1
      config:
        mds_log_level: DEBUG
    - host: server-host2
      config:
        mds_log_level: DEBUG
    - host: server-host3
      config:
        mds_log_level: DEBUGmds_services:
  config:
    mds_log_level: DEBUG
  deploy:
    - host: server-host1
    - host: server-host2
    - host: server-host3为减少重复配置、精简拓扑文件,我们内置了以下变量, 这些变量在不同的上下文中具备不同的值,可用于拓扑文件配置的填写:
| 变量名 | 说明 | 示例 | 
|---|---|---|
| ${service_host} | 服务主机地址。在不同的主机上部署服务时该变量具备不同的值,如在主机 server-host1上部署服务时,该变量值为主机server-host1对应的地址,即10.0.1.1,在主机server-host2上部署服务时,则该变量值为10.0.1.2,详见主机模块 | 10.0.1.1 | 
| ${service_role} | 服务角色名。在部署不同类型的服务时,具备不同的角色名,如在部署mds 服务时,该变量值为 mds,而在部署 store 服务时,则该变量值为 store | coordinator、store,mds、executor | 
| ${service_host_sequence} | 服务主机序列号。部署同类型服务时,根据 deploy列表,在第一台主机上部署服务时,该序列号为 0,在第二台主机上部署服务时,该序列号为 1,依此类推 | 0、1、2 | 
| ${service_replicas_sequence} | 服务副本序列号。在将同一类型的服务在同一主机上部署多个副本实例时,部署第一个副本时,该序列号为 0,部署第二个副本时,该序列号为 1,依此类推 | 0、1、2 | 
| ${format_replicas_sequence} | 格式化后的服务副本序列号。其值等同于 ${service_replicas_sequence}变量,但是该序列号加了前置 0 | 00、01、02 | 
| ${random_uuid} | 随机 UUID | 6fa8f01c411d7655d0354125c36847bb | 
当前,除了内置变量外,用户也可以自定义变量, 在 variable 区块添加相应变量即可:
global:
  variable:
    var1: value1
    var2: value2下面我们将通过 3 个示例来展示变量的应用,在每个示例中都有 2 份不同的配置,但是其都具备相同的配置效果:
我们假定 server-host{1,2,3} 对应的地址分别为 10.0.1.{1,2,3},并已通过主机模块提交
mds_services:
  config:
  deploy:
    - host: server-host1
      config:
        listen.ip: 10.0.1.1
    - host: server-host2
      config:
        listen.ip: 10.0.1.2
    - host: serevr-host3
      config:
        listen.ip: 10.0.1.3mds_services:
  config:
    listen.ip: ${service_host}
  deploy:
    - host: server-host1
    - host: server-host2
    - host: server-host3mds_services:
  config:
    mds_log_level: DEBUG
  deploy:
    - host: serevr-host1
      config:
        server.port: 6900
    - host: serevr-host2
      config:
        server.port: 6901
    - host: server-host3
      config:
        server.port: 6902chunkserver_services:
  config:
    mds_log_level: DEBUG
    server.port: 690${service_host_sequence}
  deploy:
    - host: serevr-host1
    - host: serevr-host2
    - host: serevr-host3store_services:
  deploy:
   - host: server-host1
   - host: server-host2
   - host: server-host3
mds_services:
 deploy:
   - host: server-host1
   - host: server-host2
   - host: server-host3global:
  variable:
    machine1: server-host1
    machine2: server-host2
    machine3: server-host3
store_services:
  deploy:
    - host: ${machine1}
    - host: ${machine2}
    - host: ${machine3}
mds_services:
  deploy:
    - host: ${machine1}
    - host: ${machine2}
    - host: ${machine3}💡 提醒:
这里的replicas不代表存储池的副本数,而是表示该节点上部署的同类进程的数量,比如mds进程数量。
当我们需要在单台机器上部署多个同一类型的服务实例时,可利用 replicas 复制服务特性来简化我们的拓扑文件:
mds_services:
  config:
    server.port: 690${service_host_sequence}
  deploy:
    - host: server-host1
    - host: server-host1
    - host: server-host1mds_services:
  config:
    server.port: 690${service_replicas_sequence}
  deploy:
    - host: server-host1
      replicas: 3变量 ${servicce_host_sequence}、${service_replicas_sequence} 的值请参考上文变量。
DingoFS 集群拓扑文件由以下 5 个区块组成:
| 区块 | 说明 | 服务简介 | 
|---|---|---|
| global | 全局配置 | |
| coordinator_services | coordinator 服务区块 | 用于存储元数据 | 
| store_services | store 服务区块 | 用于存储元数据 | 
| mds_services | mds 服务区块 | 分布式元数据管理系统,为客户端提供元数据服务 | 
| executor_services | executor 服务区块 | 调度store服务的GC | 
kind: dingofs
global:
  log_dir: ${home}/dingofs/logs/${service_role}
  data_dir: ${home}/dingofs/data/${service_role}
  raft_dir: ${home}/dingofs/raft/${service_role}
  default_replica_num: 3
  variable:
    home: /tmp
    machine1: server-host1
    machine2: server-host2
    machine3: server-host3
coordinator_services:
  config:
    container_image: dingodatabase/dingo-store:latest
    server.port: 6500
    raft.port: 7500
  deploy:
    - host: ${machine1}
    - host: ${machine2}
    - host: ${machine3}
store_services:
  config:
    container_image: dingodatabase/dingo-store:latest
    server.port: 6600
    raft.port: 7600
  deploy:
    - host: ${machine1}
    - host: ${machine2}
    - host: ${machine3}
mds_services:
  config:
    container_image: dingodatabase/dingofs:latest
    server.port: 6900
  deploy:
    - host: ${machine1}
    - host: ${machine2} 
    - host: ${machine3}
executor_services:
  config:
    container_image: dingodatabase/dingo:latest
    port: 8765
    mysqlPort: 3307
  deploy:
    - host: ${machine1}为了方便用户准备拓扑文件,我们根据常见的场景,给用户准备了不同的拓扑文件模板。 用户可根据需求自行选择,并进行编辑调整:
💡 提醒:
关于拓扑文件中的配置层级及变量,详见上文:
| 配置项 | 是否必填 | 默认值 | 说明 | 
|---|---|---|---|
| kind | Y | 拓扑文件类型。必须为 dingofs | |
| container_image | dingodatabase/dingofs:latest | 容器镜像。默认值为我们最新稳定版本,你也可以访问 DingoFS 公共 docker 仓库自行选择 | |
| log_dir | 保存服务日志的目录。如果不配置该选项,日志默认保存在容器内的指定目录,一旦容器被清理,日志将会随之删除 | ||
| data_dir | 保存服务数据的目录。如果不配置该选项,数据默认保存在容器内的指定目录,一旦容器被清理,数据将会随之丢失 | ||
| s3.ak | S3 服务的 Access Key。用于上传实际数据。仅在使用S3存储引擎并且创建文件系统时需要 | ||
| s3.sk | S3 服务的 Secret Key。用于上传实际数据。仅在使用S3存储引擎并且创建文件系统时需要 | ||
| s3.endpoint | S3 服务地址。用于上传实际数据。仅在使用S3存储引擎并且创建文件系统时需要 | ||
| s3.bucket_name | S3 服务桶名。用于上传实际数据。仅在使用S3存储引擎并且创建文件系统时需要 | ||
| variable | 变量区块。可将自定义变量填写在该区块 | 
所有未在拓扑文件上出现的配置项,我们都将使用默认配置值,你可以通过点击以下连接来查看各服务配置项及相关默认值:
© 2024 Dingo Team. All Rights Reserved