别再对着黑屏发愁了!“点点点”搞定 OceanBase 图形化部署实录

点几次鼠标就能搞定?分享一下我用 OBD 图形化界面“轻取” OceanBase 4.3.5 和 OCP Express 的实战

引言

一直觉得分布式数据库部署门槛高,直到上手 OceanBase4.3.5 社区版 OBD 可视化工具。不用熟记 rpc、sql 各类端口,不用手动编写集群配置文件,离线 All-in-One 包解压后启动 web 页面,从系统预检查到集群销毁全流程可视化操作。本文完整记录 9 步部署流程,包含 7 个必调系统内核参数、5 个高频报错解决方案,所有操作命令原样复制,附全程截图,内网机房也能直接落地。

一、部署前系统调优:那些年我踩过的参数坑 :rotating_light:

部署 OceanBase 前不调系统参数,就像开车不系安全带——不是一定会出事,但出事就是大问题。我前两次部署失败,全是因为参数没配到位,下面这些步骤,少一步都不行!

1.1 系统资源限制优化:别让「文件句柄」拖垮集群

OceanBase 进程超「费」资源,线程栈、文件句柄、core 文件这些限制默认值根本不够用,我第一次部署时,刚启动集群就报「Too many open files」,查了半天才发现是 limits.conf 没改。

1.1.1 修改 limits.conf 配置

先打开配置文件,我习惯用 vim,你要是用 nano 也没问题:

[root@instance2 ~]# vim /etc/security/limits.conf
[root@instance2 ~]# 

在文件里加这些内容(直接复制粘贴就行,别手敲错了):

root soft nofile 655350
root hard nofile 655350
* soft nofile 655350
* hard nofile 655350
* soft stack unlimited
* hard stack unlimited
* soft nproc 655360
* hard nproc 655360
* soft core unlimited
* hard core unlimited

1.1.2 为啥要这么配?聊聊我的踩坑感悟

nofile 设到 655350:我之前设成 65535,集群高并发时直接崩了,查日志才知道是文件句柄不够,翻倍后稳如老狗;

nproc 调到位:多线程并发时,线程数不够会导致连接超时,我试过设 32000,结果 OBServer 启动直接卡壳;

core 设为 unlimited:上次集群崩了,因为 core 文件大小受限,连故障日志都抓不到,血的教训!

1.1.3 验证配置是否生效

改完别直接走!退出当前会话重新登录,敲这个命令检查:

# 重新登录后检查
ulimit -a

要是看到 nofile、nproc 都是我们设的值,就没问题了~

1.2 内核参数调优:给集群「松绑」:rocket:

内核参数就像系统的「隐藏设置」,默认值是给普通应用用的,OceanBase 这种内存密集型数据库,必须手动调!

1.2.1 虚拟内存优化:max_map_count 是关键

OceanBase 要开超多内存映射,默认的 max_map_count 太小,我第一次部署时,OBServer 启动后直接被 OOM 杀了,查了内核日志才发现是这个参数的锅。

打开 sysctl.conf 文件:

[root@CAIP121 ~]# vim /etc/sysctl.conf
[root@CAIP121 ~]# vim /etc/sysctl.confsysctl -p
[root@CAIP121 ~]# sysctl -p

把这些参数加进去(直接覆盖或追加都行):

fs.aio-max-nr = 1048576
net.core.somaxconn = 2048
net.core.netdev_max_backlog = 10000
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.ip_local_port_range = 3500 65535
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_slow_start_after_idle = 0
vm.swappiness = 0
vm.min_free_kbytes = 2097152
vm.max_map_count = 655360
sunrpc.tcp_max_slot_table_entries = 128

验证一下:

[root@CAIP121 ~]# sysctl -a | grep vm.max_map_count
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.docker0.stable_secret"
sysctl: reading key "net.ipv6.conf.ens192.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
vm.max_map_count = 655360

1.2.2 文件句柄数调整:系统级限制别忽略

limits.conf 是用户级的,系统级还要设 fs.file-max,我之前只改了用户级,结果集群跑了半天还是报文件句柄不够,差点把我整emo了。

继续改 sysctl.conf:

[root@CAIP121 ~]# vim /etc/sysctl.conf
[root@CAIP121 ~]# sysctl -p
fs.aio-max-nr = 1048576
net.core.somaxconn = 2048
net.core.netdev_max_backlog = 10000
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.ip_local_port_range = 3500 65535
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_slow_start_after_idle = 0
vm.swappiness = 0
vm.min_free_kbytes = 2097152
vm.max_map_count = 655360
sunrpc.tcp_max_slot_table_entries = 128
fs.file-max = 6573688

1782268915

验证:

