【OceanBase专栏】从零到一:实战演练OB多租户的创建与资源规划

发布时间:2026/5/17 23:29:51

【OceanBase专栏】从零到一:实战演练OB多租户的创建与资源规划 1. 初识OceanBase多租户架构第一次接触OceanBase的多租户功能时我完全被它的设计理念所吸引。简单来说OceanBase的租户机制就像在一栋大楼里划分出多个独立公寓每个租户都是完全隔离的数据库实例拥有自己独立的CPU、内存资源和访问端口。这种架构最吸引我的地方在于它完美解决了传统数据库资源利用率低下的痛点。记得去年我们公司有个电商项目需要同时支持前台交易系统OLTP和后台数据分析OLAP。传统方案可能要部署两套MySQL实例不仅资源浪费数据同步也是个麻烦事。而用OceanBase的多租户功能我们只需要创建一个集群然后划分出两个租户一个配置为OLTP类型处理高并发交易另一个设为OLAP类型跑报表分析。两个租户共享底层存储但资源完全隔离互不干扰。这里有个特别实用的特性资源单元Unit Config。你可以把它理解为租户资源的套餐模板定义了CPU核数、内存大小这些基础配置。比如我们给交易系统租户配置了4核8G的unit给报表系统配了8核16G的unit。更棒的是这些资源配置可以随时在线调整业务完全无感知。有次大促前我们临时给交易租户加了2个CPU整个过程就像给虚拟机调配置一样简单。2. 环境准备与工具安装2.1 基础环境配置动手实践前建议准备至少4核8G配置的Linux服务器。我习惯用CentOS 7.x因为OceanBase的依赖包在这个环境最稳定。先检查下系统资源free -g sudo echo 3 /proc/sys/vm/drop_caches # 清理缓存安装过程可能会遇到依赖缺失的问题这里分享个实用命令yum install -y libaio-devel flex bison ncurses-devel glibc-devel2.2 OBD工具安装OceanBase Deployer简称OBD是官方推荐的部署工具相当于MySQL的mysqld。我推荐用all-in-one包安装特别适合新手tar -zxf oceanbase-standalone-all-in-one-4.3.5_bp3_hotfix1_20251009.el7.x86_64.tar.gz source ~/.oceanbase-all-in-one/bin/env.sh ./install_obd.sh安装完成后用这个命令检查集群状态obd cluster list obd cluster display oceanbasenhtc # 替换为你的集群名3. 创建第一个租户实战3.1 快速创建测试租户对于想快速体验的新手OBD提供了极简创建命令。比如创建一个2核4G的测试租户obd cluster tenant create ob422 -n test1 \ --max-cpu2 \ --memory-size4G \ --log-disk-size10G \ --max-iops10000 \ --unit-num1 \ --charsetutf8mb4这个命令背后其实完成了三件事自动创建名为unit_config_ob422_test1的资源单元配置创建关联的资源池resource_pool_ob422_test1最终创建出test1租户查看刚创建的租户obd cluster tenant show ob422 -t test13.2 手动分步创建生产级租户实际生产环境我更喜欢手动分步创建这样资源规划更精准。假设我们要创建一个支持HTAP混合负载的租户首先创建资源单元规格CREATE RESOURCE UNIT htap_unit MAX_CPU 4, MIN_CPU 4, MEMORY_SIZE 16G, LOG_DISK_SIZE 50G, MAX_IOPS 20000;然后创建跨zone的资源池CREATE RESOURCE POOL htap_pool UNIT htap_unit, UNIT_NUM 1, -- 每个zone的unit数量 ZONE_LIST (zone1,zone2,zone3);最后创建租户并指定负载类型CREATE TENANT htap_tenant RESOURCE_POOL_LIST (htap_pool), PRIMARY_ZONE zone1,zone2,zone3, CHARSET utf8mb4 SET ob_compatibility_mode mysql, ob_tcp_invited_nodes %, workload_type HTAP;4. 租户资源配置进阶技巧4.1 负载类型深度解析OceanBase支持多种负载类型选对类型对性能影响极大。我在压力测试中发现OLTP适合订单系统默认large_query_threshold5s会快速终止长查询OLAP适合报表系统large_query_threshold100s允许复杂查询HTAP折中方案threshold30s但需要更多内存做行列混合存储-- 创建后修改负载类型 ALTER TENANT htap_tenant SET workload_type OLAP;4.2 资源隔离与限制为防止某个租户耗尽资源可以设置资源限制-- 限制最大CPU使用率70% ALTER RESOURCE UNIT htap_unit MAX_CPU 4, MIN_CPU 2; -- 保证最小资源 -- 设置内存硬限制 ALTER SYSTEM SET _ob_tenant_memory_limit_percentage 70;5. 租户管理实战经验5.1 连接管理技巧连接多租户时容易搞混端口这里有个小技巧# MySQL模式连接 obclient -h127.0.0.1 -P2881 -uroothtap_tenant#obcluster -p -A # Oracle模式连接 obclient -h127.0.0.1 -P2881 -usysoracle_tenant#obcluster -p -A5.2 监控与调优查看租户资源使用情况-- 查看单元配置 SELECT * FROM oceanbase.__all_unit_config; -- 查看实际资源使用 SELECT * FROM oceanbase.__all_virtual_server_stat;遇到性能问题时我通常会先检查这两个指标CPU_USED_MAX MAX_CPU 说明需要扩容MEMORY_USED MEMORY_LIMIT 会出现OOM5.3 常见问题排查问题1创建租户时报resource not enough 解决方法-- 查看剩余资源 SELECT * FROM oceanbase.__all_virtual_server_stat WHERE zone IN (zone1,zone2,zone3); -- 可以尝试减少unit配置或清理其他租户问题2连接时报tenant not exist 检查步骤确认租户名大小写正确检查ob_tcp_invited_nodes白名单查看租户状态是否正常SELECT * FROM oceanbase.__all_tenant WHERE tenant_name HTAP_TENANT;6. 生产环境最佳实践经过多个项目实践我总结出这些经验资源规划原则每个unit至少预留20%资源bufferOLTP租户unit_num建议设置为zone数量的整数倍日志盘大小至少是内存的3倍高可用配置-- 多zone部署示例 CREATE TENANT critical_tenant PRIMARY_ZONE zone1;zone2;zone3, -- Leader优先级 LOCALITY Fzone1,Fzone2,Fzone3 -- 全功能副本安全建议创建后立即修改root密码限制ob_tcp_invited_nodes范围定期备份租户数据记得有次我们一个报表租户把集群内存耗尽了导致交易租户受影响。后来我们通过设置memory_limit参数避免了这个问题这也让我深刻体会到多租户虽好但不加限制的资源共享反而会带来风险。

相关新闻