暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

【YashanDB个人版体验】Docker镜像制作

原创 叶季安 2023-11-30
609

作为一名DevOps人员,我日常会和多种数据库、各个数据库的各种版本打交道。为了应对繁杂的数据库版本和复杂的部署环境,Docker成为我日常工作中不可缺少的一份工具,它在环境管理、版本管理、快速部署等各方面具备独一无二的优势。

YashanDB个人版发布后我也很好奇地尝试了一下,但很遗憾的是官方本次并没有放出官方Docker,所以我制作了一个简单的YashanDB个人版Docker版本,在这里记录与分享。

一、基础镜像的选择

根据官网的指导,服务器的最小配置是Centos 7.6,CPU支持x86和ARM两种,本次我选择的机器是X86的机器,基础镜像选择centos:7.9.2009

F.png

二、安装包分析

准备好基础编译,先把拿到的YashanDB个人版的包上传到服务器上,解压看看里面的结构

[root@localhost install]# ls -l total 171312 drwxrwxr-x. 6 yashan yashan 70 Nov 9 18:16 admin drwxrwxr-x. 2 yashan yashan 188 Nov 9 18:16 bin drwxrwxr-x. 2 yashan yashan 152 Nov 9 18:16 conf drwxrwxr-x. 5 yashan yashan 60 Nov 9 18:16 ext -rw-rw-r--. 1 yashan yashan 11632 Nov 9 18:16 gitmoduleversion.dat drwxrwxr-x. 2 yashan yashan 65 Nov 9 18:16 include drwxrwxr-x. 3 yashan yashan 17 Nov 9 18:16 java drwxrwxr-x. 2 yashan yashan 4096 Nov 9 18:16 lib -rw-r-----. 1 yashan yashan 14989 Nov 9 18:16 LICENSE drwxrwxr-x. 3 yashan yashan 21 Nov 9 18:16 plug-in drwxrwxr-x. 2 yashan yashan 170 Nov 9 18:16 scripts -rw-r--r--. 1 root root 175386922 Nov 29 14:14 yashandb-personal-23.1.1.100-linux-x86\_64.tar.gz

可以看见这个包里有些对于制作镜像比较重要的东西,比如bin下面是一些工具,还有个scripts文件夹,里面藏了一些看起来像是安装脚本的东西。

[root@localhost scripts]# pwd /root/docker-build/yashan/install/scripts [root@localhost scripts]# ls -l total 32 -rwxrwxr-x. 1 yashan yashan 3296 Nov 9 18:16 createResourceCgroup.sh -rwxrwxr-x. 1 yashan yashan 2934 Nov 9 18:16 initDB.sh -rwxrwxr-x. 1 yashan yashan 2104 Nov 9 18:16 initStandby.sh -rw-rw-r--. 1 yashan yashan 411 Nov 9 18:16 install.ini -rwxrwxr-x. 1 yashan yashan 1412 Nov 9 18:16 install.sh -rwxrwxr-x. 1 yashan yashan 1157 Nov 9 18:16 startup.sh -rwxrwxr-x. 1 yashan yashan 1157 Nov 9 18:16 stop.sh -rwxrwxr-x. 1 yashan yashan 667 Nov 9 18:16 yascheckStart.sh

三、yasboot安装方法制作镜像(失败)

大概看了下包里的东西,接着就该准备着手制作镜像了,先打开官网看下安装部署的文档。

先跟着官方提供的23.1版本的安装手册,简单写一个Dockerfile试试看

[8/8] RUN cd install && ./bin/yasboot package se gen --cluster yashandb -u yashan -p 123456 --ip 127.0.0.1 --port 22 --install-path /home/yashan/yasdb_home --data-path /home/yashan/yasdb_data --begin-port 1688 && ./bin/yasboot package install -t hosts.toml -i yashandb-personal-23.1.1.100-linux-x86_64.tar.gz && ./bin/yasboot cluster deploy -t yashandb.toml: 0.286 127.0.0.1 0.286 ip:127.0.0.1 scan failed, 主机扫描失败:dial tcp 127.0.0.1:22: connect: connection refused 0.286 hostid | group | node_type | node_name | listen_addr | replication_addr | data_path 0.286 -------------------------------------------------------------------------------------------------------- 0.286 host0001 | dbg1 | db | 1-1 | 127.0.0.1:1688 | 127.0.0.1:1689 | /home/yashan/yasdb_data 0.286 ----------+-------+-----------+-----------+----------------+------------------+------------------------- 0.287 0.287 Generate config success 0.303 127.0.0.1 0.303 ip:127.0.0.1 scan failed, 主机扫描失败:dial tcp 127.0.0.1:22: connect: connection refused 0.303 config check failed

果不其然报错了,仔细研究下这个报错。

