外观
OceanBase 租户创建与管理
租户创建准备
1. 资源规划
在创建租户前,需要进行资源规划,包括:
- CPU 资源:根据业务负载需求分配 CPU 核数
- 内存资源:根据数据量和查询复杂度分配内存大小
- 存储资源:规划租户数据存储位置和容量
- 网络资源:配置租户网络隔离和访问控制
2. 资源单元创建
创建租户前需要先创建资源单元,定义租户可以使用的资源规格:
sql
-- 创建 CPU 资源单元
CREATE RESOURCE UNIT cpu_unit MAX_CPU 16, MIN_CPU 8, MEMORY_SIZE '32G', MAX_IOPS 10000, MIN_IOPS 5000;
-- 创建内存优化型资源单元
CREATE RESOURCE UNIT memory_unit MAX_CPU 8, MIN_CPU 4, MEMORY_SIZE '64G', MAX_IOPS 20000, MIN_IOPS 10000;
-- 创建 IO 优化型资源单元
CREATE RESOURCE UNIT iops_unit MAX_CPU 12, MIN_CPU 6, MEMORY_SIZE '48G', MAX_IOPS 50000, MIN_IOPS 25000;3. 资源池创建
创建资源池,将资源单元分配给特定的租户:
sql
-- 创建资源池
CREATE RESOURCE POOL tenant_pool
UNIT 'cpu_unit',
UNIT_NUM 3,
ZONE_LIST ('zone1', 'zone2', 'zone3');租户创建流程
1. 创建租户
使用 CREATE TENANT 命令创建租户:
sql
-- 创建 MySQL 租户
CREATE TENANT mysql_tenant
RESOURCE_POOL_LIST = ('tenant_pool'),
PRIMARY_ZONE = 'zone1,zone2,zone3',
LOCALITY = 'F@zone1,F@zone2,F@zone3',
COMMENT 'MySQL compatible tenant';
-- 创建 Oracle 租户
CREATE TENANT oracle_tenant
RESOURCE_POOL_LIST = ('tenant_pool'),
PRIMARY_ZONE = 'zone1,zone2,zone3',
LOCALITY = 'F@zone1,F@zone2,F@zone3',
COMMENT 'Oracle compatible tenant',
TENANT_MODE = 'ORACLE';2. 配置租户参数
创建租户后,需要配置租户级参数:
sql
-- 切换到租户上下文
ALTER SYSTEM CHANGE TENANT mysql_tenant;
-- 配置租户参数
ALTER SYSTEM SET max_connections = 10000;
ALTER SYSTEM SET open_files_limit = 65535;
ALTER SYSTEM SET sort_buffer_size = '16M';
ALTER SYSTEM SET join_buffer_size = '16M';3. 创建租户用户
创建租户内部用户并授权:
sql
-- 创建管理员用户
CREATE USER admin IDENTIFIED BY 'password123';
-- 授予管理员权限
GRANT ALL PRIVILEGES ON *.* TO admin WITH GRANT OPTION;
-- 创建普通用户
CREATE USER app_user IDENTIFIED BY 'app_password123';
-- 授予应用用户权限
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO app_user;租户管理操作
1. 查看租户信息
sql
-- 查看所有租户
SELECT * FROM oceanbase.DBA_OB_TENANTS;
-- 查看租户详细信息
SELECT * FROM oceanbase.DBA_OB_TENANT_STATUS WHERE tenant_name = 'mysql_tenant';
-- 查看租户资源分配
SELECT * FROM oceanbase.DBA_OB_RESOURCE_POOLS WHERE tenant_name = 'mysql_tenant';2. 修改租户资源
sql
-- 增加租户资源单元
ALTER TENANT mysql_tenant RESOURCE_POOL_LIST = ('tenant_pool', 'additional_pool');
-- 修改租户资源池
ALTER RESOURCE POOL tenant_pool UNIT_NUM = 5;
-- 切换租户主区域
ALTER TENANT mysql_tenant PRIMARY_ZONE = 'zone2,zone3,zone1';3. 租户状态管理
sql
-- 暂停租户
ALTER TENANT mysql_tenant SUSPEND;
-- 恢复租户
ALTER TENANT mysql_tenant RESUME;
-- 锁定租户
ALTER TENANT mysql_tenant LOCK;
-- 解锁租户
ALTER TENANT mysql_tenant UNLOCK;4. 删除租户
sql
-- 删除租户(谨慎操作)
DROP TENANT mysql_tenant FORCE;租户权限管理
1. 角色管理
sql
-- 创建角色
CREATE ROLE read_only_role;
CREATE ROLE write_role;
-- 授予角色权限
GRANT SELECT ON *.* TO read_only_role;
GRANT INSERT, UPDATE, DELETE ON *.* TO write_role;
-- 授予角色给用户
GRANT read_only_role TO app_user;
GRANT write_role TO admin_user;2. 权限回收
sql
-- 回收用户权限
REVOKE DELETE ON app_db.* FROM app_user;
-- 回收角色权限
REVOKE SELECT ON *.* FROM read_only_role;3. 权限审计
sql
-- 查看用户权限
SHOW GRANTS FOR app_user;
-- 查看角色权限
SHOW GRANTS FOR read_only_role;租户监控与维护
1. 租户状态监控
sql
-- 查看租户 CPU 使用情况
SELECT * FROM oceanbase.GV$OB_TENANT_STAT WHERE tenant_name = 'mysql_tenant' AND stat_id = 'cpu_total';
-- 查看租户内存使用情况
SELECT * FROM oceanbase.GV$OB_TENANT_MEMORY WHERE tenant_name = 'mysql_tenant';
-- 查看租户 IO 情况
SELECT * FROM oceanbase.GV$OB_TENANT_IO WHERE tenant_name = 'mysql_tenant';2. 租户日志管理
sql
-- 查看租户错误日志
SELECT * FROM oceanbase.GV$OB_ERROR_LOG WHERE tenant_name = 'mysql_tenant' ORDER BY log_time DESC;
-- 查看租户慢查询日志
SELECT * FROM oceanbase.GV$OB_SLOW_QUERY WHERE tenant_name = 'mysql_tenant' ORDER BY query_time DESC;3. 租户备份恢复
sql
-- 创建租户级备份
BACKUP TENANT mysql_tenant TO 'backup_location' WITH SNAPSHOT;
-- 恢复租户
RESTORE TENANT mysql_tenant FROM 'backup_location' WITH SNAPSHOT 'snapshot_id';租户创建最佳实践
1. 资源配置最佳实践
- 按业务类型选择合适的资源单元类型
- 根据业务增长预留 30-50% 的资源余量
- 对于读写分离场景,为只读租户分配独立资源池
- 定期调整资源配置,根据业务负载变化进行优化
2. 租户隔离最佳实践
- 不同业务线使用独立租户,实现完全隔离
- 生产环境和测试环境使用不同租户
- 敏感业务使用独立租户,并配置严格的访问控制
3. 权限管理最佳实践
- 遵循最小权限原则,只授予必要的权限
- 使用角色管理权限,便于权限回收和调整
- 定期审计用户权限,移除不必要的权限
- 配置强密码策略,定期更换密码
4. 监控与告警最佳实践
- 为每个租户配置独立的监控指标
- 设置合理的告警阈值,及时发现异常
- 定期分析租户性能数据,优化资源配置
- 建立租户级别的故障处理流程
常见问题(FAQ)
Q1: 创建租户失败的常见原因有哪些?
A1: 创建租户失败的常见原因包括:
- 资源池资源不足
- 区域配置错误
- 权限不足
- 参数配置不合理
- 集群状态不稳定
Q2: 如何选择合适的资源单元类型?
A2: 资源单元类型选择建议:
- CPU 密集型业务:选择 CPU 优化型资源单元
- 内存密集型业务:选择内存优化型资源单元
- IO 密集型业务:选择 IO 优化型资源单元
- 混合负载:选择均衡型资源单元
Q3: 如何调整租户资源?
A3: 调整租户资源的方法:
- 增加资源池中的资源单元数量
- 扩大资源单元的规格
- 为租户添加新的资源池
- 调整资源池的区域分布
Q4: 如何实现租户级别的备份恢复?
A4: 租户级备份恢复步骤:
- 配置备份策略
- 执行租户级备份
- 验证备份完整性
- 在需要时执行租户恢复
Q5: 如何监控租户的性能?
A5: 监控租户性能的方法:
- 使用 OceanBase 内置视图监控租户指标
- 配置第三方监控工具(如 Prometheus + Grafana)
- 设置性能告警阈值
- 定期分析性能报告
