# 在 Docker Swarm 上部署 Typesense 集群

要在运行 Docker Swarm (opens new window) 模式的多台主机上部署 Typesense 集群,请按照以下步骤操作:

  • 初始化 Docker Swarm。 例如,在 4 节点的 Docker Swarm 设置中(Node1 作为 docker manager,Node2、Node3、Node4 作为 docker worker),在 docker manager 节点上运行 docker swarm init

  • 在 docker manager 节点上创建用户定义的 overlay 网络用于 typesense 服务通信。 在 docker manager 节点上运行以下命令。

    记下 subnet 值。相同的 subnet 值将用于下面的 docker-stack.yml --peering-subnet 标志。

  • 将其他 Docker 节点上的 Docker 实例作为 worker 添加到现有的 Docker Swarm 中。 记得更改 token 或使用命令 docker swarm join-token worker 获取 token,并在所有 docker 节点上重复以下命令。

  • 在 docker manager 节点上运行以下命令验证 docker swarm 节点的状态和角色。

  • 在 swarm 中的每个 docker worker 节点上创建新的 nodes 文件。

  • 连接到每个 Docker worker 节点并创建 data 文件夹。

  • 在 docker manager 节点上创建 docker-stack.yml 文件。该文件将用于在所有 docker worker 节点上部署 Typesense 服务。

    # docker-stack.yml 文件内容

    重要提示

    Docker swarm 设置中,--peering-subnet 标志应与默认或用户定义的 overlay 网络中的 subnet 相同。--peering-subnet 是在 typesense/typesense:0.23.0 (opens new window) 中引入的。有关 Overlay 网络的更多信息,请阅读官方 Docker 文档 此处 (opens new window)

    version: "3.8"
    services:
      typesense-1:
        image: typesense/typesense:0.23.0
        hostname: typesense-1
        volumes:
          - /var/lib/typesense-data-1/:/data
          - ./nodes:/nodes
        ports:
          - 7108:7108
          - 7107:7107
        command: ["--peering-subnet","10.11.0.10/16","--data-dir", "/data","--api-key", "xyz","--nodes","/nodes","--peering-port","7107","--api-port","7108","--enable-cors"]
        deploy:
          replicas: 1
          labels:
            feature.description: “typesense-1”
          restart_policy:
            condition: any
          placement:
            constraints: [node.hostname == node2]
        networks:
            - ts_net
      typesense-2:
        image: typesense/typesense:0.23.0
        hostname: typesense-2
        volumes:
          - /var/lib/typesense-data-2/:/data
          - ./nodes:/nodes
        ports:
          - 8108:8108
          - 8107:8107
        command: ["--peering-subnet","10.11.0.10/16","--data-dir", "/data","--api-key", "xyz","--nodes","/nodes","--peering-port","8107","--api-port","8108","--enable-cors"]
        deploy:
          replicas: 1
          labels:
            feature.description: “typesense-2”
          restart_policy:
            condition: any
          placement:
            constraints: [node.hostname == node3]
        networks:
            - ts_net
      typesense-3:
        image: typesense/typesense:0.23.0
        hostname: typesense-3
        volumes:
          - /var/lib/typesense-data-3/:/data
          - ./nodes:/nodes
        ports:
          - 9108:9108
          - 9107:9107
        
        command: ["--peering-subnet","10.11.0.10/16","--data-dir", "/data","--api-key", "xyz","--nodes","/nodes","--peering-port","9107","--api-port","9108","--enable-cors"]
        deploy:
          replicas: 1
          labels:
            feature.description: “typesense-3”
          restart_policy:
            condition: any
          placement:
            constraints: [node.hostname == node4]
        networks:
            - ts_net
    networks:
      ts_net:
        external: true
    
  • 从 docker manager 节点运行以下命令部署 stack。

  • manager 节点列出服务和任务在 docker worker 节点上的分布情况。docker stack ps 命令将显示 typesense 服务在所有 docker worker 节点上的分布。

  • 通过连接到任何 docker worker 节点验证 typesense 服务是否成功 clustered

    注意: 对于成功的 docker swarm 设置,您可以通过 /debug 端点响应中的 state 字段值确定容器节点是 leader 还是 follower。至少一个容器节点的 state 值应为 1,如 多节点部署 (opens new window) 文档所述。