[root@CAIP121 ~]# sysctl -a | grep fs.file-max
fs.file-max = 6573688
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.docker0.stable_secret"
sysctl: reading key "net.ipv6.conf.ens192.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"

1782268925

1.3 SSH连接优化:别让「免密」坑了你 :key:

部署时 obd 要通过 SSH 远程执行命令,我之前配了免密还是连不上,查了半天发现是 UsePAM 没开,真是小刀剌屁股——开了眼了!

1.3.1 方法一:修改 max user processes 配置

先把 nproc 设到位,不然 SSH 登录后进程数不够:

[root@instance2 redo]# vim /etc/security/limits.d/nproc.conf
[root@instance2 redo]# ulimit -u 120000
[root@instance2 redo]# ulimit -u
120000
[root@instance2 redo]# ulimit -u
120000

1782268939

1.3.2 方法二:检查 UsePAM 配置

打开 sshd_config:

[root@instance2 ~]# vim /etc/ssh/sshd_config
[root@instance2 ~]# 

确保 UsePAM = yes(被注释了就取消注释): UsePAM yes

1782268963

重启 SSH 服务:

sudo systemctl restart sshd

1.3.3 方法三:临时调整 ulimit(应急用)

要是着急验证部署,先临时改一下(只对当前会话有效):

[root@instance2 redo]# vim /etc/ssh/sshd_config
[root@instance2 redo]# systemctl restart sshd
[root@instance2 redo]# ulimit -u
32000

1782269014

二、部署前准备:软件和环境别搞反了 :package:

部署 OceanBase 就像做饭,食材和厨具得先备齐,我把在线/离线部署都试过了,离线部署更适合内网环境,这里重点讲离线版~

2.1 资源要求:别抠抠搜搜,配置给够!

•只装 OceanBase 数据库:至少 2vCPU、8G 内存、19G 磁盘(我试过 1vCPU+4G,启动直接卡成PPT);

•装全套(含 OCP Express):至少 4vCPU、10G 内存、25G 磁盘,推荐 16G 内存(我用 8G 内存部署 OCP Express,启动后内存占满,控制台都卡);

•OCP Express 必须装 JDK1.8:别装高版本,亲测 JDK11 不兼容,踩过的坑替你们避了~

2.2 离线部署:下载 All in One 包

我选的是离线部署,毕竟客户机房没外网,先从 OceanBase 官网下载 All in One 包,传到中控机:

[root@worker3 ob4-3]# ls
oceanbase-all-in-one-4.3.5_20250115.el7.x86_64.tar.gz
[root@worker3 ob4-3]# tar -xzf oceanbase-all-in-one-4.3.5_20250115.el7.x86_64.tar.gz 
[root@worker3 ob4-3]# ls
oceanbase-all-in-one  oceanbase-all-in-one-4.3.5_20250115.el7.x86_64.tar.gz
[root@worker3 ob4-3]# 

1782269041

2.3 安装 All in One 包

解压后进入目录安装,这步超简单,跟着敲就行:

[root@worker3 ob4-3]# cd oceanbase-all-in-one/
[root@worker3 oceanbase-all-in-one]# cd bin/
[root@worker3 bin]# ls
env.sh  install.sh  uninstall.sh
[root@worker3 bin]# ./install.sh 

安装完成后会提示配置环境变量,一定要执行:

add auto set env logic to profile: /root/.bash_profile

#########################################################################################
 Install Finished 
=========================================================================================
Setup Environment:              source ~/.oceanbase-all-in-one/bin/env.sh 
Quick Start:                    obd demo 
Use Web Service to install:     obd web 
Use Web Service to upgrade:     obd web upgrade 
More Details:                   obd -h 
=========================================================================================
[root@worker3 bin]# 
[root@worker3 bin]# source ~/.oceanbase-all-in-one/bin/env.sh
[root@worker3 bin]# 

三、图形化部署:终于不用对着黑窗口硬刚了 :desktop_computer:

装完 obd 就能启动图形化界面了,这步我吹爆——之前敲命令部署要记几十行参数,现在点鼠标就行,效率直接翻倍!

3.1 启动图形化界面

敲这个命令启动,默认端口 8680,要是端口被占了就用 -p 指定:

[root@worker3 bin]# obd web
start OBD WEB in 0.0.0.0:8680
please open http://172.20.2.131:8680

:warning: 注意:阿里云/腾讯云等环境,输出的可能是内网 IP,得用公网 IP 访问,我第一次傻乎乎点内网地址,半天打不开,还以为部署错了~

3.2 部署配置:选对参数少走弯路

打开界面后点「开启体验之旅」,选「OceanBase 及配套工具」→「安装」,进入部署配置页:

