KaiwuDBKaiwuDB

KWDB 创作者计划 | KWDB 部署之 deploy.sh install --single 命令分析

2025-05-20

原文链接:【KWDB创作者计划】_KWDB部署之deploy.sh install --single命令分析 - OSCHINA - 中文开源技术交流社区

作者:IT从业者张某某


安装操作系统 Ubuntu22.04:

本博客是在在默认安装了 Ubuntu22.04 的基础上,执行的一系列操作,如果需要本地安装 Ubuntu 或安装 Ubuntu22.04 的云服务可以参考如下链接:

基于云服务器的 KWDB 安装:https://blog.csdn.net/m0_38139250/article/details/147234176

KWDB 支持的操作系统如下:

KWDB 创作者计划 | KWDB 部署之 deploy.sh install --single 命令分析(图1)

参考文档

KWDB2.2 的下载页面如下: https://gitee.com/kwdb/kwdb/releases/tag/V2.2.0

KWDB 创作者计划 | KWDB 部署之 deploy.sh install --single 命令分析(图2)

下载地址: https://gitee.com/kwdb/kwdb/releases/download/V2.2.0/KWDB-2.2.0-ubuntu22.04-x86_64-debs.tar.gz

安装的参考过程如下: https://gitee.com/kwdb/kwdb

安装的参考过程如下: https://blog.itpub.net/69947868/viewspace-3081066

部署 KWDB

安装完操作系统,就可以安装 KWDB 了,按照 gitee 的 README 文档 https://gitee.com/kwdb/kwdb,

1. 首先准备基础环境

准备的基础环境包括更新源,安装 cmake 与 go,升级 libprotobuf-dev 到最新版本

sudo apt updatesudo apt install cmake -y
sudo snap install go --classicsudo apt install libprotobuf-dev

CMake 是一个跨平台的开源构建系统工具,它的主要作用是帮助开发者更方便地管理软件项目的构建过程。通过使用 CMake,开发者可以避免为每个支持的目标平台手动编写和维护低级构建文件(如 Makefile)。CMake 支持多种操作系统(如 Windows、macOS、Linux 等)以及不同的编译器和开发环境,使得同一个项目可以在不同平台上轻松构建。

snap 和 apt 类似,都是安装工具,使用 Snap 安装 Go 可更快获取最新版本,跨平台兼容性强,依赖管理更简单。而 Apt 提供的 Go 版本通常较旧,受限于发行版仓库更新周期。Snap 还支持自动更新和回滚,适合需要最新功能和便捷部署的开发者。--classic 选项指定了要使用的 confinement 级别。Snap 应用程序默认情况下在严格的沙箱环境中运行,限制了其对外部系统的访问。--classic 选项来放宽这些限制,使得应用(如开发工具、编程语言等)可访问系统文件或网络等功能。

libprotobuf-dev: libprotobuf-dev 是一个开发库,提供了 Protocol Buffers(简称 Protobuf)的开发所需文件。Protocol Buffers 是由 Google 开发的一种与语言无关、平台无关的可扩展机制,用于序列化结构化数据。它让你能够定义数据的结构一次,并生成便于在各种编程语言间交换数据的源代码。

2. 下载并解压 KWDB 安装包

通过 wget 命令下载安装包

wget https://gitee.com/kwdb/kwdb/releases/download/V2.2.0/KWDB-2.2.0-ubuntu22.04-x86_64-debs.tar.gz

解压压缩包

tar zxvf KWDB-2.2.0-ubuntu22.04-x86_64-debs.tar.gz

解压后的目录名称为 kwdb_install,如下

KWDB 创作者计划 | KWDB 部署之 deploy.sh install --single 命令分析(图3)

3. 修改配置配置

进入解压后目录,并查看当前目录文件

cd kwdb_install/ls

kwdb_install 目录如下

KWDB 创作者计划 | KWDB 部署之 deploy.sh install --single 命令分析(图4)

dd_user.sh 用户添加用户,deploy.cfg 是部署的配置文件,deploy.sh 为 kwdb 的部署脚本

编辑 kwdb_install 目录的 deploy.cfg 配置文件

sudo vi deploy.cfg

编辑如下:注意 [cluster] 也需要用 #注释掉

[global] secure_mode=tls management_user=kaiwudb rest_port=8080 kaiwudb_port=26257 data_root=/var/lib/kaiwudb cpu=1 [local] node_addr=your-host-ip

#[cluster] 单节点安装时需要注释掉

#node_addr=your-host-ip, your-host-ip

#ssh_port=22

#ssh_user=admin

