Skip to content

OceanBase 租户创建

租户创建前准备

资源池准备

  1. 创建资源单元:定义租户的最小资源分配单位
  2. 创建资源池:将资源单元分配给资源池
  3. 配置资源池属性:设置资源池的副本分布、主可用区等
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');

网络准备

  1. 配置 OBProxy:确保 OBProxy 已正确配置,能够路由到新租户
  2. 配置防火墙:确保网络连接畅通,端口可访问
  3. 配置 DNS:如有需要,配置 DNS 解析

权限准备

  1. 确保有创建租户的权限:只有具有 CREATE TENANT 权限的用户才能创建租户
  2. 准备租户管理员账户:规划租户管理员用户名和密码
  3. 配置初始权限:规划租户初始的权限配置

租户创建流程

使用 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 创建租户

  1. 登录 OCP 控制台
  2. 进入集群详情页
  3. 点击 "租户管理" 标签页
  4. 点击 "创建租户" 按钮
  5. 填写租户基本信息:租户名、租户模式、管理员账户等
  6. 配置资源:选择资源池、设置主可用区等
  7. 配置高级选项:字符集、时区、Locality 等
  8. 确认配置并提交创建请求
  9. 等待租户创建完成

租户创建后配置

  1. 登录租户:使用租户管理员账户登录租户
  2. 创建初始数据库:创建业务所需的数据库
  3. 创建用户和角色:创建业务用户和角色,分配权限
  4. 配置租户参数:根据业务需求调整租户级参数
  5. 创建表和索引:创建业务表和索引
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'

租户创建最佳实践

资源配置建议

  1. 合理规划资源:根据业务需求和预期增长规划资源
  2. 使用标准化资源单元:创建标准化的资源单元,便于管理和扩展
  3. 考虑高可用性:确保资源池分布在多个可用区
  4. 预留扩展空间:预留一定的资源余量,用于业务增长

租户配置建议

  1. 选择合适的字符集:根据业务需求选择合适的字符集,建议使用 utf8mb4
  2. 配置合理的 primary zone:根据业务访问模式配置 primary zone
  3. 配置合适的 locality:根据可用性要求配置副本分布
  4. 设置合理的参数:根据业务需求调整租户级参数

安全性建议

  1. 使用强密码:为租户管理员设置强密码
  2. 限制管理员权限:遵循最小权限原则,只授予必要的权限
  3. 启用审计日志:启用租户级审计日志,记录关键操作
  4. 定期更换密码:定期更换租户管理员密码

租户创建监控与验证

监控租户创建进度

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: 可以通过以下方式调整已创建租户的资源:

  1. 为租户添加新的资源池
  2. 修改资源池的资源单元
  3. 调整资源池的单元数量
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: 租户创建失败时,可以尝试以下操作:

  1. 查看错误信息,分析失败原因
  2. 检查资源池是否可用
  3. 检查权限是否足够
  4. 检查网络连接是否正常
  5. 查看 OceanBase 日志,获取详细错误信息

Q5: 如何创建只读租户?

A5: 可以通过以下方式创建只读租户:

  1. 正常创建租户
  2. 配置租户为只读模式
  3. 调整租户的资源配置和权限
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';