体验 KWDB 集群
本节介绍如何通过 Docker Run 命令在单节点上快速体验 KWDB 集群。注意:在实际生产环境中,建议每台机器仅部署一个节点,以提升可用性并降低数据丢失风险。
前提条件
- 已获取 KWDB 容器镜像。
- 待部署节点的硬件、操作系统、软件依赖和端口满足安装部署要求。
- 安装用户为 root 用户或者拥有
sudo
权限的普通用户。- root 用户和配置
sudo
免密的普通用户在执行部署脚本时无需输入密码。 - 未配置
sudo
免密的普通用户在执行部署脚本时,需要输入密码进行提权。
- root 用户和配置
- 安装用户为非 root 用户时,需要通过
sudo usermod -aG docker $USER
命令将用户添加到docker
组。
部署步骤
(可选)如需以安全模式部署 KWDB 集群, 使用以下命令创建数据库证书颁发机构、
root
用户的客户端证书以及节点服务器证书。提示
如果采用跨机器安全模式部署,需要使用
./kwbase cert create-node <node_ip>
命令为所有节点创建证书和密钥,并将 CA 证书和密钥、节点证书和密钥传输至所有节点;如果需要在其它节点上运行 KaiwuDB 客户端命令,还需要将root
用户的证书和密钥复制到该节点。只有拥有root
用户证书和密钥的节点,才能够访问集群。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'
参数说明:
--rm
:容器停止后自动删除。--privileged
:给予容器扩展权限。-v
:设置容器目录映射, 将主机的/etc/kaiwudb/certs
目录挂载到容器内的/kaiwudb/certs
目录,用于存放证书和密钥。-w /kaiwudb/bin
:将容器内的工作目录设置为/kaiwudb/bin
。$kwdb_image
:容器镜像,需填入实际的镜像名以及标签, 例如kwdb:2.2.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
指定 CA 密钥路径。
启动三个及以上数据库实例。
非安全模式
# 启动第一个容器 docker run -d --name kwdb1 --privileged \ --ulimit memlock=-1 --ulimit nofile=1048576 \ -p 26257:26257 -p 8080:8080 \ -v /var/lib/kaiwudb1:/kaiwudb/deploy/kaiwudb-container \ --ipc shareable -w /kaiwudb/bin \ ${kwdb_image} \ ./kwbase start --insecure --listen-addr=0.0.0.0:26257 \ --advertise-addr=${host}:26257 --http-addr=0.0.0.0:8080 \ --store=/kaiwudb/deploy/kaiwudb-container --join ${host}:26257 # 启动第二个容器 docker run -d --name kwdb2 --privileged \ --ulimit memlock=-1 --ulimit nofile=1048576 \ -p 26258:26257 -p 8081:8080 \ -v /var/lib/kaiwudb2:/kaiwudb/deploy/kaiwudb-container \ --ipc shareable -w /kaiwudb/bin \ ${kwdb_image} \ ./kwbase start --insecure --listen-addr=0.0.0.0:26257 \ --advertise-addr=${host}:26258 --http-addr=0.0.0.0:8080 \ --store=/kaiwudb/deploy/kaiwudb-container --join ${host}:26257 # 启动第三个容器 docker run -d --name kwdb3 --privileged \ --ulimit memlock=-1 --ulimit nofile=1048576 \ -p 26259:26257 -p 8082:8080 \ -v /var/lib/kaiwudb3:/kaiwudb/deploy/kaiwudb-container \ --ipc shareable -w /kaiwudb/bin \ ${kwdb_image} \ ./kwbase start --insecure --listen-addr=0.0.0.0:26257 \ --advertise-addr=${host}:26259 --http-addr=0.0.0.0:8080 \ --store=/kaiwudb/deploy/kaiwudb-container --join ${host}:26257
安全模式
# 启动第一个容器 docker run -d --name kwdb1 --privileged \ --ulimit memlock=-1 --ulimit nofile=1048576 \ -p 26257:26257 -p 8080:8080 \ -v /etc/kaiwudb/certs:/kaiwudb/certs \ -v /var/lib/kaiwudb1:/kaiwudb/deploy/kaiwudb-container \ --ipc shareable -w /kaiwudb/bin \ ${kwdb_image} \ ./kwbase start --certs-dir=/kaiwudb/certs --listen-addr=0.0.0.0:26257 \ --advertise-addr=${host}:26257 --http-addr=0.0.0.0:8080 \ --store=/kaiwudb/deploy/kaiwudb-container --join ${host}:26257 # 启动第二个容器 docker run -d --name kwdb2 --privileged \ --ulimit memlock=-1 --ulimit nofile=1048576 \ -p 26258:26257 -p 8081:8080 \ -v /etc/kaiwudb/certs:/kaiwudb/certs \ -v /var/lib/kaiwudb2:/kaiwudb/deploy/kaiwudb-container \ --ipc shareable -w /kaiwudb/bin \ ${kwdb_image} \ ./kwbase start --certs-dir=/kaiwudb/certs --listen-addr=0.0.0.0:26257 \ --advertise-addr=${host}:26258 --http-addr=0.0.0.0:8080 \ --store=/kaiwudb/deploy/kaiwudb-container --join ${host}:26257 # 启动第三个容器 docker run -d --name kwdb3 --privileged \ --ulimit memlock=-1 --ulimit nofile=1048576 \ -p 26259:26257 -p 8082:8080 \ -v /etc/kaiwudb/certs:/kaiwudb/certs \ -v /var/lib/kaiwudb3:/kaiwudb/deploy/kaiwudb-container \ --ipc shareable -w /kaiwudb/bin \ ${kwdb_image} \ ./kwbase start --certs-dir=/kaiwudb/certs --listen-addr=0.0.0.0:26257 \ --advertise-addr=${host}:26259 --http-addr=0.0.0.0:8080 \ --store=/kaiwudb/deploy/kaiwudb-container --join ${host}:26257
参数说明:
-d
:后台运行容器并返回容器 ID。--name
:指定容器名称,便于后续管理。--privileged
:给予容器扩展权限。--ulimit memlock=-1
:取消容器内存大小限制。--ulimit nofile=1048576
:设置容器内进程可以打开的最大文件数。-p
:端口映射,分别映射数据库服务端口(26257)和 HTTP 端口(8080)。-v
:设置容器目录映射:- 将主机的
/var/lib/kaiwudb
目录挂载到容器内的/kaiwudb/deploy/kaiwudb-container
目录,用于持久化数据存储。 - 安全模式下,将主机的
/etc/kaiwudb/certs
目录挂载到容器内的/kaiwudb/certs
目录,用于存放证书和密钥。
- 将主机的
--ipc shareable
:允许其他容器共享此容器的IPC命名空间。-w /kaiwudb/bin
:将容器内的工作目录设置为/kaiwudb/bin
。$kwdb_image
:容器镜像变量,需替换为实际的镜像名称及标签, 例如kwdb:2.2.0
。./kwbase start
: 容器内运行的数据库启动命令, 根据安全模式和非安全模式有所不同:--insecure
:(仅非安全模式)以非安全模式运行。--certs-dir=/kaiwudb/certs
:(安全模式)证书目录位置。--listen-addr=0.0.0.0:26257
:数据库监听的地址和端口。--advertise-addr=${host}:2625X
:数据库向集群中其他节点通信的地址和端口。--http-addr=0.0.0.0:8080
:HTTP 接口监听的地址和端口。--store=/kaiwudb/deploy/kaiwudb-container
:指定数据存储位置。--join ${host}:26257
:节点连接集群的地址,可指定集群中的一个或多个节点。
初始化集群:
非安全模式
docker exec kwdb1 ./kwbase init --insecure --host=$host:26257
安全模式
docker exec kwdb1 ./kwbase init --certs-dir=/kaiwudb/certs --host=$host:26257
参数说明:
docker exec kwdb1
:进入名为kwdb1
的容器中执行命令。./kwbase init
:执行集群初始化命令。--insecure
:(仅非安全模式)指定以非安全模式运行。--certs-dir=/kaiwudb/certs
:(安全模式)指定证书目录位置。--host=$host:26257
:指定连接的主机地址及端口。
访问集群:
非安全模式
docker exec -it kwdb1 ./kwbase sql --insecure --host=$host:26257
安全模式
docker exec -it kwdb1 ./kwbase sql --certs-dir=/etc/kaiwudb/certs --host=$host:26257
参数说明:
docker exec -it kwdb1
:进入容器kwdb1
并以交互方式运行命令。./kwbase sql
:启动 SQL 命令行工具。--insecure
:(仅非安全模式)指定以非安全模式运行。--certs-dir=/kaiwudb/certs
:(安全模式)指定证书目录位置。--host=$host:26257
:指定连接的主机地址及端口。