外观
OceanBase 租户创建
租户创建前准备
资源池准备
- 创建资源单元:定义租户的最小资源分配单位
- 创建资源池:将资源单元分配给资源池
- 配置资源池属性:设置资源池的副本分布、主可用区等
sql
-- 创建资源单元
CREATE RESOURCE UNIT 'unit_name'
MAX_CPU = 4,
MIN_CPU = 4,
MEMORY_SIZE = '8G',
MAX_IOPS = 10000,
MIN_IOPS = 10000,
IOPS_WEIGHT = 1,
LOG_DISK_SIZE = '20G';
-- 创建资源池
CREATE RESOURCE POOL 'pool_name'
RESOURCE_UNIT = 'unit_name',
UNIT_NUM = 1,
ZONE_LIST = ('zone1', 'zone2', 'zone3');网络准备
- 配置 OBProxy:确保 OBProxy 已正确配置,能够路由到新租户
- 配置防火墙:确保网络连接畅通,端口可访问
- 配置 DNS:如有需要,配置 DNS 解析
权限准备
- 确保有创建租户的权限:只有具有 CREATE TENANT 权限的用户才能创建租户
- 准备租户管理员账户:规划租户管理员用户名和密码
- 配置初始权限:规划租户初始的权限配置
租户创建流程
使用 SQL 语句创建租户
sql
-- 创建基础租户
CREATE TENANT 'tenant_name'
RESOURCE_POOL_LIST = ('pool_name')
PRIMARY_ZONE = 'zone1,zone2,zone3'
LOCALITY = 'F@zone1,F@zone2,F@zone3'
COMMENT '租户描述';
-- 创建带管理员账户的租户
CREATE TENANT 'tenant_name'
RESOURCE_POOL_LIST = ('pool_name')
PRIMARY_ZONE = 'zone1,zone2,zone3'
LOCALITY = 'F@zone1,F@zone2,F@zone3'
SET default_tablegroup = 'sys_tablegroup',
charset = 'utf8mb4',
collation = 'utf8mb4_general_ci'
ADMIN_USER = 'admin',
ADMIN_PASSWORD = 'password';使用 OCP 创建租户
- 登录 OCP 控制台
- 进入集群详情页
- 点击 "租户管理" 标签页
- 点击 "创建租户" 按钮
- 填写租户基本信息:租户名、租户模式、管理员账户等
- 配置资源:选择资源池、设置主可用区等
- 配置高级选项:字符集、时区、Locality 等
- 确认配置并提交创建请求
- 等待租户创建完成
租户创建后配置
- 登录租户:使用租户管理员账户登录租户
- 创建初始数据库:创建业务所需的数据库
- 创建用户和角色:创建业务用户和角色,分配权限
- 配置租户参数:根据业务需求调整租户级参数
- 创建表和索引:创建业务表和索引
sql
-- 登录租户后创建数据库
CREATE DATABASE business_db;
-- 创建业务用户
CREATE USER 'business_user' IDENTIFIED BY 'password';
-- 分配权限
GRANT ALL PRIVILEGES ON business_db.* TO 'business_user';
-- 调整租户参数
ALTER SYSTEM SET ob_query_timeout = 15000 TENANT = 'tenant_name';租户创建配置选项
基本配置
| 配置项 | 描述 | 示例值 |
|---|---|---|
| tenant_name | 租户名称 | 'tenant_name' |
| resource_pool_list | 租户使用的资源池列表 | ('pool1', 'pool2') |
| primary_zone | 租户的主可用区 | 'zone1,zone2,zone3' |
| locality | 租户的副本分布策略 | 'F@zone1,F@zone2,F@zone3' |
| comment | 租户描述 | '业务租户' |
高级配置
| 配置项 | 描述 | 示例值 |
|---|---|---|
| charset | 租户默认字符集 | 'utf8mb4' |
| collation | 租户默认校对规则 | 'utf8mb4_general_ci' |
| default_tablegroup | 租户默认表组 | 'sys_tablegroup' |
| default_tenant_pool | 租户默认资源池 | 'pool_name' |
| zone_priority | 可用区优先级 | 'zone1,zone2,zone3' |
管理员配置
| 配置项 | 描述 | 示例值 |
|---|---|---|
| admin_user | 租户管理员用户名 | 'admin' |
| admin_password | 租户管理员密码 | 'password' |
| admin_privilege | 管理员权限 | 'ALL' |
租户创建最佳实践
资源配置建议
- 合理规划资源:根据业务需求和预期增长规划资源
- 使用标准化资源单元:创建标准化的资源单元,便于管理和扩展
- 考虑高可用性:确保资源池分布在多个可用区
- 预留扩展空间:预留一定的资源余量,用于业务增长
租户配置建议
- 选择合适的字符集:根据业务需求选择合适的字符集,建议使用 utf8mb4
- 配置合理的 primary zone:根据业务访问模式配置 primary zone
- 配置合适的 locality:根据可用性要求配置副本分布
- 设置合理的参数:根据业务需求调整租户级参数
安全性建议
- 使用强密码:为租户管理员设置强密码
- 限制管理员权限:遵循最小权限原则,只授予必要的权限
- 启用审计日志:启用租户级审计日志,记录关键操作
- 定期更换密码:定期更换租户管理员密码
租户创建监控与验证
监控租户创建进度
sql
-- 查看租户创建进度
SELECT * FROM oceanbase.DBA_OB_TENANT_CREATE_PROGRESS WHERE tenant_name = 'tenant_name';
-- 查看租户状态
SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name = 'tenant_name';验证租户创建结果
sql
-- 验证租户是否存在
SELECT tenant_id, tenant_name, status FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name = 'tenant_name';
-- 验证租户资源配置
SELECT * FROM oceanbase.DBA_OB_RESOURCE_POOLS WHERE tenant_name = 'tenant_name';
-- 验证租户管理员权限
SHOW GRANTS FOR 'admin'@'%' TENANT = 'tenant_name';测试租户连接
bash
# 使用 MySQL 客户端连接租户
mysql -h 127.0.0.1 -P 2883 -u admin@tenant_name -p -D sys
# 执行简单查询验证连接
SELECT version();常见问题(FAQ)
Q1: 创建租户需要哪些权限?
A1: 只有具有 CREATE TENANT 权限的用户才能创建租户。通常,sys 租户的 root 用户或具有 DBA 权限的用户拥有此权限。
Q2: 如何调整已创建租户的资源?
A2: 可以通过以下方式调整已创建租户的资源:
- 为租户添加新的资源池
- 修改资源池的资源单元
- 调整资源池的单元数量
sql
-- 为租户添加资源池
ALTER TENANT 'tenant_name' ADD RESOURCE POOL_LIST = ('new_pool');
-- 从租户移除资源池
ALTER TENANT 'tenant_name' DROP RESOURCE POOL_LIST = ('old_pool');Q3: 如何删除租户?
A3: 可以使用以下命令删除租户:
sql
-- 删除租户
DROP TENANT 'tenant_name';
-- 强制删除租户(如果无法正常删除)
DROP TENANT 'tenant_name' FORCE;Q4: 租户创建失败时如何处理?
A4: 租户创建失败时,可以尝试以下操作:
- 查看错误信息,分析失败原因
- 检查资源池是否可用
- 检查权限是否足够
- 检查网络连接是否正常
- 查看 OceanBase 日志,获取详细错误信息
Q5: 如何创建只读租户?
A5: 可以通过以下方式创建只读租户:
- 正常创建租户
- 配置租户为只读模式
- 调整租户的资源配置和权限
sql
-- 创建只读租户
CREATE TENANT 'readonly_tenant'
RESOURCE_POOL_LIST = ('readonly_pool')
PRIMARY_ZONE = 'zone1,zone2,zone3'
LOCALITY = 'F@zone1,F@zone2,F@zone3';
-- 配置租户为只读
ALTER TENANT 'readonly_tenant' SET read_only = 'true';