YashanDB使用yasboot进行安装时,需要使用到主机的ssh能力,访问指定ip的22端口,并使用给出的服务器用户名、密码进行登录。

但是Centos的镜像本身是不带ssh能力的,如果需要在镜像中使用ssh,需要额外进行ssh服务的配置,并在容器运行时开发端口才行。

并且此处官方文档也提到,需要将yasboot命令的--ip参数后面的值更换成安装服务端主机所在IP地址,但是docker中的ip地址是自动分配的,未来docker的时候也需要它能够自动适应各种ip地址,不能将ip固定死。

这可糟了,难道没有办法进行镜像制作了吗?

还记得上一节看到的那个疑似包含着各种安装脚本的scripts文件夹吗?23.1版本的安装文档并没有一处书写到这些脚本是在什么时候使用的,在镜像制作的时候,可以直接借用脚本吗?

四、藏在历史版本里的脚本安装方式

打开官网,在文档中找一下这个文件夹有没有在哪里使用过,很有意思的是会发现官方在22.2版本曾经提供过一个名为脚本安装的安装部署方法,不过在23.1版本内没有提到,不过死马当活马医,只要安装包里还有那些脚本,咱就先跑起来试试看!

E.png

五、Dockerfile编写

主要的流程是根据22.2的脚本安装步骤

关于instanll.ini里的参数,我制作镜像时并没有进行调整,均采用默认配置。

FROM centos:7.9.2009 #基础镜像 centos:7.9.2009 MAINTAINER "JulieGarfield" RUN useradd -m -s /bin/bash yashan RUN echo 'yashan:123456' | chpasswd #创建Yashan用户 USER yashan WORKDIR /home/yashan #设置yashan用户为登入容器的默认用户,且后续动作使用yashan用户进行操作 #不过这里亲测直接用root用户也可以正常安装和使用数据库,操作用户的这四行实质上不是必须的 RUN mkdir install ADD yashandb-personal-23.1.1.100-linux-x86\_64.tar.gz install #上传安装包 RUN cd install/scripts && ./install.sh && ./initDB.sh #根据官方文档进行数据库的安装和初始化工作。 #此处install.ini的参数均保持默认,如果要调整参数,需要在这一步之前调整好,可以提前编写好一份install.ini载入进来或者在Dockerfile里编写替换命令 RUN source ~/.bashrc && cd yashandb/yasdb\_data/instance && mv yasdb.pwd yasdb.pwd.bak && echo "yasdb\_123" | yaspwd file=yasdb.pwd #修改密码,因为需要使用yaspwd这个工具,所以需要载入环境变量,如果需要自定义密码,记得在这里编辑修改

到这里镜像已经基本完成了,根据官网的引导,此时应该能连接上数据库,所以先完成镜像的制作,拉起容器试试看。

但是实际上,这里镜像拉起来后无法正常进入数据库,一查发现并没有任何的yashan进程,那么合理怀疑是镜像制作后数据库实例需要手动启动。

也就是说需要补充一个数据库实例的启动命令作为镜像的入口命令。

继续官网查资料,可以看到官网在数据库22.2版本和23.1版本提供了两个实例启停的操作指导。

D.png

其中23.1版本是使用yasboot进行实例启停,但本次制作镜像并没有使用任何和yasboot相关的东西,所以主要参考的是22.2版本中的实例启停方法,即使用yasdb open这个命令来启动实例。

在刚刚Dockerfile的最后添加一个CMD source ~/.bashrc && yasdb open,完成镜像Dockerfile,重新制作镜像。

这里需要source的原因也是因为yasdb这个命令需要依赖yashan相关的环境变量,否则启动容器时会报错。

六、启动容器并使用

C.png

这里需要注意的是看到docker logs中有明确的实例启动字样,就说明数据库实例已经正常拉起,可以使用了,现在进入容器看一下。

B.png

可以看到实例状态是open,说明YashanDB已经正常运行。

也可以使用官方提供的DBeaver连接到容器中的数据库进行操作:

A.png

需要注意的是我在启动容器时,把1688端口映射到了主机上的1692端口,所以这里DBeaver要从主机的1692端口去连接数据库。可以看到测试连接成功,数据库版本为23.1.1.100。

七、小结

到这里,YashanDB个人版的镜像制作就完成了,有需要的同学可以根据上面的流程自己制作一次yashanDB的镜像,想必可以对yashanDB有更深的了解。

不过本次有一个遗留下来的问题,那就是在镜像制作过程中使用yasboot安装数据库。23.1版本文档中没有展示脚本部署的方式,而是以yasboot安装方法为主要推荐的安装方式,暂不清楚YashanDB官方做出这种调整是否是因为脚本安装会出现某些问题(虽然我目前使用起来并没有发现和yasboot安装的数据库有什么区别),有兴趣的小伙伴也可以一起来探索。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论