4. 修改~/.bashrc 与 /etc/profile 禁用 Go 模块功能,并生效设置。

本部分需要在~/.bashrc 与 /etc/profile 目录下新增一行,

export GO111MODULE=off

GO111MODULE=off 是一个环境变量设置,用于控制 Go 语言的模块(module)系统的行为。Go 模块是 Go 1.11 版本引入的一个重要的特性,旨在更好地管理项目依赖关系。将 GO111MODULE 设置为 off 时,意味着你关闭了 Go 模块支持,此时 Go 工具链会恢复到使用传统的依赖管理方式,即通过 GOPATH 和 vendor 目录来查找和管理依赖项。此设置主要用于向后兼容或在某些特定情况下避免与 Go 模块相关的复杂性。然而,随着 Go 模块逐渐成为标准做法,推荐的做法是在新的项目中开启 Go 模块支持,并利用它提供的更强大的依赖管理和构建功能。默认情况下,从 Go 1.16 开始,Go 模块支持是自动开启的,除非特别配置才会关闭。 特此提供基于 vim 编辑器的快捷方式,好用的 vi 快捷键

在一般模式 (刚进入的模式,esc 模式) Go 或 Shift+g 然后 o 先 G 或 shift+g 到最后一行 然后 小写 o 在该行下方新增一行

个人用户设置:修改~/.bashrc 文件

sudo vi ~/.bashrc

输入 Go,然后添加

export GO111MODULE=off

这个操作比较丝滑啊:100:。

系统设置:修改 /etc/profile 文件

sudo vi /etc/profile

输入 Go,然后添加

export GO111MODULE=off

这个操作依旧比较丝滑啊:100:。

立即生效

source ~/.bashrcsource /etc/profile

5. 安装 kwdb・要输入密码

./deploy.sh install --single

我的密码为 123456

KWDB 创作者计划 | KWDB 部署之 deploy.sh install --single 命令分析(图5)

6. 启动 kwdb

重新加载系统服务的方法有如下 3 种,区别如下:

命令作用对象行为适用场景对服务的影响
systemctl restart 服务名具体服务强制停止服务,再重新启动配置或代码有重大变更,或服务出现异常需完全重启。服务会中断,进程 PID 变化。
systemctl reload 服务名具体服务请求服务重新加载配置(不重启)。仅需更新配置文件(如 Nginx、Apache),需保持服务不中断。服务不中断,进程 PID 不变(需服务支持 reload 功能)。
systemctl daemon-reloadSystemd 管理器本身重新加载所有单元文件(如 .service.timer),使配置变更生效。修改了服务的单元文件(如启动参数、依赖关系),或新增 / 删除了单元文件。不会直接影响运行中的服务,需后续手动重启服务以应用变更。

使用 systemctl daemon-reload 命令重写加载配置文件 ,

systemctl daemon-reload

启动并查看 kwdb 状态

systemctl start kaiwudb.servicesystemctl status kaiwudb.service

7. 登录到命令行的 kwdb

执行 add_user.sh 脚本创建数据库用户。

./add_user.shPlease enter the username: Please enter the password:

如果跳过该步骤,系统将默认使用 root 用户,且无需密码访问数据库。

通过 kwbase 命令行链接 kwbase,代码如下:

sudo /usr/local/kaiwudb/bin/kwbase sql --host=xxx.xxx.xxx.xxx:26257 --certs-dir=/etc/kaiwudb/certs

注意,上面的 xxx.xxx.xxx.xxx 需要更换为你电脑的 ip 地址。

8. 测试数据

创建一个时序数据库 tsdb

CREATE TS DATABASE tsdb;

在 tsdb 时序数据库中创建 ts_table 时序表并写入数据。

CREATE TABLE tsdb.ts_table (ts timestamp not null, temperature double) tags(num_id int not null) primary tags(tag1);

插入数据

操作语句如下:

insert INTO tsdb.ts_table VALUES(now(),26.6,107);

语句说明

now () 表示当前时间,类型为 timestamp, 对应 ts 列

26.6 表示温度,类型为 double,对应 temperature 列

107 为机房 id,类型为 107,对应 num_id 标签列

查看表的内容

select * FROM tsdb.ts_table;

输出如下:

ts temperature num_id

2020-04-23 21:44:33.411+00:00 26.6 107

以上提供了 KWDB 的安装与测试使用过程。

安装脚本分析

deploy.sh install --single 分析

下面针对按照过程中的 deploy.sh install --single 进行分析,该脚本一共 870 行,下面对安装过程进行分析

