Docker Run 命令部署
本节介绍如何通过 Docker Run 命令在单节点上部署 KaiwuDB 集群。注意:在实际生产环境中,建议每台机器仅部署一个节点,以提升可用性并降低数据丢失风险。
前提条件
- 已获取对应系统版本的 KaiwuDB 容器安装包。
- 待部署节点的硬件、操作系统、软件依赖和端口满足安装部署要求。
- 安装用户为 root 用户或者拥有
sudo
权限的普通用户。- root 用户和配置
sudo
免密的普通用户在执行部署脚本时无需输入密码。 - 未配置
sudo
免密的普通用户在执行部署脚本时,需要输入密码进行提权。
- root 用户和配置
- 安装用户为非 root 用户时,需要通过
sudo usermod -aG docker $USER
命令将用户添加到docker
组。
步骤
在
kaiwudb_install/packages
目录下导入KaiwuDB.tar
文件,获取镜像名称。docker load < KaiwuDB.tar Loaded image: "$kaiwudb_image"
(可选)如需以安全模式部署 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 协议的证书生成方式。启动三个及以上数据库实例。
非安全模式
# 启动第一个容器 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 加密协议。初始化集群:
非安全模式
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 加密协议。