OB4.0社区版管理工具初体验- ocp meta db 初始化失败

通过查看python源码,meta db 和monitor db的初始化流程基本梳理清楚了:

  1. meta db的表结构初始化 相对简单,只需要执行 ocp_metadb_ddl.sql;

  2. monitor db的表结构更新(ddl语句)跟版本有关,即使在全新环境,例如4.0版本
    的meta db 初始化 也必须 一次性执行 monitordb_ddl_<版本号>.sql,因为有些
    表的创建是在 ob 2.5或者3.X 版本执行的。

  3. 最后还有一个post sql 的执行,主要是相关监控数据的更新, 因为是全新安装,此脚本可以忽略,但是如果是升级安装,此脚本必须要执行。

现在依然存在的问题是:
ocp_installer.sh install 还是会失败

按照官网 部署ocp的文档 重新试了一遍,还是会出错。

官网文档:
https://www.oceanbase.com/docs/community-ocp-cn-10000000000866614

出错的脚本还是create_metadb.py,MysqlConnector 抛出的各种无法连接到Mysql Server的错误,但实际上使用obclient 连接(-P 2883,使用obproxy的监听端口)数据库 是正常的。

重新创建了集群(obd demo), 新建meta和dbmon用户,创建了对应的数据库,
赋予了权限,然后按照官网文档重新部署ocp, 还是失败。

这次错误不同了,提示"mysql.connector.errors.ProgrammingError: 1227 (42501): Access denied; you need (at least one of) the CREATE privilege(s) for this operation",

还有下面这个错误
run sql: create tablegroup if not exists meta; failed,

出错的sql脚本为
ocp_metadb_tablegroup.sql

看了一下这个sql脚本,就是一些create tablegroup的SQL语句,应该是
meta用户没有create tablegroup的权限导致的。

OK, 那就用root用户登录,授权吧,结果更加神奇的事情发生了,ob中经典的
错误"Lost connection to MySQL server during query" 出现了 :rage: :triumph: :yawning_face:

这是什么鬼,执行个grant 操作 也会出这种错 ?

基于这两天的OCP 安装部署体验, 感觉这个产品 压根 就没有好好测试过,
否则不会出现这么多乱七八糟的错误。 官网文档也是写的很粗糙,对一些
"特殊"的使用场景下的注意事项 压根就没提到。

如果使用创建新集群的方式是会包含创建租户和用户的流程的,如果是选择了已有的数据库,其实是默认了已有相应的租户,如果选择的database不存在,是会自动去创建的。

请仔细看下 我的测试步骤和错误截图。

如果使用现有集群, create_metadb.py这个脚本确实会去尝试创建metadb 和
monitor db的,但是因为权限的问题,脚本会执行失败。

使用的 metadb ob 集群版本是什么,主要问题是出在 Lost connection to MySQL server during query 这里,可以尝试用全新创建 metadb 集群的方式来部署一次

至于需要哪些数据库层面的权限,按理说 官网文档应该列出来的,但是,很遗憾,
官网文档没有列出来,或者说根本就没考虑这种场景的存在。

主要问题是权限的问题

4.0社区版

我测试用的虚拟机内存不够, 不能支持2个集群同时运行(meta cluster 和已有的cluster),
所以我才使用"现有集群"这种方式来安装部署ocp。

试了一下 新建metadb cluster, 结果pre-check 失败了:

  1. 磁盘根分区剩余空间 至少需要84G , 通过扩容解决了;
  2. 剩余内存必须8G, 7.9G都不行,这个有点过分。。。

把 虚拟机的内存 加到24G, 硬盘根分区加到250G, 终于进入创建租户的阶段,
结果内存检测这块还是出错,剩余内存超过4G, 还是报错了

2022-11-23 18:40:10 - INFO - 1 - [ob_install.py:71] - create meta tenant with command obd cluster tenant create meta -n meta_tenant --max-cpu 2 --min-cpu 2 --max-memory 4294967296 --min-memory 4294967296
2022-11-23 18:40:16 - INFO - 1 - [ob_install.py:76] - create monitor tenant with command obd cluster tenant create meta -n monitor_tenant --max-cpu 2 --min-cpu 2 --max-memory 4294967296 --min-memory 4294967296
2022-11-23 18:40:18 - ERROR - 1 - [ob_install.py:79] - create monitor tenant got result ret_code: 1, stdout: Get local repositories and plugins ok
Open ssh connection ok
Connect to observer ok
Create tenant monitor_tenant x
[ERROR] resource not enough: memory (Avail: 1.6G, Need: 4.0G)