操作目的

执行 deploy.sh install --single 命令的主要目的是使用单节点模式安装 KaiwuDB 数据库。

执行流程

1. 脚本初始化

脚本启动后,首先会进行一些基础的全局变量初始化:

# basic golbal variablesg_deploy_path=$(cd $(dirname $0);pwd)
g_cur_usr=$(whoami)

func_info=""# define export varsdeclare -a global_varssource $g_deploy_path/utils/kaiwudb_common.shsource $g_deploy_path/utils/utils.shsource $g_deploy_path/utils/kaiwudb_log.shfunction global_usage() {
...
}

这部分代码解释如下:

g_deploy_path 对应当前目录

g_cur_usr 对应当前用户名

declare -a global_vars 声明一个名为 global_vars 的数组变量

source 命令会在当前 Shell 进程中读取并执行指定文件的内容。将指定路径下的三个脚本文件内容引入到当前的 deploy.sh 脚本中执行。关于这个是三个脚本的功能不进行拓展。

global_usage 函数用于输出一些提示信息

2. 命令行参数解析

在 350-351 行会调用 cmd_check 函数对输入的命令行参数 install --single 进行解析:

# 350-351行# cmd line parameter parsingcmd_check $@

在 cmd_check 函数(182-238 行)中,会使用 getopt 工具解析参数,识别出 install 命令,并调用 install_usage 函数处理 --single 选项:

# 182-238行function cmd_check() {    # ... 其他代码 ...
    case "$g_kw_cmd" in
        install)
            install_usage $options
        ;;        # ... 其他代码 ...
    esac}

调用的 install_usage 函数 33-65 行

# 33-65行function install_usage() {    eval set -- "$@"
    push_back "g_install_mode"
    if [ $# -eq 3 ];then
        case "$1" in
            --single)
                g_install_mode="single"
                return
                ;;            # ... 其他代码 ...
        esac
    fi}

这一步将安装模式设置为 single

3. 获取本地节点密码

继续执行,在 353-354 行,调用 local_privileged 函数获取本地节点的密码。

# 353-354行# fetch local node passwdlocal_privileged

local_privileged 函数的定义位于 kaiwudb_common.sh 的第 271-288 行

function local_privileged() {  if privileged;then
    local_cmd_prefix="sudo"
  else
    local_cmd_prefix="echo '$(read_passwd $g_cur_usr)' | sudo -S -p \"\""
    echo
    eval $local_cmd_prefix -k -s >/dev/null 2>&1    if [ $? -ne 0 ];then
      echo -e "\033[31m[ERROR]\033[0m Incorrect password." >&2      exit 1    fi
  fi
  eval $local_cmd_prefix bash -c "exit" >/dev/null 2>&1  if [ $? -ne 0 ];then
    echo -e "\033[31m[ERROR]\033[0m Can not use command: 'sudo bash'." >&2    exit 1  fi}

该函数中,检查用户是否由权限,如果由有权限执行 sudo,没有权限就需要输入密码

4. 初始化日志

接下来执行 log_init 函数,调用 log_init 函数初始化日志系统。

# init loglog_init $g_deploy_path $g_cur_usrpush_back "LOG_FILE"push_back "LOG_LEVEL"

log_init 函数位于 kaiwudb_log.sh 的 13-28 行

5. 安装前检查和准备

接下来执行 361-498 行的安装前检查和准备,如下

# 361-498行if [ "$g_kw_cmd" = "install" ];then
    # pipe
    kw_pipe=$g_deploy_path/kw_pipe    if [ ! -p $kw_pipe ]; then
        func_info=$(mkfifo $kw_pipe 2>&1)        if [ $? -ne 0 ];then
            log_err "Pipe create failed: $func_info."
            exit 1        fi
    fi
    exec 10<>$g_deploy_path/kw_pipe
    rm -rf $g_deploy_path/kw_pipe    source $g_deploy_path/utils/kaiwudb_install.sh    source $g_deploy_path/utils/kaiwudb_hardware.sh    source $g_deploy_path/utils/process_bar.sh
    process_bar $$ &
    process_pid=$!    echo "install#check:5" >&10    # whether installing KaiwuDB
    if $(install_check >/dev/null 2>&1);then
        log_err "KaiwuDB is already installed."
        exit 1    fi
    # ... 其他代码 ...

这部分代码创建了一个命名管道用于进度显示,引入了安装、硬件检查和进度条相关的脚本,启动进度条进程,并检查 KaiwuDB 是否已经安装。

6. 硬件检查

接下来执行 384-393 行