•集群名称:别用中文,我试过用「测试集群」,直接报错,英文+数字最稳;

•版本选择:选 4.3.5 社区版,别选错成企业版(需要授权);

•负载类型:

可选组件:默认勾 OBProxy,要装 OCP Express 会自动勾 OBAgent,别乱取消~

配完点「下一步」,进入节点配置页:

3.3 节点配置:IP别填127.0.0.1!

这步是高频踩坑点,我见过有人填 127.0.0.1,结果集群启动后连不上,哭都没地方哭:

•Zone 名称:自定义,比如 zone1、zone2,别瞎起名字;

•OBServer 节点:填真实 IP,按 Enter 加多个节点;

•RootServer 节点:选一个 OBServer IP 就行,多 Zone 每个 Zone 选一个;

•OCP Express 节点:只能填一个 IP,别填多;

•部署用户:默认 root 就行,要是用普通用户,得先赋权限;

•密码/SSH 端口:免密就不用填密码,端口默认 22;

软件路径:默认家目录,自定义的话要确保目录为空;

配完点「下一步」,进入集群配置页。

3.4 集群配置:密码别太简单!

这里的密码是核心,丢了就麻烦了,我习惯用随机生成,然后记到记事本里:

•模式配置:选「最大占用」,别选「最小可用」——省那点资源,后期出问题更麻烦;

•root@sys 密码:随机生成或自定义,复杂度要够(8-32位,至少三种字符);

•数据/日志目录:绝对路径,确保为空;

•端口配置:默认 2881(SQL)、2882(RPC),没被占用就别改;

•组件配置:OCP Express 密码复杂度更高(四种字符各至少2个),端口默认 8180,OBProxy 默认 2883;

全部配完点「下一步」,到预检查页面。

3.5 预检查:有问题别慌,自动修复yyds

预检查会查所有配置,要是报错,能自动修复的就点「自动修复」,不能的就看「了解更多方案」,我之前是 max_map_count 没改,自动修复一下就好了:

预检查通过后点「部署」,等着就行~

3.6 部署完成:验证一下,别直接跑路!

部署成功后会显示各组件的连接串,我一般先复制 OceanBase 的连接串试试:

obclient -h172.20.2.121 -P2881 -uroot -p'tccbU{C}OMPFBib4U6' -Doceanbase -A
obclient -h172.20.2.121 -P2883 -uroot@proxysys -p'{4&cqKJ27c&{Wr-M2wo' -Doceanbase -A 

OCP Express 直接点连接串登录,第一次登录要改密码,别忘啦~

四、踩坑番外:那些让我头大的小问题 :man_facepalming:

部署过程中我还遇到了几个奇葩问题,分享出来帮你们避坑:

4.1 obd 版本太旧,启动不了图形化界面

我一开始用的 obd 1.6.0,敲 obd web 直接报错:

[root@worker3 bin]# obd web
Usage: obd <command> [options]

Available commands:

cluster        Deploy and manage a cluster.

demo           Quickly start

mirror         Manage a component repository for OBD.

repo           Manage local repository for OBD.

test           Run test for a running deployment.

update         Update OBD.


Options:
  --version      show program's version number and exit
  -h, --help     Show help and exit.
  -v, --verbose  Activate verbose output.

[root@worker3 bin]# 

查版本发现是 1.6.0,太老了:

[root@worker3 bin]# obd --version
OceanBase Deploy: 1.6.0
REVISION: 602b499398b35ac7e48e1fb444b2bb3eab61daae
BUILD_BRANCH: HEAD
BUILD_TIME: Nov 02 2022 11:23:35OURCE
Copyright (C) 2021 OceanBase
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[root@worker3 bin]# 

1782269203

升级 obd 就好了:

[root@worker3 admin]# obd update
Found a higher version package for OBD
name: ob-deploy
version: 3.1.1
release:1.el7
arch: x86_64
md5: e074786b3354132e69d8251ab703f1bb2fd3ad0c
Upgrade successful.
Current version : 3.1.1
[root@worker3 admin]# 

1782269211

升级后版本到 3.1.1,就能启动图形化界面了:

[root@worker3 bin]# obd --version
OceanBase Deploy: 3.1.1
REVISION: 94b5853a18ad1ad09d5afc30d9edb44643dd488c
BUILD_BRANCH: HEAD
BUILD_TIME: Jan 06 2025 11:35:49OURCE
Copyright (C) 2025 OceanBase
License Apache 2.0: Apache version 2 or later <https://www.apache.org/licenses/LICENSE-2.0>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[root@worker3 bin]# 

4.2 Java 环境验证:SSH 方式才准!

