外观
OceanBase 多租户架构
核心概念
OceanBase的多租户架构允许在单个集群中运行多个独立的数据库实例,每个实例称为一个租户。租户之间实现了严格的资源隔离和安全隔离。
租户类型
系统租户:
- 内置管理租户,用于管理整个集群
- 拥有最高权限
- 负责集群级配置和管理
普通租户:
- 用户创建的业务租户
- 分为MySQL模式和Oracle模式
- 共享集群资源,但相互隔离
多租户优势
- 资源利用率高:多个租户共享底层硬件资源
- 成本降低:减少硬件和运维成本
- 快速部署:可以快速创建和销毁租户
- 灵活扩展:支持租户资源的动态调整
- 隔离性好:租户间资源和数据严格隔离
租户隔离机制
1. 资源隔离
- CPU隔离:通过CPU配额和权重实现CPU资源隔离
- 内存隔离:为每个租户分配独立的内存资源池
- 存储隔离:每个租户有独立的表空间和数据文件
- IO隔离:通过IOPS配额和权重实现IO资源隔离
2. 安全隔离
- 数据隔离:租户间数据完全隔离,无法直接访问
- 权限隔离:每个租户有独立的用户和权限系统
- 网络隔离:租户间网络流量隔离
- 配置隔离:租户可独立配置参数
3. 元数据隔离
- 租户元数据独立:每个租户有独立的元数据
- 系统表隔离:每个租户有自己的系统表
- 配置表隔离:每个租户有自己的配置表
租户管理
创建租户
sql
-- 创建MySQL模式租户
CREATE TENANT IF NOT EXISTS tenant_mysql
CHARSET = 'utf8mb4',
PRIMARY_ZONE = 'zone1',
RESOURCE_POOL_LIST = ('pool1'),
COMMENT 'MySQL tenant'
SET ob_tcp_invited_nodes = '%',
ob_compatibility_mode = 'mysql';
-- 创建Oracle模式租户
CREATE TENANT IF NOT EXISTS tenant_oracle
CHARSET = 'utf8mb4',
PRIMARY_ZONE = 'zone1',
RESOURCE_POOL_LIST = ('pool2'),
COMMENT 'Oracle tenant'
SET ob_tcp_invited_nodes = '%',
ob_compatibility_mode = 'oracle';查看租户
sql
-- 查看所有租户
SELECT * FROM oceanbase.DBA_OB_TENANTS;
-- 查看租户详细信息
SELECT * FROM oceanbase.DBA_OB_TENANT_STATUS;修改租户
sql
-- 修改租户资源池
ALTER TENANT tenant_mysql RESOURCE_POOL_LIST = ('pool1', 'pool2');
-- 修改租户参数
ALTER TENANT tenant_mysql SET ob_tcp_invited_nodes = '192.168.1.%';删除租户
sql
-- 删除租户
DROP TENANT tenant_mysql;资源池管理
创建资源池
sql
-- 创建资源池
CREATE RESOURCE POOL pool1
UNIT = 'unit1',
UNIT_NUM = 3,
ZONE_LIST = ('zone1', 'zone2', 'zone3');创建资源单元
sql
-- 创建资源单元
CREATE RESOURCE UNIT unit1
MAX_CPU = 4,
MIN_CPU = 4,
MEMORY_SIZE = '8G',
LOG_DISK_SIZE = '20G',
MAX_IOPS = 10000,
MIN_IOPS = 5000,
IOPS_WEIGHT = 100;查看资源池
sql
-- 查看资源池
SELECT * FROM oceanbase.DBA_OB_RESOURCE_POOLS;
-- 查看资源单元
SELECT * FROM oceanbase.DBA_OB_RESOURCE_UNITS;租户备份与恢复
租户级备份
sql
-- 备份租户
BACKUP TENANT tenant_mysql TO 'backup_path' BACKUPSET 'backup_set_name';
-- 查看备份集
SELECT * FROM oceanbase.DBA_OB_BACKUP_SETS;租户级恢复
sql
-- 恢复租户
RESTORE TENANT tenant_mysql FROM 'backup_path' BACKUPSET 'backup_set_name';
-- 恢复到指定时间点
RESTORE TENANT tenant_mysql FROM 'backup_path' BACKUPSET 'backup_set_name' UNTIL TIME '2023-01-01 12:00:00';租户监控与运维
租户监控指标
| 指标类别 | 关键指标 | 描述 |
|---|---|---|
| 资源使用 | CPU使用率、内存使用率、IOPS、存储使用率 | 租户资源使用情况 |
| 性能指标 | QPS、TPS、响应时间、慢查询数 | 租户性能情况 |
| 连接状态 | 连接数、活跃连接数、连接成功率 | 租户连接情况 |
| 事务状态 | 活跃事务数、死锁数、事务响应时间 | 租户事务情况 |
监控视图
sql
-- 查看租户性能指标
SELECT * FROM oceanbase.GV$OB_TENANT_PERFORMANCE;
-- 查看租户资源使用情况
SELECT * FROM oceanbase.GV$OB_TENANT_RESOURCE_USAGE;
-- 查看租户连接情况
SELECT * FROM oceanbase.GV$OB_TENANT_CONNECTIONS;最佳实践
1. 租户规划
- 合理规划资源:根据业务需求分配资源
- 考虑扩展性:预留资源以应对业务增长
- 隔离关键业务:将关键业务部署在独立租户
- 模式选择:根据业务需求选择MySQL或Oracle模式
2. 资源配置
- 资源单元设计:根据业务负载设计合适的资源单元
- 资源池分布:确保资源池在多个可用区分布
- 动态调整:根据业务负载动态调整资源
- 监控告警:配置资源使用的监控告警
3. 备份策略
- 定期备份:制定合理的备份计划
- 多副本备份:将备份存储在多个位置
- 测试恢复:定期测试备份的恢复能力
- 增量备份:结合全量和增量备份
4. 性能优化
- SQL优化:优化租户内的SQL语句
- 索引优化:合理设计索引
- 连接管理:优化应用程序的连接管理
- 参数调优:根据业务特点调整租户参数
常见问题(FAQ)
Q1: 租户之间的资源是如何隔离的?
A1: OceanBase通过多层隔离机制实现租户间的资源隔离:
- CPU隔离:通过CPU配额和权重
- 内存隔离:为每个租户分配独立的内存池
- 存储隔离:每个租户有独立的表空间
- IO隔离:通过IOPS配额和权重
Q2: 如何选择租户的资源配置?
A2: 租户资源配置应根据业务需求确定:
- 评估业务的CPU、内存、存储和IO需求
- 考虑业务的峰值负载
- 预留一定的资源余量
- 建议从小配置开始,根据实际情况动态调整
Q3: 租户支持哪些数据库模式?
A3: OceanBase支持两种数据库模式:
- MySQL模式:兼容MySQL语法和协议
- Oracle模式:兼容Oracle语法和协议
Q4: 如何监控租户的资源使用情况?
A4: 可以通过以下方式监控租户资源使用:
- 使用OCP进行图形化监控
- 查询系统视图GV$OB_TENANT_RESOURCE_USAGE
- 配置资源使用的告警规则
Q5: 租户可以跨可用区部署吗?
A5: 可以。OceanBase支持将租户的资源池分布在多个可用区,提高租户的可用性和容灾能力。在创建资源池时,可以通过ZONE_LIST指定多个可用区。