# 384-393行echo "hardware#check:10" >&10# hardware checkcpu_infoif [ $? -eq 1 ];then
    log_warn "The number of CPU cores does not meet the requirement. KaiwuDB may running failed."fimem_infoif [ $? -eq 2 ];then
    log_warn "The memory does not meet the requirement. KaiwuDB may running failed."fi

调用 cpu_info 和 mem_info 函数检查 CPU 和内存是否满足安装要求。kwdb 的要求是 8GB 和 4 核。但看脚本中应该是 6G 就可以,如果内存不够,可以尝试调整这个设置。

cpu_info 函数位于 kaiwudb_hardware.sh 脚本的 3-8 行,

#cpu coresfunction cpu_info() { 
  local cores=$(cat /proc/cpuinfo | grep "processor" | sort -u| wc -l )  if [ $cores -le 4 ];then    return 1
  fi
}

mem_info 函数位于 kaiwudb_hardware.sh 脚本的 10-17 行,

#memory info function mem_info() { 
  local mem=$(cat /proc/meminfo | grep MemTotal | grep -Eo "[0-9]+")  # if [ `echo "$mem/1024/1024 < 6" | bc` -eq 1 ];then
  if [ $(expr $mem / 1024 / 1024) -lt 6 ];then    return 1
  fi
}

7. 配置文件检查

接下来执行 394-397 行,调用 verify_files 函数验证文件,调用 cfg_check 函数检查配置文件的各项参数是否正确。

# 394-397行verify_filesecho "configure#file#check:15" >&10# parsing config filecfg_check

cfg_check 函数位于 deploy.sh 的 240-348 行。

8. SSH 免密检查

接下来执行 398-402 行,调用 parallel_exec 函数在集群节点上检查 SSH 免密登录。

# 398-402行echo "ssh-passwd-free#check:20" >&10
parallel_exec "${g_cls_array[*]}" $g_ssh_port $g_ssh_user "ssh_passwd_free"if [ $? -ne 0 ];then
    exit 1fi

9. 安装过程

接下来会进行一系列安装操作,包括创建目录、分发文件、安装包、创建配置文件和证书等,在 411-438 行:

# 411-438行# ... 其他代码 ...echo "create#node#dir:35" >&10
parallel_exec "${g_cls_array[*]}" $g_ssh_port $g_ssh_user "node_dir"echo "local#dir#init:45" >&10# local node init directoryfunc_info=$(init_directory)if [ $? -eq 2 ];then
    log_warn $func_infofiecho "node#dir#init:50" >&10# parallel init remote node directoryparallel_exec "${g_cls_array[*]}" $g_ssh_port $g_ssh_user "init_directory"echo "distribute#packages:55" >&10# distribute filesparallel_distribute "${g_cls_array[*]}" $g_ssh_port $g_ssh_user "$g_deploy_path/packages"if [ $? -ne 0 ];then
    rollback_all "${g_cls_array[*]}" $g_ssh_port $g_ssh_user
    exit 1fiecho "local#install:60" >&10#install packagesfunc_info=$(install $g_local_addr)if [ $? -ne 0 ];then
    log_err "Install failed: $func_info"
    rollback_all "${g_cls_array[*]}" $g_ssh_port $g_ssh_user
    exit 1else
    g_image_name=$func_infofi# ... 其他代码 ...

10. 安装完成提示

接下来执行 493-497 行,当前行意味着安装 complete:100

# 493-497行echo "install#complete:100" >&10waitexec 10>&-echo -e "\e[1;32m[INSTALL COMPLETED]:\e[0mKaiwuDB has been installed successfully! To start KaiwuDB, please execute the command '\e[1;34msystemctl daemon-reload\e[0m'."exit 0

当所有安装步骤完成后,会输出安装成功的提示信息,并退出脚本。

综上所述,deploy.sh install --single 命令会依次完成参数解析、环境检查、硬件检查、配置文件检查、SSH 免密检查、安装操作等步骤,最终完成 KaiwuDB 的单节点模式安装。


体验全新的分布式多模数据库解决方案

企业版 社区版

KaiwuDB 是浪潮控股的数据库企业,面向工业物联网、数字能源、车联网、智慧产业等行业领域,提供稳定安全、高性能、易运维的创新数据软件与服务。

关注官方微信

友情链接:浪潮  

© 上海沄熹科技有限公司 Shanghai Yunxi Technology Co., Ltd.    沪ICP备2023002175号-1    网站服务协议   |   隐私政策
400-624-5688-7
服务与支持
marketing@kaiwudb.org.cn