Docker Run 命令部署

本节介绍如何通过 Docker Run 命令在单节点上部署 KaiwuDB 集群。注意:在实际生产环境中,建议每台机器仅部署一个节点,以提升可用性并降低数据丢失风险。

前提条件

  • 已获取对应系统版本的 KaiwuDB 容器安装包。
  • 待部署节点的硬件、操作系统、软件依赖和端口满足安装部署要求
  • 安装用户为 root 用户或者拥有 sudo 权限的普通用户。
    • root 用户和配置 sudo 免密的普通用户在执行部署脚本时无需输入密码。
    • 未配置 sudo 免密的普通用户在执行部署脚本时,需要输入密码进行提权。
  • 安装用户为非 root 用户时,需要通过 sudo usermod -aG docker $USER 命令将用户添加到 docker 组。

步骤

  1. kaiwudb_install/packages 目录下导入 KaiwuDB.tar 文件,获取镜像名称。

    docker load < KaiwuDB.tar
    Loaded image: "$kaiwudb_image"
    
  2. (可选)如需以安全模式部署 KaiwuDB 集群, 使用以下命令创建数据库证书颁发机构、数据库安装用户的客户端证书以及节点服务器证书。

    提示

    如果采用跨机器安全模式部署,需要使用 ./kwbase cert create-node <node_ip> 命令为所有节点创建证书和密钥,并将生成的所有证书和密钥传输至所有节点。

    • TLS 安全模式

      docker run --rm --privileged \
        -v /etc/kaiwudb/certs:/kaiwudb/certs \
        -w /kaiwudb/bin \
        $kwdb_image \
        bash -c './kwbase cert create-ca --certs-dir=/kaiwudb/certs --ca-key=/kaiwudb/certs/ca.key && \
                  ./kwbase cert create-client root --certs-dir=/kaiwudb/certs --ca-key=/kaiwudb/certs/ca.key && \
                  ./kwbase cert create-node 127.0.0.1 localhost 0.0.0.0 --certs-dir=/kaiwudb/certs --ca-key=/kaiwudb/certs/ca.key'
      
    • TLCP 安全模式

      docker run --rm --privileged \
       -v /etc/kaiwudb/certs:/kaiwudb/certs \
       -w /kaiwudb/bin \
       $kwdb_image \
       bash -c './kwbase cert create-ca --certs-dir=/kaiwudb/certs --ca-key=/kaiwudb/certs/ca.key --tlcp && \
                ./kwbase cert create-client root --certs-dir=/kaiwudb/certs --ca-key=/kaiwudb/certs/ca.key --tlcp && \
                ./kwbase cert create-node 127.0.0.1 localhost 0.0.0.0 --certs-dir=/kaiwudb/certs --ca-key=/kaiwudb/certs/ca.key --tlcp'
      

    参数说明:

    参数说明
    --rm容器停止后自动删除。
    --privileged给予容器扩展权限。
    -v设置容器目录映射,将主机的 /etc/kaiwudb/certs 目录挂载到容器内的 /kaiwudb/certs 目录,用于存放证书和密钥。
    -w /kaiwudb/bin将容器内的工作目录设置为 /kaiwudb/bin
    $kaiwudb_image容器镜像,需填入实际的镜像名以及标签,例如 kaiwudb:3.0.0
    bash -c在容器中执行后面的证书创建命令,其中:
    - ./kwbase cert create-ca:创建证书颁发机构(CA),生成 CA 证书和密钥。
    - ./kwbase cert create-client root:为 root 用户创建客户端证书和密钥。
    - ./kwbase cert create-node 127.0.0.1 localhost 0.0.0.0:创建节点证书和密钥,支持通过三种网络标识符访问:本地回环地址 (127.0.0.1)、本地主机名 (localhost) 和所有网络接口 (0.0.0.0)。
    - 所有命令均使用 --certs-dir=/kaiwudb/certs 指定证书存储目录,使用 --ca-key=/kaiwudb/certs/ca.key 指定密钥路径。
    - TLCP 安全模式下需通过 --tlcp 参数指定使用 TLCP 协议的证书生成方式。
  3. 启动三个及以上数据库实例。

    • 非安全模式

      # 启动第一个容器
      docker run -d --name kaiwudb1 --privileged \
        --ulimit memlock=-1 --ulimit nofile=1048576 \
        -p 26257:26257 \
        -p 27257:27257 \
        -p 8080:8080 \
        -v /var/lib/kaiwudb1:/kaiwudb/deploy/kaiwudb-container \
        --ipc shareable -w /kaiwudb/bin \
        ${kaiwudb_image} \
        ./kwbase start --insecure --listen-addr=0.0.0.0:26257 \
        --advertise-addr=${host}:26257 --brpc-addr=:27257 --http-addr=0.0.0.0:8080 \
        --store=/kaiwudb/deploy/kaiwudb-container --join ${host}:26257
      
      # 启动第二个容器
      docker run -d --name kaiwudb2 --privileged \
        --ulimit memlock=-1 --ulimit nofile=1048576 \
        -p 26258:26257 \
        -p 27258:27258 \
        -p 8081:8080 \
        -v /var/lib/kaiwudb2:/kaiwudb/deploy/kaiwudb-container \
        --ipc shareable -w /kaiwudb/bin \
        ${kaiwudb_image} \
        ./kwbase start --insecure --listen-addr=0.0.0.0:26257 \
        --advertise-addr=${host}:26258 --brpc-addr=:27258 --http-addr=0.0.0.0:8080 \
        --store=/kaiwudb/deploy/kaiwudb-container --join ${host}:26257
      
      # 启动第三个容器
      docker run -d --name kaiwudb3 --privileged \
        --ulimit memlock=-1 --ulimit nofile=1048576 \
        -p 26259:26257 \
        -p 27259:27259 \
        -p 8082:8080 \
        -v /var/lib/kaiwudb3:/kaiwudb/deploy/kaiwudb-container \
        --ipc shareable -w /kaiwudb/bin \
        ${kaiwudb_image} \
        ./kwbase start --insecure --listen-addr=0.0.0.0:26257 \
        --advertise-addr=${host}:26259 --brpc-addr=:27259 --http-addr=0.0.0.0:8080 \
        --store=/kaiwudb/deploy/kaiwudb-container --join ${host}:26257
      
    • TLS 安全模式

      # 启动第一个容器
      docker run -d --name kaiwudb1 --privileged \
        --ulimit memlock=-1 --ulimit nofile=1048576 \
        -p 26257:26257 \
        -p 27257:27257 \
        -p 8080:8080 \
        -v /etc/kaiwudb/certs:/kaiwudb/certs \
        -v /var/lib/kaiwudb1:/kaiwudb/deploy/kaiwudb-container \
        --ipc shareable -w /kaiwudb/bin \
        ${kaiwudb_image} \
        ./kwbase start --certs-dir=/kaiwudb/certs --listen-addr=0.0.0.0:26257 \
        --advertise-addr=${host}:26257 --brpc-addr=:27257 --http-addr=0.0.0.0:8080 \
        --store=/kaiwudb/deploy/kaiwudb-container --join ${host}:26257
      
      # 启动第二个容器
      docker run -d --name kaiwudb2 --privileged \
        --ulimit memlock=-1 --ulimit nofile=1048576 \
        -p 26258:26257 \
        -p 27258:27258 \
        -p 8081:8080 \
        -v /etc/kaiwudb/certs:/kaiwudb/certs \
        -v /var/lib/kaiwudb2:/kaiwudb/deploy/kaiwudb-container \
        --ipc shareable -w /kaiwudb/bin \
        ${kaiwudb_image} \
        ./kwbase start --certs-dir=/kaiwudb/certs --listen-addr=0.0.0.0:26257 \
        --advertise-addr=${host}:26258 --brpc-addr=:27258 --http-addr=0.0.0.0:8080 \
        --store=/kaiwudb/deploy/kaiwudb-container --join ${host}:26257
      
      # 启动第三个容器
      docker run -d --name kaiwudb3 --privileged \
        --ulimit memlock=-1 --ulimit nofile=1048576 \
        -p 26259:26257 \
        -p 27259:27259 \
        -p 8082:8080 \
        -v /etc/kaiwudb/certs:/kaiwudb/certs \
        -v /var/lib/kaiwudb3:/kaiwudb/deploy/kaiwudb-container \
        --ipc shareable -w /kaiwudb/bin \
        ${kaiwudb_image} \
        ./kwbase start --certs-dir=/kaiwudb/certs --listen-addr=0.0.0.0:26257 \
        --advertise-addr=${host}:26259 --brpc-addr=:27259 --http-addr=0.0.0.0:8080 \
        --store=/kaiwudb/deploy/kaiwudb-container --join ${host}:26257
      
    • TLCP 安全模式

      # 启动第一个容器
      docker run -d --name kaiwudb1 --privileged \
        --ulimit memlock=-1 --ulimit nofile=1048576 \
        -p 26257:26257 \
        -p 27257:27257 \
        -p 8080:8080 \
        -v /etc/kaiwudb/certs:/kaiwudb/certs \
        -v /var/lib/kaiwudb1:/kaiwudb/deploy/kaiwudb-container \
        --ipc shareable -w /kaiwudb/bin \
        ${kaiwudb_image} \
        ./kwbase start --certs-dir=/kaiwudb/certs --listen-addr=0.0.0.0:26257 \
        --advertise-addr=${host}:26257 --brpc-addr=:27257 --http-addr=0.0.0.0:8080 \
        --store=/kaiwudb/deploy/kaiwudb-container --join ${host}:26257 --tlcp
      
      # 启动第二个容器
      docker run -d --name kaiwudb2 --privileged \
        --ulimit memlock=-1 --ulimit nofile=1048576 \
        -p 26258:26257 \
        -p 27258:27258 \
        -p 8081:8080 \
        -v /etc/kaiwudb/certs:/kaiwudb/certs \
        -v /var/lib/kaiwudb2:/kaiwudb/deploy/kaiwudb-container \
        --ipc shareable -w /kaiwudb/bin \
        ${kaiwudb_image} \
        ./kwbase start --certs-dir=/kaiwudb/certs --listen-addr=0.0.0.0:26257 \
        --advertise-addr=${host}:26258 --brpc-addr=:27258 --http-addr=0.0.0.0:8080 \
        --store=/kaiwudb/deploy/kaiwudb-container --join ${host}:26257 --tlcp
      
      # 启动第三个容器
      docker run -d --name kaiwudb3 --privileged \
        --ulimit memlock=-1 --ulimit nofile=1048576 \
        -p 26259:26257 \
        -p 27259:27259 \
        -p 8082:8080 \
        -v /etc/kaiwudb/certs:/kaiwudb/certs \
        -v /var/lib/kaiwudb3:/kaiwudb/deploy/kaiwudb-container \
        --ipc shareable -w /kaiwudb/bin \
        ${kaiwudb_image} \
        ./kwbase start --certs-dir=/kaiwudb/certs --listen-addr=0.0.0.0:26257 \
        --advertise-addr=${host}:26259 --brpc-addr=:27259 --http-addr=0.0.0.0:8080 \
        --store=/kaiwudb/deploy/kaiwudb-container --join ${host}:26257 --tlcp
      

    参数说明:

    参数说明
    -d后台运行容器并返回容器 ID。
    --name指定容器名称,便于后续管理。
    --privileged给予容器扩展权限。
    --ulimit memlock=-1取消容器内存大小限制。
    --ulimit nofile=1048576设置容器内进程可以打开的最大文件数。
    -p端口映射,分别映射数据库服务端口(26257)、brpc 端口和 HTTP 端口(8080)。注意:容器内外 brpc 端口必须保持一致。
    -v设置容器目录映射:
    - 将主机的 /var/lib/kaiwudbX 目录挂载到容器内的 /kaiwudb/deploy/kaiwudb-container 目录,用于持久化数据存储。
    - 安全模式下,将主机的 /etc/kaiwudb/certs 目录挂载到容器内的 /kaiwudb/certs 目录,用于存放证书和密钥。
    --ipc shareable允许其他容器共享此容器的IPC命名空间。
    -w /kaiwudb/bin将容器内的工作目录设置为 /kaiwudb/bin
    $kaiwudb_image容器镜像变量,需替换为实际的镜像名称及标签,例如 kaiwudb:3.0.0
    ./kwbase start容器内运行的数据库启动命令,根据安全模式和非安全模式有所不同:
    - --insecure:(仅非安全模式)以非安全模式运行。
    - --certs-dir=/kaiwudb/certs:(安全模式)证书目录位置。
    - --listen-addr=0.0.0.0:26257:数据库监听的地址和端口。
    - --advertise-addr=${host}:2625X:数据库向集群中其他节点通信的地址和端口。
    - --brpc-addr=:2725X:KaiwuDB 时序引擎间的 brpc 通信端口,用于节点间通信。
    - --http-addr=0.0.0.0:8080:HTTP 接口监听的地址和端口。
    - --store=/kaiwudb/deploy/kaiwudb-container:指定数据存储位置。
    - --join ${host}:26257:节点连接集群的地址,可指定集群中的一个或多个节点。
    - --tlcp:(TLCP 安全模式)使用 TLCP 加密协议。
  4. 初始化集群:

    • 非安全模式

      docker exec kaiwudb1 ./kwbase init --insecure --host=$host:26257
      
    • TLS 安全模式

      docker exec kaiwudb1 ./kwbase init --certs-dir=/kaiwudb/certs --host=$host:26257
      
    • TLCP 安全模式

      docker exec kaiwudb1 ./kwbase init --certs-dir=/kaiwudb/certs --host=$host:26257 --tlcp
      

    参数说明:

    参数说明
    docker exec kaiwudb1进入名为 kaiwudb1 的容器中执行命令。
    ./kwbase init执行集群初始化命令,根据安全模式和非安全模式有所不同:
    - --insecure:(仅非安全模式)指定以非安全模式运行。
    - --certs-dir=/kaiwudb/certs:(安全模式)指定证书目录位置。
    - --host=$host:26257:指定连接的主机地址及端口。
    - --tlcp:(TLCP 安全模式)使用 TLCP 加密协议。