最近尝试在自己的 MacBook Pro M1芯片的笔记本上通过虚机安装 MogDB,光是装操作系统和依赖包就费了一番周折,在此做个记录备忘。
到底装哪个操作系统?
首先在 MacBook 上装好了 Parallels Desktop 19 for Mac,然后根据 PTK 兼容的操作系统列表,选择了 CentOS 8 (arm64),我用的是8.0.1905版本的ISO镜像。然而,在PD中安装 CentOS 8 失败了!
考虑到 MogDB 官网上提供的下载介质中也没有 CentOS 8或者7的ARM版本,而是有银河麒麟的ARM版,就索性又找了 Kylin V10的ISO镜像。然而,在PD中安装又失败了!
怎么失败的?就是在如下这个开始安装的界面,回车后没有反应——光标闪几秒又返回这个界面,根本无法开始安装!我甚至改用了 VMware 来安装 CentOS 和 Kylin,同样是卡在开始安装界面没有反应。
起初我是崩溃的,“难道还没开始就要结束了吗?”经过在CSDN上的不断搜索(网上关于 MacBook 上用虚机装 Linux 再装数据库的内容着实不多),终于找到一位大神给出了原因:“问题根源在于pagesize的支持,Macbook M1上面的pagesize是16K,而centos的默认内核是使用的64K的pagesize,当然就不支持了,并且ubuntu,fedora都是4K的所以不存在问题。” 同时这位大神还将pagesize改成了4K、重新编译了内核、打包了新的 CentOS 8镜像提供下载,只不过是8.4.2105的版本。抱着试试看的心态,我下载了这版镜像并在PD中安装,成功了!
关于 MacBook M1上ARM64架构的pagesize问题,后来Kamus也帮我找到了一些出处,包括PD的论坛里也找到了相应的讨论。
别高兴得太早,新的问题接踵而至!
CentOS 是安装好了,但是 Python3 安不上,各种依赖包安不上,用 ptk checkos -f config.yaml 找出的各种abnormal用fix脚本也修复不了。从报错来看,似乎是无法链接到相应的网址,下载不到相关的包。我不清楚这是网络连接的问题还是 CentOS 本身的问题,感觉重新被编译的这版 CentOS 也可能存在一些未知的问题或风险吧,总之安装 MogDB 还是没成!
好吧,既然连“定制版”的CentOS都不行,那就装PD自带的Ubuntu吧,默认安装,一键完成,Ubuntu 22.04.2 ARM64顺利装好!
使用 PTK 安装 MogDB
接下来的操作相对顺利一些,按照姜殿斌老师的《MogDB 数据库实战入门》视频课程一步步操作,完成了修改/etc/hosts、安装Python3、安装PTK等,并在预安装检查中对几个abnormal项执行修复。需要注意的一点是:Ubuntu 在操作指令上跟 CentOS 有一些差异,熟悉这两种操作系统的老手自不必多说,新手要关注一下。比如:
- 安装 Python 时,CentOS 中的
yum install -y python3 python3-devel
,在 Ubuntu 中是apt install -y python3 python3-dev
当然在执行这步前先执行apt update
,你会发现系统更新了不少东西。 - 安装 PTK 后,CentOS 中的
source /root/.bash_profile
,在 Ubuntu 中是source /root/.bashrc
。 - 在编辑 vi config.yaml 文件和执行预安装检查 ptk checkos -f config.yaml 前,记得安装一下完整版本的 vim 和防火墙 ufw(不知道为啥 Ubuntu 默认没有)
apt install vim
和install ufw
。
PTK (Provisioning Toolkit)是使用 Golang 针对 MogDB 数据库开发的一款命令行运维工具,旨在帮助用户更便捷地部署和管理 MogDB 数据库集群。
执行预安装检查后,会发现有几个abnormal项,可以通过 ptk checkos -i ITEM --detail
去了解详细信息,但我并没有用 sh root_fix_os.0723.141026.sh
指令去修复,因为 sh
的用法在 CentOS 和 Ubuntu 中也是不同的。在 Ubuntu 中,sh
通常是一个符号链接,指向dash
,而不是bash
。dash
是一个轻量级的POSIX兼容的shell,启动速度比bash
更快,但功能较少。于是,我使用 cat root_fix_os.0723.141026.sh
指令查看脚本内容,然后根据具体信息手动进行修复。reboot
后,再次执行预安装检查,一个abnormal项都没有了,good!
接下来,就是正式利用 PTK 在线安装 MogDB 了,这里直接把log放出:
root@node1:~# ptk install -f config.yaml
INFO[2024-07-23T18:39:02.234] PTK Version: 1.6.1 release
INFO[2024-07-23T18:39:02.234] load config from config.yaml
If you continue to install the software,
you are accepting the license agreement of the software.
[Y]: Accept and continue
[C]: Show content of licence agreement
[N]: Abort installation and exit
✔ Please enter (default: Y): y
Cluster Name: "SOHO2"
+--------------+---------------+-------------+-------+---------+-----------------+----------+
| az(priority) | ip | user(group) | port | role | data dir | upstream |
+--------------+---------------+-------------+-------+---------+-----------------+----------+
| AZ1(1) | 172.17.50.185 | omm(omm) | 26000 | primary | /opt/mogdb/data | - |
+--------------+---------------+-------------+-------+---------+-----------------+----------+
✔ Is cluster config correct (default=n) [y/n]: y
INFO[2024-07-23T18:39:12.846] start check hostname ...
INFO[2024-07-23T18:39:12.857] check hostname success
INFO[2024-07-23T18:39:12.857] start check os ...
INFO[2024-07-23T18:39:12.858] prechecking dependent tools...
INFO[2024-07-23T18:39:12.910] [172.17.50.185][omm] platform: ubuntu_22.04_64bit
WARN[2024-07-23T18:39:12.919] [172.17.50.185][omm] not found network conf file for enp0s5 in dir /etc/network, skip check bonding
WARN[2024-07-23T18:39:12.921] [172.17.50.185][omm] not found ethtool, skip check net card RX/TX value
INFO[2024-07-23T18:39:13.043] [172.17.50.185][omm] timezone: +0800
WARN[2024-07-23T18:39:13.049] [172.17.50.185][omm] net.ipv4.tcp_tw_reuse=2, expect 1
WARN[2024-07-23T18:39:13.061] [172.17.50.185][omm] net.core.somaxconn=4096, expect 65535
WARN[2024-07-23T18:39:13.075] [172.17.50.185][omm] net.ipv4.tcp_retries1=3, expect 5
WARN[2024-07-23T18:39:13.077] [172.17.50.185][omm] net.ipv4.tcp_max_syn_backlog=512, expect 65535
WARN[2024-07-23T18:39:13.082] [172.17.50.185][omm] net.ipv4.tcp_keepalive_time=7200, expect 30
WARN[2024-07-23T18:39:13.086] [172.17.50.185][omm] net.ipv4.tcp_rmem=4096 131072 6291456, expect 8192 250000 16777216
WARN[2024-07-23T18:39:13.095] [172.17.50.185][omm] net.ipv4.tcp_wmem=4096 16384 4194304, expect 8192 250000 16777216
WARN[2024-07-23T18:39:13.103] [172.17.50.185][omm] net.ipv4.tcp_retries2=15, expect 12
WARN[2024-07-23T18:39:13.105] [172.17.50.185][omm] net.ipv4.tcp_syn_retries=6, expect 5
WARN[2024-07-23T18:39:13.112] [172.17.50.185][omm] vm.min_free_kbytes=45056, expect 405979
WARN[2024-07-23T18:39:13.114] [172.17.50.185][omm] net.ipv4.tcp_keepalive_intvl=75, expect 30
WARN[2024-07-23T18:39:13.120] [172.17.50.185][omm] net.core.netdev_max_backlog=1000, expect 65535
INFO[2024-07-23T18:39:13.122] [172.17.50.185][omm] check kernel.core_pattern
INFO[2024-07-23T18:39:13.127] [172.17.50.185][omm] check RemoveIPC value
INFO[2024-07-23T18:39:13.131] [172.17.50.185][omm] check KillUserProcesses value
WARN[2024-07-23T18:39:13.147] [172.17.50.185][omm] device(sda) 'IO Request'=64, expect 256
INFO[2024-07-23T18:39:13.154] [172.17.50.185][omm] check port 26000
INFO[2024-07-23T18:39:13.159] [172.17.50.185][omm] port 26000 is free
INFO[2024-07-23T18:39:13.165] [172.17.50.185][omm] locale: LANG=en_US.UTF-8
INFO[2024-07-23T18:39:13.169] [172.17.50.185][omm] swap memory 2097148kB, total memory 8119596kB
WARN[2024-07-23T18:39:13.179] [172.17.50.185][omm] device(/dev/sda) readahead value=256, expect 16384.
INFO[2024-07-23T18:39:13.222] [172.17.50.185][omm] kernel version: 5.15.0-76-generic
INFO[2024-07-23T18:39:13.222] all checkers finished
INFO[2024-07-23T18:39:13.222] time elapsed: 0s
INFO[2024-07-23T18:39:13.222] check os success
INFO[2024-07-23T18:39:13.222] start check distro ...
INFO[2024-07-23T18:39:13.222] check distro success
INFO[2024-07-23T18:39:13.222] start check user ...
INFO[2024-07-23T18:39:13.225] check user success
INFO[2024-07-23T18:39:13.225] start check port ...
INFO[2024-07-23T18:39:13.225] checking port 26000 on host 172.17.50.185 (db listen port) ...
INFO[2024-07-23T18:39:13.230] checking port 26001 on host 172.17.50.185 (db HA port) ...
INFO[2024-07-23T18:39:13.235] check port success
INFO[2024-07-23T18:39:13.238] [172.17.50.185][omm] create os user omm, group omm
INFO[2024-07-23T18:39:13.271] [172.17.50.185][omm] set ulimit configs
INFO[2024-07-23T18:39:13.274] start prepare installation package ...
INFO[2024-07-23T18:39:13.274] no package specified, use online package: https://cdn-mogdb.enmotech.com/mogdb-media/5.0.7/Kylin_arm64/MogDB-5.0.7-Kylin-arm64-all.tar.gz
INFO[2024-07-23T18:39:13.274] downloading MogDB-5.0.7-Kylin-arm64-all.tar.gz ...
INFO[2024-07-23T18:39:24.728] download successfully
INFO[2024-07-23T18:39:24.728] installation package is ready
INFO[2024-07-23T18:39:24.728] parse installation package ...
INFO[2024-07-23T18:39:29.127] start validate installation package md5...
INFO[2024-07-23T18:39:29.347] validate installation package md5 success
INFO[2024-07-23T18:39:29.347] db product: MogDB, version: 5.0.7, number: 92.924, commit_id: c4707384
INFO[2024-07-23T18:39:29.764] extract MogDB-5.0.7-Kylin-64bit.tar.gz to dir /tmp/ptk_tmp_825952357
INFO[2024-07-23T18:39:31.669] execute command: mogdb --version
INFO[2024-07-23T18:39:31.758] parse installation package success
INFO[2024-07-23T18:39:31.758] start complete the configuration ...
✔ Please enter db password (8~15 characters, 3 classes): *********█
✔ Retype db password: *********
INFO[2024-07-23T18:55:29.909] complete the configuration success
INFO[2024-07-23T18:55:29.910] save the topology to metadata
INFO[2024-07-23T18:55:29.913] start distribute installation package ...
INFO[2024-07-23T18:55:30.090] distrubite packages success
INFO[2024-07-23T18:55:30.090] start install logic nodes ...
INFO[2024-07-23T18:55:30.090] deploy db to omm@172.17.50.185
INFO[2024-07-23T18:55:30.090] [172.17.50.185][omm] make user omm's dir(s): /opt/mogdb
INFO[2024-07-23T18:55:30.151] [172.17.50.185][omm] clean user omm's ipc resource
INFO[2024-07-23T18:55:30.374] [172.17.50.185][omm] make user omm's dir(s): /opt/mogdb/tool,/opt/mogdb/tool/ptk_tool/bin
INFO[2024-07-23T18:55:30.438] [172.17.50.185][omm] extract MogDB-5.0.7-Kylin-arm64-all.tar.gz to dir /opt/mogdb/tool
INFO[2024-07-23T18:55:31.327] [172.17.50.185][omm] extract MogDB-5.0.7-Kylin-64bit-om.tar.gz to dir /opt/mogdb/tool
INFO[2024-07-23T18:55:31.546] [172.17.50.185][omm] try to fix psutil python lib
WARN[2024-07-23T18:55:31.557] [172.17.50.185][omm] Not found python3.6 or 3.7, skip fix psutil dynamic lib,
please install proper python and fix it manually or reinstall by ptk
if you don't fix this, it will cause that gs_om and cm_ctl cannot run properly, but not ptk and database
INFO[2024-07-23T18:55:31.557] [172.17.50.185][omm] write file /opt/mogdb/tool/script/py_pstree.py
INFO[2024-07-23T18:55:31.566] [172.17.50.185][omm] write file /opt/mogdb/tool/ptk_tool/bin/README.md
INFO[2024-07-23T18:55:31.578] [172.17.50.185][omm] write file /opt/mogdb/tool/ptk_tool/bin/pscp
INFO[2024-07-23T18:55:31.591] [172.17.50.185][omm] write file /opt/mogdb/tool/ptk_tool/bin/pssh
INFO[2024-07-23T18:55:31.602] [172.17.50.185][omm] write file /opt/mogdb/tool/ptk_tool/bin/task_pool.py
INFO[2024-07-23T18:55:31.615] [172.17.50.185][omm] make user omm's dir(s): /opt/mogdb/app
INFO[2024-07-23T18:55:31.628] [172.17.50.185][omm] extract MogDB-5.0.7-Kylin-64bit.tar.gz to dir /opt/mogdb/app
INFO[2024-07-23T18:55:33.548] [172.17.50.185][omm] change mode of /opt/mogdb/app to 700
INFO[2024-07-23T18:55:33.557] [172.17.50.185][omm] make user omm's dir(s): /opt/mogdb/app/share/postgresql
INFO[2024-07-23T18:55:33.572] [172.17.50.185][omm] copy /opt/mogdb/tool/script/gspylib/etc/sql/pmk_schema.sql to /opt/mogdb/app/share/postgresql
INFO[2024-07-23T18:55:33.577] [172.17.50.185][omm] copy /opt/mogdb/tool/script/gspylib/etc/sql/pmk_schema_single_inst.sql to /opt/mogdb/app/share/postgresql
INFO[2024-07-23T18:55:33.582] [172.17.50.185][omm] write file /opt/mogdb/app/bin/transfer.py
INFO[2024-07-23T18:55:33.590] [172.17.50.185][omm] set user omm profiles
INFO[2024-07-23T18:55:33.691] [172.17.50.185][omm] validate and try to fix ld library for gs_initdb
INFO[2024-07-23T18:55:33.700] [172.17.50.185][omm] validate and try to fix ld library for mogdb
INFO[2024-07-23T18:55:33.709] [172.17.50.185][omm] make user omm's dir(s): /opt/mogdb/log/gs_profile,/opt/mogdb/log/pg_log,/opt/mogdb/log/pg_audit,/opt/mogdb/log/bin,/opt/mogdb/log/pg_log/dn_6001,/opt/mogdb/log/pg_audit/dn_6001
INFO[2024-07-23T18:55:33.799] [172.17.50.185][omm] make user omm's dir(s): /opt/mogdb/tmp
INFO[2024-07-23T18:55:33.809] [172.17.50.185][omm] save version to upgrade_version
INFO[2024-07-23T18:55:33.829] [172.17.50.185][omm] create file cluster_manual_start
INFO[2024-07-23T18:55:33.834] [172.17.50.185][omm] generate cluster_static_config file
INFO[2024-07-23T18:55:33.843] [172.17.50.185][omm] make user omm's dir(s): /opt/mogdb/data
INFO[2024-07-23T18:55:33.854] [172.17.50.185][omm] write file /opt/mogdb/tool/.ptk_deployer
INFO[2024-07-23T18:55:33.863] generate certification files
INFO[2024-07-23T18:55:34.464] download certification files
INFO[2024-07-23T18:55:34.542] certification files setup success
INFO[2024-07-23T18:55:34.542] initialize db on omm@172.17.50.185
INFO[2024-07-23T18:55:34.547] [172.17.50.185][omm] the database is initializing, please wait a few minutes
INFO[2024-07-23T18:55:44.083] [172.17.50.185][omm] config postgresql.conf
INFO[2024-07-23T18:55:44.115] [172.17.50.185][omm] config pg_hba.conf
INFO[2024-07-23T18:55:44.125] [172.17.50.185][omm] copy ssl files to data dir
INFO[2024-07-23T18:55:44.137] logic nodes installed success
INFO[2024-07-23T18:55:44.137] generating ptkc ...
INFO[2024-07-23T18:55:44.211] start build ssh trust ...
INFO[2024-07-23T18:55:44.273] ssh trust build success
INFO[2024-07-23T18:55:44.273] start launch db ...
INFO[2024-07-23T18:55:44.273] [172.17.50.185][omm] start db using gs_ctl ...
INFO[2024-07-23T18:55:44.273] [172.17.50.185][omm] the database is starting, please wait a few minutes
ERRO[2024-07-23T18:55:45.309] 172.17.50.185: gs_ctl: Process exited with status 1
INFO[2024-07-23T18:55:45.310] clear temp dirs ...
INFO[2024-07-23T18:55:45.338] clear temp dirs success
INFO[2024-07-23T18:55:45.339] time elapsed: 16m39s
cluste_name | host | user | port | status | message
--------------+---------------+------+-------+--------------+---------------------------------------
SOHO2 | 172.17.50.185 | omm | 26000 | start_failed | gs_ctl: Process exited with status 1
复制
又失败了!
是的,诚如上面的log,丝滑的安装过程在最后以 gs_ctl: Process exited with status 1 宣告失败!实际上 MogDB 已经安装成功了,这里是启动失败了。我离首次独立安装成功 MogDB 只差一步!
当然,细心的朋友还会发现,上面的log中有一处警告:
WARN[2024-07-23T18:55:31.557] [172.17.50.185][omm] Not found python3.6 or 3.7, skip fix psutil dynamic lib, please install proper python and fix it manually or reinstall by ptk if you don't fix this, it will cause that gs_om and cm_ctl cannot run properly, but not ptk and database
事实上,前面通过 apt install -y python3 python3-dev
自动安装了最新版的 Python 3.10.12,这直接导致了无法使用 gs_om 工具。后续还得找个 python 3.6或3.7的版本离线安装一下,看看能不能解决这个问题。
omm@node1:/opt/mogdb/data$ gs_om -t status
Failed to execute cmd: rm -rf '/opt/mogdb/tool/script/gspylib/common/./../../../lib/psutil/_psutil_linux.so' && cp -r '/opt/mogdb/tool/script/gspylib/common/./../../../lib/psutil/_psutil_linux.so_3.10' '/opt/mogdb/tool/script/gspylib/common/./../../../lib/psutil/_psutil_linux.so' && rm -rf '/opt/mogdb/tool/script/gspylib/common/./../../../lib/psutil/_psutil_posix.so' && cp -r '/opt/mogdb/tool/script/gspylib/common/./../../../lib/psutil/_psutil_posix.so_3.10' '/opt/mogdb/tool/script/gspylib/common/./../../../lib/psutil/_psutil_posix.so' . Error:
cp: cannot stat '/opt/mogdb/tool/script/gspylib/common/./../../../lib/psutil/_psutil_linux.so_3.10': No such file or directory
复制
解决问题,MogDB server started
通过执行 gs_ctl start
(如下图所示),可以发现"/opt/mogdb/data/postgresql.conf"文件包含错误。
2024-07-24 11:03:40.893 [unknown] [unknown] localhost 70369803178016 0[0:0#0] 0 [GUC] LOG: invalid value for parameter "lc_messages": "en_US.UTF-8"
2024-07-24 11:03:40.893 [unknown] [unknown] localhost 70369803178016 0[0:0#0] 0 [GUC] LOG: invalid value for parameter "lc_monetary": "en_US.UTF-8"
2024-07-24 11:03:40.893 [unknown] [unknown] localhost 70369803178016 0[0:0#0] 0 [GUC] LOG: invalid value for parameter "lc_numeric": "en_US.UTF-8"
2024-07-24 11:03:40.893 [unknown] [unknown] localhost 70369803178016 0[0:0#0] 0 [GUC] LOG: invalid value for parameter "lc_time": "en_US.UTF-8"
我通过 vi
编辑该文件,把提示错误的这四行全部注释掉。再次执行 gs_ctl start
,嘿!server started!
赶紧 gsql 一下,没问题!至少目前暂时没发现问题,前面有一些警告提示,搞不懂啥意思先不管了。对于我这个小白来讲,从头安装 MogDB 至此,可以把数据库启起来,能“玩儿”了,已经很知足!
----------------------------------------------------------------------
补充:解决方案
在Kamus大佬的指导下,完美解决了前面提到的"/opt/mogdb/data/postgresql.conf"文件包含错误这一问题!
先执行 locale
看一下:
root@node1:~# locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=
复制
再执行 locale -a
看一下:
root@node1:~# locale -a
C
C.utf8
POSIX
复制
嗯,似乎找到了问题所在,用 locale-gen en_US.UTF-8
创建一个locale,然后通过 vi
编辑刚才那个postgresql.conf文件,把注释掉的四行参数重新打开,最后用 PTK 的命令 ptk cluster restart -n SOHO2
重启数据库,成功!
评论
