最近遇到一些用户希望对 OceanBase 进行 sysbench 压测,想了解一下数据库的各种参数是否需要进行调整。想起有一个叫 obdiag 的工具,其中一个功能就是对集群进行巡检,所以正好借着这个机会试用一下。
obdiag 这个工具的功能很多,详见:obdiag 概述。我这次只试用其中一个巡检 OceanBase 集群的功能,其他的功能根据需求驱动,后续会逐步进行试用。
安装
这里直接参考官网链接即可。我在安装的时候没遇到问题,把官网上的几个命令执行一下就好了。
配置
参考官网的步骤,执行 obdiag config 命令之后,需要填写一批信息。
因为我是用 OCP 部署的集群,所以这些信息直接在 OCP 上的集群概览里复制黏贴一下就好了。
执行完成后在 ~/.obdiag/config.yml 中会生成一份新的配置,内容就是上面填写的这些内容。
集群巡检
接下来可以对 OceanBase 集群通过执行 obdiag check 命令进行巡检了。
我这里只挑和 sysbench 有关的内容进行巡检,task 应该都在 sysbench_run 和 sysbench_free 这两个集合里了,参考自渠磊的博客。
[xiaofeng.lby@obvos-dev-d3 /home/xiaofeng.lby/.obdiag]
$cat check_package.yaml
...
sysbench_run:
- sysbench.sysbench_run_test_tenant_cpu_used
- sysbench.sysbench_run_test_tenant_memory_used
sysbench_free:
- sysbench.sysbench_free_test_cpu_count
- sysbench.sysbench_free_test_memory_limit
- sysbench.sysbench_free_test_network_speed
...
如果想指定执行某几个特定 task 的话,可以在这个 check_package.yaml 文件里加一个自己的 task 集合,然后再执行就好了。
接下来执行一下 sysbench_free 这个 task 集合,执行过程中会打印详细的执行日志,结束之后会把巡检结果生成一个报告。
[xiaofeng.lby@obvos-dev-d3 /home/xiaofeng.lby/.obdiag]
$obdiag check --cases=sysbench_free
[xiaofeng.lby@obvos-dev-d3 /home/xiaofeng.lby/.obdiag/tasks/observer/sysbench]
$obdiag check --cases=sysbench_free
...
2024-01-02 16:04:43,395 [INFO] export report to ./check_report//check_report_observer_2024-01-02-16-04-30.table, export type is table
If you want to view detailed obdiag logs, please run:' obdiag display-trace --trace_id 1f89be5a-5d61-3ba4-830e-9d05adf6e143 '
Check observer finished. For more details, please run cmd' cat ./check_report//check_report_observer_2024-01-02-16-04-30.table '
run 一下它的 cmd cat xxx.table 就可以看到巡检的结果的报告了。
比如 sysbench.sysbench_free_test_cpu_count 这个 task 的执行之后的 task_report 是 [critical] [remote:11.158.31.20] cpu_count/os_cpu_count is 25%,is not between 80 and 100。
猜测它大概意思就是说,如果想去做 sysbench 压测,11.158.31.20 这个节点上给 observer 的 cpu 资源建议是全部 cpu 资源的 80% 以上,但是现在实际只给了 25% 左右,有点儿少了。
比如 sysbench.sysbench_test_cluster_parameters 这个 task 执行之后的 task_report 是 [critical] [cluster:obcluster] cluster's enable_record_trace_log is true , need to change False。
应该就是让用户把 enable_record_trace_log 这个配置项改成 flase,在 sysbench 压测期间少写一些没用的 trace log。
其他的 task 不再一一列举,critical 应该是建议修改,warning 应该是推荐 DBA 同学再去检查下是否需要修改。
不过其中有一个叫 sysbench.sysbench_free_test_network_speed 的 task 执行失败了,task_report 报错是 [fail] [remote:11.158.31.20] ssh execute Exception:Execute Shell command on server 11.158.31.20 failed, command=[ethtool eth0 | grep Speed | grep -o '[0-9]*'], exception:b'Cannot get wake-on-lan settings: Operation not permitted\n'。这个感觉像是 obdiag 的 bug,通过答疑钉钉群(33254054)或者开源问答区咨询了一下,obdiag 研发同学给的反馈是这个 task 写的有点儿问题,应该是在 ethtool 能执行成功时才进行网速的检测。这里简单调整下 task,当系统无法执行 ethtool 命令时,把标准错误重定向到 /dev/null 就好了。
其他例如自定义巡检任务 task 的功能,这次就先不试用了,感觉还是有点儿麻烦的,需要先熟悉 OceanBase 的系统表和字典视图和 shell 命令,后面有机会再试着加一个自己的巡检 task 吧。
总结
最后简单总结一下:
通过 obdiag 在 sysbench 执行前进行巡检还是比较简单和便捷的,完全傻瓜式的安装和使用,最后给出的巡检结果也算比较清楚。
虽然在我的测试环境里暴露了一个网速检测时的小瑕疵,但是整体来看还是挺不错的,所以推荐大家在使用 OceanBase 进行 sysbench 压测前使用一下这个 obdiag 工具。
这个工具的功能太多,一下子试用不完,这次就先用一下其中的巡检功能,其他功能就等后面有实际需求的时候,再慢慢来试用了。