See https://open.oceanbase.com/docs/obd-cn/V1.4.0/10000000000436999 .
, stderr: 
Traceback (most recent call last):
  File "pipeline/install_ocp.py", line 43, in <module>
    run(context)
  File "pipeline/install_ocp.py", line 33, in run
    install_ocp_pipeline.run()
  File "/root/installer/core/pipeline.py", line 10, in run
    task.run()
  File "/root/installer/task/ob_install.py", line 147, in run
    self.create_tenant()
  File "/root/installer/task/ob_install.py", line 80, in create_tenant
    raise Exception("create monitor tenant failed")
Exception: create monitor tenant failed

而且每次重新运行安装脚本前还要清掉 :

  1. meta cluster的安装目录
  2. ocp的数据和日志目录

还要杀掉已经运行中的obproxyd, obproxy, observer 进程,如果这些进程存在,
会报错 [ERROR] Some of the servers in the cluster have been started

非常糟糕的安装体验,我已经放弃了。。。 :rage:

非常感谢你的反馈,这个帖子会专门转给这套流程的开发同学,帮助后面提高流程优化和用户体验,

如果安装了一次之后,需要调用uninstall命令来删除已经部署的进程和数据这些,再重新部署

这个不是问题的重点,问题的重点是 内存检测这块,明明机器的剩余
内存超过4G, 但是自检还是报错。。。难道是强制要求 必须有连续的
内存块 ? :triumph:

基于打印出来的日志中的这两条命令,基本定位了出错原因:

2022-11-24 16:00:04 - INFO - 1 - [ob_install.py:71] - create meta tenant with command obd cluster tenant create meta -n meta_tenant --max-cpu 2 --min-cpu 2 --max-memory 4294967296 --min-memory 4294967296
2022-11-24 16:00:09 - INFO - 1 - [ob_install.py:76] - create monitor tenant with command obd cluster tenant create meta -n monitor_tenant --max-cpu 2 --min-cpu 2 --max-memory 4294967296 --min-memory 4294967296

meta租户和monitor租户创建时 要求的最小内存和最大内存是一样的,都是4G。同时创建这两个租户,ob需要一次性锁定8G的内存,因为系统剩余内存不到8G, 所以出错了。

但是,打印的错误信息却是
[ERROR] resource not enough: memory (Avail: 1.6G, Need: 4.0G)

在此之前 create meta tenant 命令应该是创建成功了(4G 内存已被锁定,不能分配给其他的应用程序), create monitor tenant 命令执行时 检测剩余内存,不够4G, 所以报错了。

因此,基于以上的分析,如果创建每个租户时确实需要最少4G的内存,而主机没有足够的剩余内存时,打印更加易于理解的报错信息。

内存的配置在config.yaml文件, 可以尝试 减小内存配置。

还是出错了。

executing real sql script: real/update_ddl_2.2.0.sql
[2022-11-24 16:27:11] run sql: drop table if exists test                                        ; failed, got exception Traceback (most recent call last):
  File "/home/admin/ocp-init/src/ocp-init/common.py", line 207, in source_sql_file
    run_sql_no_result(sql, config)
  File "/home/admin/ocp-init/src/ocp-init/common.py", line 77, in run_sql_no_result
    run_sql(sql, db_config, True)
  File "/home/admin/ocp-init/src/ocp-init/common.py", line 61, in run_sql
    cursor.execute(sql)
  File "/usr/lib64/python2.7/site-packages/mysql/connector/cursor.py", line 569, in execute
    self._handle_result(self._connection.cmd_query(stmt))
  File "/usr/lib64/python2.7/site-packages/mysql/connector/connection.py", line 590, in cmd_query
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
  File "/usr/lib64/python2.7/site-packages/mysql/connector/connection.py", line 478, in _handle_result
    raise errors.get_exception(packet)
DatabaseError: 4018 (HY000): Entry not exist