部署 OCP Express 时,直接在机器上敲 java -version 显示 1.8,但 obd 检测不到——因为 SSH 不会初始化环境变量!

正确的验证方法:

# ocp_express_node_username:OCP Express 节点用户名
# ocp_express_node_ip:OCP Express 节点 IP
[admin@test001 ~]$ ssh <ocp_express_node_username>@<ocp_express_node_ip> 'java -version'

输出这样就对了:

openjdk version "1.8.0_xxx"   
OpenJDK Runtime Environment (build 1.8.0_362-b08)  
OpenJDK 64-Bit Server VM (build 25.362-b08, mixed mode)  

要是不对,要么配 java_bin 路径,要么把 java 软链接到 /usr/bin/java:

[admin@test001 bin] $ ln -s /jdk8/bin/java  /usr/bin/java  

五、部署后管理:集群在手,天下我有 :sparkles:

部署完别不管了,日常管理命令得会:

5.1 查看集群列表

[root@worker3 bin]# obd cluster list
+----------------------------------------------------+
|                    Cluster List                    |
+-------+--------------------------+-----------------+
| Name  | Configuration Path       | Status (Cached) |
+-------+--------------------------+-----------------+
| ob435 | /root/.obd/cluster/ob435 | running         |
+-------+--------------------------+-----------------+
Trace ID: b7badf14-0859-11f0-b98f-0050568197df
If you want to view detailed obd logs, please run: obd display-trace b7badf14-0859-11f0-b98f-0050568197df
[root@worker3 bin]# 

5.2 查看集群状态

[root@worker3 bin]# obd cluster display ob435
Get local repositories and plugins ok
Open ssh connection ok
Connect to observer 172.20.2.121:2881 ok
Wait for observer init ok
+------------------------------------------------+
|                  oceanbase-ce                  |
+--------------+---------+------+-------+--------+
| ip           | version | port | zone  | status |
+--------------+---------+------+-------+--------+
| 172.20.2.121 | 4.3.5.0 | 2881 | zone1 | ACTIVE |
| 172.20.2.122 | 4.3.5.0 | 2881 | zone2 | ACTIVE |
+--------------+---------+------+-------+--------+
obclient -h172.20.2.121 -P2881 -uroot -p'tccbU{C}OMPFBib4U6' -Doceanbase -A

cluster unique id: a85b4951-0d13-53cb-a631-461ad5c8e6ec-195c5e5338f-00050304

Connect to obproxy ok
+------------------------------------------------------------------+
|                            obproxy-ce                            |
+--------------+------+-----------------+-----------------+--------+
| ip           | port | prometheus_port | rpc_listen_port | status |
+--------------+------+-----------------+-----------------+--------+
| 172.20.2.121 | 2883 | 2884            | 2885            | active |
+--------------+------+-----------------+-----------------+--------+
obclient -h172.20.2.121 -P2883 -uroot@proxysys -p'{4&cqKJ27c&{Wr-M2wo' -Doceanbase -A 

Trace ID: c9011cf2-0859-11f0-a0da-0050568197df
If you want to view detailed obd logs, please run: obd display-trace c9011cf2-0859-11f0-a0da-0050568197df
[root@worker3 bin]# 

5.3 停止/销毁集群

# 停止集群
obd cluster stop myoceanbase

# 销毁集群(先启动再销毁,状态为 configured 时销毁不了)
obd cluster start myoceanbase
obd cluster destroy myoceanbase -f

# 强制清理(万不得已别用)
rm -rf /root/.obd/cluster/myoceanbase
sudo rm -rf /home/admin/oceanbase/*

总结

折腾了这么久,从踩坑到部署成功,最大的感受就是:OceanBase 4.3.5 社区版的图形化部署是真的香,尤其是对我这种又要效率又怕记命令的运维来说。不管是小公司搭测试集群,还是中大型企业上生产,这套流程都能用——唯一的建议就是:参数调优别偷懒,踩过的坑我都替你们标出来了,照着来准没错~

:clipboard: 作者注:本文围绕 OceanBase 4.3.5 社区版图形化部署的全流程,涵盖系统调优、obd 图形界面操作、OCP Express 集成等环节,所有命令与截图均基于 CentOS 7.9 物理机环境实测整理。文中提到的 limits.conf 踩坑、SSH 环境变量不生效、obd 版本过旧导致 web 命令缺失等问题,均为日常运维中真实遇到的“拦路虎”。数据库部署环境千差万别,CPU 架构、内核版本、网络拓扑、存储类型都会影响最终效果,本文方案仅作技术参考,不代表唯一标准解法。以上内容为个人经验总结,不构成线上生产环境落地建议,如需投产请结合官方文档与自身环境充分验证。

2 个赞

感谢分享