1. 为什么要在离线环境折腾OceanBase单机版如果你和我一样经常需要在客户现场、内网开发环境或者干脆就是一台断网的服务器上捣鼓点东西那你肯定懂我的痛。想装个数据库结果发现连不上外网什么yum、apt都用不了依赖包一个个手动传那感觉真是酸爽。OceanBase作为一款优秀的国产分布式数据库功能强大但很多教程默认你网络畅通无阻这对于我们这些“离线战士”来说参考价值就打了折扣。所以今天咱们就来啃一块硬骨头在完全没有外网的Linux服务器上从零开始用OBDOceanBase Deployer这个官方部署工具搭建一个单机版的OceanBase数据库。这个环境特别适合开发测试、功能验证、学习研究或者就是单纯想在内网环境里跑个数据库服务。你别看是单机版OceanBase的核心特性比如多租户、资源隔离、SQL兼容性它都具备用来做开发测试性能和数据一致性都绰绰有余。我这次实战的环境是一台CentOS 7的虚拟机内存给了8G官方建议最小6G硬盘空间尽量多分点。整个过程我会把每一步的操作、遇到的坑以及怎么填坑都掰开揉碎了讲清楚。咱们的目标是让你拿着这份指南在自己的离线环境里也能一次成功少走弯路。好了废话不多说咱们直接开干。2. 战前准备用户、目录与安装包在真正动手部署之前有几项准备工作必须做到位。这就像盖房子前要打好地基、备好建材一样准备工作做扎实了后面的部署过程才能顺风顺水。2.1 创建一个专用的管理员用户直接用root用户操作并不是个好习惯权限太大容易误操作。我们创建一个专门的用户比如就叫admin来负责OceanBase的部署和日常管理。# 以root身份执行 useradd admin echo root1234 | passwd --stdin admin这里我用了一条命令同时创建用户和设置密码密码设为root1234你可以按需修改。为了后续操作方便我们通常会给这个用户加上sudo权限。usermod -aG wheel admin在CentOS 7里wheel组默认就有sudo权限。执行完可以id admin看看确认用户已经创建成功并且加入了正确的组。之后大部分操作我们都会切换到这个admin用户下进行。2.2 规划并创建数据存储目录OceanBase运行时会产生数据文件、日志文件redo log等我们需要为它们指定专门的存储位置最好不要放在系统根目录下避免占满系统盘。我习惯在根目录下创建一个/oceanbase的目录来统一管理。mkdir -p /oceanbase/data mkdir -p /oceanbase/redo chown -R admin:admin /oceanbase这里创建了两个子目录data用来存放核心数据文件redo用来存放事务日志clog。最后一条chown命令非常关键它把这两个目录的所有权交给了我们刚创建的admin用户。如果不做这一步后续admin用户启动进程时可能会因为权限不足而无法向这些目录写入数据导致部署失败。2.3 获取并解压All-in-One安装包这是离线部署的核心物料。你需要在一台有网络的机器上从OceanBase社区官网或镜像站下载对应你操作系统版本的All-in-One安装包。这个包是个宝它里面不仅包含了OceanBase数据库软件本身observer还把部署工具OBD以及所有相关的依赖库都打包好了完美解决了离线环境缺少依赖的难题。我这次用的版本是oceanbase-all-in-one-4.3.2.0-100000092024072912.el7.x86_64.tar。把它上传到你的离线服务器上然后解压tar -zxvf oceanbase-all-in-one-4.3.2.0-100000092024072912.el7.x86_64.tar.gz解压后会得到一个目录比如oceanbase-all-in-one。接下来切换到admin用户进入这个目录的bin文件夹执行安装脚本。su - admin cd oceanbase-all-in-one/bin ./install.sh这个install.sh脚本会把OBD等工具安装到当前用户的家目录下~/.oceanbase-all-in-one。安装完成后需要让当前shell环境生效source ~/.oceanbase-all-in-one/bin/env.sh执行完上面这行你试试在命令行输入obd --version如果能显示出版本号说明OBD工具已经就绪。最后还有至关重要的一步禁用远程仓库。因为我们是离线环境根本连不上网让OBD别去白费功夫尝试联网检查更新或下载包。obd mirror disable remote做完这一步OBD就只会认我们本地的“仓库”了。那么怎么把刚才解压的安装包里的内容放进本地仓库呢别急我们马上就来配置。3. 核心操作配置本地仓库与部署文件准备工作做完我们就进入了最核心的配置环节。这里有两件大事一是让OBD认识我们本地的安装包二是告诉OBD我们想要一个什么样的OceanBase数据库。3.1 构建本地离线镜像仓库刚才下载的All-in-One安装包解压后里面其实有很多.rpm格式的软件包。我们需要把这些包“注册”到OBD的本地仓库里这样OBD在部署时才知道去哪里找软件。首先进入你解压后存放.rpm包的目录。通常它们就在安装包的根目录或者某个子目录下。然后执行一条魔法命令obd mirror clone *.rpm这条命令会扫描当前目录下所有的.rpm文件并将它们的信息添加到OBD的本地镜像库中。你可以把它理解为“离线安装包的入库操作”。完成后可以用下面命令检查本地仓库里有什么obd mirror list local如果列表中出现了oceanbase-ce(数据库核心) 和oceanbase-ce-libs(依赖库) 等包并且版本号正确那么恭喜你本地仓库搭建成功这是离线部署成功的基石。我遇到过有人在这一步卡住报错说找不到oceanbase-ce包十有八九是因为没执行obd mirror clone或者执行路径不对OBD没找到那些.rpm文件。3.2 详解与定制mini-single-example.yamlOBD通过一个YAML配置文件来定义你要部署的集群。官方提供了一个单机版的示例配置路径在~/.oceanbase-all-in-one/obd/usr/obd/example/mini-single-example.yaml。我们不要直接修改原文件先复制一份再改。cd ~/.oceanbase-all-in-one/obd/usr/obd/example cp mini-single-example.yaml mini-single-obtest.yaml接下来我们用文本编辑器如vim打开mini-single-obtest.yaml文件根据我们的环境进行定制。下面我挑几个最关键的参数结合我的经验给你讲讲怎么调。用户与连接user部分填写我们之前创建的admin用户和密码。OBD会用SSH连接到本机因为我们部署单机版服务器就是自己来执行各种操作。user: username: admin password: root1234 # key_file: /home/admin/.ssh/id_rsa # 如果配置了免密登录可以用这个 port: 22服务器IPservers下面填写你本机的IP地址。这里强烈建议写IP不要写主机名在离线环境里主机名解析可能有问题。oceanbase-ce: servers: - 192.168.137.104 # 替换成你的服务器IP路径配置这是最容易出错的地方之一。home_path是OceanBase软件的工作目录。data_dir和redo_dir就是我们之前创建的数据和日志目录。务必确保路径正确且admin用户有写权限。global: home_path: /home/admin/observer data_dir: /oceanbase/data redo_dir: /oceanbase/redo网络与端口devname填写你的网卡名称用ip addr命令查看比如ens33或eth0。mysql_port(2881) 是业务连接端口rpc_port(2882) 是内部通信端口一般保持默认即可。资源分配重中之重这部分直接决定部署能否成功以及数据库性能。memory_limit: 6G分配给OceanBase实例的总内存。不能超过你机器可用物理内存开发环境可以设小点但必须大于6G。system_memory: 1G系统预留内存不用改。datafile_size: 1G数据文件初始大小。如果磁盘空间紧张可以先设小点。log_disk_size: 4G日志磁盘空间大小。production_mode: false开发测试环境务必设为false这个模式会关闭很多检查和优化对资源要求更低适合非生产环境。其他优化项为了节省资源我们可以关闭一些生产环境才需要的特性。enable_syslog_wf: false # 不单独打印WARNING以上日志 enable_syslog_recycle: true # 开启系统日志回收 max_syslog_file_count: 4 # 最多保留4个日志文件配置文件改好后强烈建议用obd cluster edit-config命令检查一下语法或者直接用cat命令快速浏览一遍确认IP、路径、密码这些关键信息没有笔误。4. 一键部署与启动见证OceanBase诞生配置妥当最激动人心的时刻来了——执行部署命令。这个过程OBD会自动完成软件安装、目录初始化、参数配置等一系列复杂操作。4.1 执行部署命令在admin用户下执行以下命令。obtest是你给这个集群起的名字可以自定义-c后面指定我们修改好的配置文件。obd cluster deploy obtest -c mini-single-obtest.yaml接下来你会看到屏幕上刷过一大堆信息。OBD首先会检查本地仓库有没有需要的软件包然后检查你的服务器环境比如用户、目录权限等。如果一切正常它会开始安装软件包。期间可能会让你选择部署场景比如“HTAP”、“OLTP”等对于单机测试直接按回车选择默认的“HTAP”混合场景就行。当看到最后输出obtest deployed并且提示你执行obd cluster start obtest来启动时就说明部署阶段成功了OBD很贴心地给了一个Trace ID如果部署失败可以用obd display-trace [Trace ID]命令查看详细日志排错。4.2 启动集群并验证部署成功只是把软件装好了数据库服务还没运行。接下来启动它obd cluster start obtest启动过程会初始化数据库这可能需要一两分钟。当你看到类似下面的输出时就大功告成了observer program health check ok Connect to observer 192.168.137.104:2881 ok Initialize oceanbase-ce ok Wait for observer init ok --------------------------------------------------- | observer | ----------------------------------------------- | ip | version | port | zone | status | ----------------------------------------------- | 192.168.137.104 | 4.3.2.0 | 2881 | zone1 | ACTIVE | -----------------------------------------------最下面那张表格显示了一个状态为ACTIVE的observer进程这就是我们的OceanBase数据库实例表格下面还给出了一行连接示例obclient -h192.168.137.104 -P2881 -uroot -pGWTHqo0gE1ytNpV82H3p -Doceanbase -A这个命令是用OceanBase自带的命令行客户端obclient连接数据库。密码是OBD自动生成的每次部署可能不同。你可以复制这条命令直接连接登录后就能创建数据库、表执行SQL了。如果系统里没有obclient也可以使用通用的MySQL客户端如mysql进行连接因为OceanBase高度兼容MySQL协议。5. 避坑指南常见错误与解决方案理想很丰满现实往往会在部署路上给你挖几个坑。下面是我自己以及帮别人解决问题时遇到的几个最高频的错误和解决办法。5.1 错误一找不到 oceanbase-ce 软件包错误信息[ERROR] No such package oceanbase-ce.问题根源OBD在本地仓库里找不到名为oceanbase-ce的安装包。解决方案确认执行了obd mirror clone确保你在存放.rpm文件的目录下执行了此命令。检查包是否完整用obd mirror list local查看列表。如果列表为空或没有oceanbase-ce可能是安装包损坏或版本不对。你需要重新下载完整的All-in-One安装包并确保其适用于你的CentOS 7系统。网络搜索结果补充根据社区经验有时除了oceanbase-ce可能还缺少oceanbase-ce-libs这个依赖包。你需要确保这两个包都在本地仓库中。如果是从阿里云镜像站单独下载的依赖包也需要用obd mirror clone命令将其加入仓库。5.2 错误二网络接口与系统参数检查失败错误信息这是一串组合错误可能包括No such net interface: eth0The value of the ulimit parameter open files must not be less than 20000The value of the ulimit parameter max user processes must not be less than 120000The value of the vm.max_map_count must be within [327600, 1310720]问题根源OBD在启动前会对服务器进行严格的前置检查包括网络配置、系统资源限制和内核参数。离线环境或默认安装的Linux系统往往不满足这些要求。解决方案需要root权限修正网卡名称用ip addr查看实际网卡名如ens33然后在配置文件的devname参数里填写正确的名称。调整用户资源限制编辑/etc/security/limits.d/下的配置文件或直接编辑/etc/security/limits.conf增加以下内容* soft nofile 20000 * hard nofile 20000 * soft nproc 120000 * hard nproc 120000修改后需要退出当前admin用户的SSH会话重新登录才能使限制生效。你可以用ulimit -n和ulimit -u命令验证。优化内核参数编辑/etc/sysctl.conf在文件末尾添加vm.max_map_count 655360 fs.file-max 6573688保存后执行sysctl -p使配置立即生效。5.3 错误三内存或磁盘空间不足错误信息not enough memory. (Free: 543M, Need: 6144M)或/ not enough disk space.问题根源配置文件里要求的内存 (memory_limit) 或磁盘空间 (datafile_sizelog_disk_size) 超过了服务器实际可用资源。解决方案降低资源配置这是最直接的解决办法。回头修改你的mini-single-obtest.yaml文件。将memory_limit调整为比当前可用内存稍小的值可用内存用free -m查看。将datafile_size和log_disk_size调小。对于纯测试datafile_size可以先设为1G或2Glog_disk_size设为1G。再次强调开发测试环境务必设置production_mode: false这个模式对资源要求会大幅降低。释放服务器资源关闭其他不必要的进程和服务或者考虑给虚拟机分配更多内存和磁盘空间。处理完这些错误后记得使用obd cluster destroy obtest命令清理之前失败的部署如果存在然后重新执行deploy和start。每次修改配置或系统参数后重新部署是一个好习惯。6. 日常维护与常用命令速查数据库跑起来了咱们也得知道怎么日常维护它。OBD提供了一套简洁的命令来管理集群的生命周期。集群生命周期管理obd cluster list查看本机上由OBD管理的所有集群及其状态。obd cluster start cluster_name启动指定集群。obd cluster stop cluster_name停止指定集群。obd cluster restart cluster_name重启指定集群。obd cluster destroy cluster_name销毁指定集群。这个命令会停止服务并清理数据操作前请务必确认查看信息与日志obd cluster display cluster_name显示集群的详细配置和状态信息比list更详细。obd cluster tenant list cluster_name查看集群内的租户信息部署成功后默认会有一个sys租户。日志文件位于各节点home_path下的log目录中例如/home/admin/observer/log查看这里的日志是深度排错的关键。连接与使用数据库连接命令就是启动成功后OBD提示的那条obclient命令。你可以用它连接后像使用MySQL一样创建用户、数据库、表。如果喜欢图形化工具可以使用支持MySQL协议的任何客户端如DBeaver、Navicat连接主机填你的服务器IP端口填2881用户名root密码是OBD生成的那个。最后再提一下离线环境下的软件包管理。如果你后续需要升级版本流程是在有网的机器下载新版本的All-in-One包或相关rpm包上传到离线服务器用obd mirror clone添加到本地仓库然后修改配置文件中的版本号最后用obd cluster redeploy命令进行重新部署注意备份数据。整个离线部署OceanBase单机版的过程其实就是一个“准备物料 - 配置蓝图 - 执行建造 - 解决异常”的标准工程流程。最难的部分往往不是执行命令而是前期对服务器环境的检查和配置文件的精准调校。这份指南里的每一步和每一个坑都是我真机实践过的经验。希望它能帮你顺利在离线世界里搭建起自己的OceanBase数据库为你的开发测试工作提供一个稳定可靠的数据底座。如果在操作中遇到新的问题不妨多看看OBD输出的详细Trace日志那里通常藏着最直接的答案。