关注

基于 Docker 快速部署 KingbaseES 数据库:从环境准备到命令行交互

最近在项目里需要用到 KingbaseES 数据库,尝试了用 Docker 来部署,发现这种方式比传统安装省了不少事。整个过程不算复杂,但有些细节不注意容易踩坑。这篇文章就把我实际操作的步骤和遇到的问题整理出来,希望能给同样需要部署 KingbaseES 的朋友做个参考。
在这里插入图片描述

一、先把环境准备到位

部署前得确保软硬件都符合要求,不然后面容易出各种奇怪的问题。我当时就是一开始没注意 Docker 版本,导致镜像导入时总报错,耽误了不少时间。

硬件方面不用太纠结

KingbaseES 的 Docker 镜像兼容性还不错,我测试过 X86_64 架构的服务器,运行很稳定。后来在公司的鲲鹏服务器上也试了下,同样能正常启动。据说龙芯、飞腾这些国产 CPU 也支持,不过我没实际用过,有相关需求的可以自己测试下。

软件环境得盯紧版本

Docker 是必须的,而且版本不能太低,官方要求是 20.10.0 及以上。我之前服务器上的 Docker 还是 19.x 版本,结果导入镜像时一直提示错误,升级到 20.10.12 版本后就好了。检查 Docker 版本的命令很简单:

docker --version

如果版本不够,需要先升级。不同 Linux 发行版的升级命令不一样,比如 CentOS 可以用 yum,Ubuntu 用 apt-get,按自己的系统来操作就行。

二、创建数据存储目录

数据库这东西,数据是核心,可不能随便丢了。用 Docker 部署的话,最好把数据挂载到宿主机上,这样就算容器坏了,数据还在。我是这么做的:

先用 root 用户创建目录,毕竟数据库文件权限要求比较严格:

mkdir -p /opt/kingbase/data

这里为什么要建两级目录呢?其实/opt/kingbase可以放一些和 KingbaseES 相关的其他文件,比如镜像包,data子目录专门存数据库数据,这样显得整齐些。

然后一定要改权限:

chmod -R 755 /opt/kingbase/data

我一开始没改权限,启动容器后发现数据库日志里全是权限错误,折腾了半天才找到原因。改完权限后,容器里的进程才能正常读写数据目录。

改完可以用ls -ld命令检查一下:

ls -ld /opt/kingbase /opt/kingbase/data

看到权限是drwxr-xr-x就对了。

三、导入 KingbaseES 镜像

镜像这东西,得从官方渠道弄,我是联系电科金仓的技术支持拿到的,文件名大概是kingbase.tar。拿到后先传到服务器上,我习惯放在/opt/kingbase目录下,好找。

然后用 docker load 命令导入:

docker load -i /opt/kingbase/kingbase.tar

导入的时候会显示各个层的加载进度,耐心等一会儿。我那时候服务器网速一般,一个几百兆的镜像导了好几分钟。

导完了别忘检查一下是不是成功了:

docker images | grep kingbase

如果能看到类似kingbase:v1这样的记录,就说明导入成功了。要是没看到,可能是导入过程出错了,这时候可以试试用 docker import 命令:

docker import /opt/kingbase/kingbase.tar kingbase:v1

我有次就是用 load 命令不行,换了 import 就成功了,具体原因没深究,可能和镜像的打包方式有关。

四、启动容器实例

启动容器有两种方式,看你是测试用还是正式用了。

临时测试用的启动方式

如果只是想临时测试一下,数据丢了也没关系,可以用这种方式:

docker run -tid --privileged \
-p 54321:54321 \
--name kingbase  \
kingbase:v1 /usr/sbin/init

这里面几个参数得说一下:

--privileged给了容器特权模式,KingbaseES 运行的时候需要一些特殊权限,不加这个参数可能启动不了。

-p 54321:54321是把容器的 54321 端口映射到宿主机,KingbaseES 默认用这个端口,映射后外部才能访问数据库。

--name kingbase给容器起了个名字,后面操作容器的时候直接用这个名字就行,不用记长长的容器 ID。

最后那个/usr/sbin/init是容器启动后执行的命令,用来初始化系统环境。

执行完这个命令,会返回一个容器 ID,说明启动成功了。

正式环境用的持久化启动

正式用的话,必须得保证数据不丢,所以要把数据目录挂载到宿主机:

docker run -tid --privileged \
-p 54321:54321 \
--name kingbase  \
–v /opt/kingbase/data:/home/kingbase/userdata \
kingbase:v1 /usr/sbin/init

比临时启动多了-v /opt/kingbase/data:/home/kingbase/userdata这一行,意思是把宿主机的/opt/kingbase/data目录和容器里的/home/kingbase/userdata目录关联起来,数据库的数据就会存在宿主机的这个目录里了。

我在生产环境就是用的这种方式,后来有一次不小心把容器删了,重新启动一个新容器,还是挂载这个目录,数据一点没丢,特别方便。

五、验证部署是否成功

启动完容器,不能就这么不管了,得确认一下数据库是不是真的能用了。

首先看看容器是不是在运行:

docker ps | grep kingbase

如果 STATUS 那一列显示 “Up”,后面跟着运行时间,就说明容器没问题。要是没看到,可能是容器启动失败了,可以用docker logs kingbase看看日志,找找原因。

接下来进入容器内部:

docker exec -it kingbase /bin/bash

这个命令能让我们进入容器的命令行界面,-it参数是为了能交互,/bin/bash是启动 bash shell。

进入容器后,就可以用 KingbaseES 的客户端工具 ksql 连接数据库了:

ksql -U kingbase -d test

-U kingbase是指定用户名,默认就是 kingbase,-d test是连接 test 数据库,这也是默认存在的数据库。

如果连接成功,会出现test=#这样的提示符,这时候就可以执行 SQL 命令了。比如查一下数据库版本:

test=# SELECT version();

执行后会显示 KingbaseES 的版本信息,说明数据库确实在正常运行。

一些实用的小技巧

  1. 要是想停止容器,用docker stop kingbase;想重新启动,用docker start kingbase

  2. 要是容器出了问题,想删掉重新建一个,先docker stop kingbase,再docker rm kingbase,然后重新执行启动命令就行,记得持久化启动的话数据还在。

  3. 外部程序连接数据库的时候,用宿主机的 IP 地址,端口 54321,用户名 kingbase,默认没有密码,正式环境一定要记得设置密码。

总结

用 Docker 部署 KingbaseES 确实比传统的源码安装或者 rpm 包安装简单多了,尤其是在多环境部署的时候,能保证环境一致性,减少很多麻烦。整个过程主要就是准备环境、创建目录、导入镜像、启动容器、验证这几步,只要注意权限和数据持久化这两个关键点,一般都能顺利完成。

我这也是第一次部署,中间踩了几个小坑,不过解决了之后觉得也不难。希望这篇文章能帮到那些刚开始接触 KingbaseES 和 Docker 的朋友,少走点弯路。如果大家在部署过程中遇到其他问题,也欢迎一起交流。

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/g310773517/article/details/150619350

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--