外观
OceanBase 租户配置
租户配置分类
1. 资源配置
资源配置定义了租户可以使用的系统资源,包括CPU、内存、存储等。
| 配置项 | 描述 | 单位 | 示例 |
|---|---|---|---|
| CPU | 租户可以使用的CPU资源 | 核 | 8 |
| 内存 | 租户可以使用的内存资源 | GB | 16 |
| 存储 | 租户可以使用的存储资源 | GB | 100 |
| IOPS | 租户可以使用的IOPS资源 | 次/秒 | 10000 |
2. 性能配置
性能配置影响租户的性能表现,包括SQL执行、事务处理、存储访问等。
| 配置项 | 描述 | 示例 |
|---|---|---|
| 连接数 | 租户允许的最大连接数 | 1000 |
| 超时时间 | SQL执行、事务等的超时时间 | 30s |
| 并行度 | SQL执行的最大并行度 | 8 |
| 缓存大小 | 各种缓存的大小配置 | 2GB |
3. 安全配置
安全配置保障租户的数据安全和访问安全。
| 配置项 | 描述 | 示例 |
|---|---|---|
| 密码策略 | 租户用户的密码策略 | 复杂度要求、有效期 |
| 访问控制 | 租户的访问控制策略 | IP白名单、SSL/TLS |
| 审计日志 | 租户的审计日志配置 | 开启审计、日志级别 |
4. 高级配置
高级配置包括一些特殊场景下的配置项。
| 配置项 | 描述 | 示例 |
|---|---|---|
| 租户模式 | 租户的运行模式 | 读写、只读 |
| 复制模式 | 租户的复制模式 | 同步、异步 |
| 备份策略 | 租户的备份策略 | 全量备份频率、保留期 |
租户配置操作
1. 创建资源单元
资源单元定义了单个节点上租户可以使用的资源规格。
语法格式
sql
CREATE RESOURCE UNIT unit_name
MAX_CPU = cpu_num,
MIN_CPU = cpu_num,
MEMORY_SIZE = 'mem_size',
MAX_IOPS = iops_num,
MIN_IOPS = iops_num,
IOPS_WEIGHT = iops_weight,
LOG_DISK_SIZE = 'log_disk_size',
MAX_SESSION_NUM = max_session_num;示例
sql
-- 创建资源单元
CREATE RESOURCE UNIT small_unit
MAX_CPU = 2,
MIN_CPU = 2,
MEMORY_SIZE = '4G',
MAX_IOPS = 5000,
MIN_IOPS = 5000,
IOPS_WEIGHT = 1,
LOG_DISK_SIZE = '10G',
MAX_SESSION_NUM = 1000;
CREATE RESOURCE UNIT medium_unit
MAX_CPU = 8,
MIN_CPU = 8,
MEMORY_SIZE = '16G',
MAX_IOPS = 20000,
MIN_IOPS = 20000,
IOPS_WEIGHT = 1,
LOG_DISK_SIZE = '40G',
MAX_SESSION_NUM = 5000;
CREATE RESOURCE UNIT large_unit
MAX_CPU = 16,
MIN_CPU = 16,
MEMORY_SIZE = '32G',
MAX_IOPS = 50000,
MIN_IOPS = 50000,
IOPS_WEIGHT = 1,
LOG_DISK_SIZE = '80G',
MAX_SESSION_NUM = 10000;2. 创建资源池
资源池是资源单元的集合,分配给租户使用。
语法格式
sql
CREATE RESOURCE POOL pool_name
UNIT = 'unit_name',
UNIT_NUM = unit_num,
ZONE_LIST = ('zone1', 'zone2', 'zone3');示例
sql
-- 创建资源池
CREATE RESOURCE POOL small_pool
UNIT = 'small_unit',
UNIT_NUM = 1,
ZONE_LIST = ('zone1', 'zone2', 'zone3');
CREATE RESOURCE POOL medium_pool
UNIT = 'medium_unit',
UNIT_NUM = 1,
ZONE_LIST = ('zone1', 'zone2', 'zone3');
CREATE RESOURCE POOL large_pool
UNIT = 'large_unit',
UNIT_NUM = 1,
ZONE_LIST = ('zone1', 'zone2', 'zone3');3. 创建租户
创建租户时,需要指定租户使用的资源池和其他配置。
语法格式
sql
CREATE TENANT tenant_name
[IF NOT EXISTS]
[CHARACTER SET = charset]
[COLLATE = collation]
[ZONE_LIST = ('zone1', 'zone2', 'zone3')]
[PRIMARY_ZONE = 'primary_zone']
[RESOURCE_POOL_LIST = ('pool1', 'pool2')]
[DEFAULT TABLEGROUP = 'tablegroup_name']
[LOCALITY = 'locality_description']
[COMMENT = 'comment'];示例
sql
-- 创建租户
CREATE TENANT test_tenant
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci
PRIMARY_ZONE = 'zone1,zone2,zone3'
RESOURCE_POOL_LIST = ('medium_pool')
LOCALITY = 'F@zone1,F@zone2,F@zone3' -- 3副本部署
COMMENT = '测试租户';
-- 创建只读租户
CREATE TENANT readonly_tenant
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci
PRIMARY_ZONE = 'zone1'
RESOURCE_POOL_LIST = ('small_pool')
LOCALITY = 'R@zone1,R@zone2' -- 只读副本
COMMENT = '只读租户';4. 修改租户配置
可以修改租户的资源配置、性能配置等。
语法格式
sql
-- 修改租户资源池
ALTER TENANT tenant_name RESOURCE_POOL_LIST = ('pool_name');
-- 修改租户的primary zone
ALTER TENANT tenant_name SET PRIMARY_ZONE = 'primary_zone';
-- 修改租户的locality
ALTER TENANT tenant_name SET LOCALITY = 'locality_description';
-- 修改租户的变量配置
ALTER SYSTEM SET variable_name = 'value' TENANT = tenant_name;示例
sql
-- 修改租户资源池
ALTER TENANT test_tenant RESOURCE_POOL_LIST = ('large_pool');
-- 修改租户的primary zone
ALTER TENANT test_tenant SET PRIMARY_ZONE = 'zone2';
-- 修改租户的locality(增加副本)
ALTER TENANT test_tenant SET LOCALITY = 'F@zone1,F@zone2,F@zone3,F@zone4';
-- 修改租户的连接数
ALTER SYSTEM SET max_connections = 2000 TENANT = test_tenant;
-- 修改租户的SQL超时时间
ALTER SYSTEM SET ob_query_timeout = 60000000 TENANT = test_tenant;5. 查看租户配置
可以查看租户的各种配置信息。
语法格式
sql
-- 查看所有租户
SHOW TENANTS;
-- 查看租户详细信息
DESCRIBE TENANT tenant_name;
-- 查看租户的资源池
SELECT * FROM __all_resource_pool WHERE tenant_id = (SELECT tenant_id FROM __all_tenant WHERE tenant_name = 'tenant_name');
-- 查看租户的变量配置
SHOW VARIABLES TENANT = tenant_name;
-- 查看租户的系统参数
SHOW PARAMETERS TENANT = tenant_name;示例
sql
-- 查看所有租户
SHOW TENANTS;
-- 查看test_tenant的详细信息
DESCRIBE TENANT test_tenant;
-- 查看test_tenant的资源池
SELECT * FROM __all_resource_pool WHERE tenant_id = (SELECT tenant_id FROM __all_tenant WHERE tenant_name = 'test_tenant');
-- 查看test_tenant的变量配置
SHOW VARIABLES TENANT = test_tenant;
-- 查看test_tenant的系统参数
SHOW PARAMETERS LIKE '%timeout%' TENANT = test_tenant;租户配置最佳实践
1. 资源配置最佳实践
- 根据业务需求配置:根据租户的业务类型和负载情况,配置合适的资源规格
- 预留资源余量:为租户配置的资源应预留一定余量,避免资源不足影响业务
- 资源隔离:不同租户的资源应相互隔离,避免相互影响
- 动态调整:根据业务负载的变化,动态调整租户的资源配置
- 使用资源池:通过资源池管理租户资源,便于统一调整和管理
2. 性能配置最佳实践
- 连接数配置:根据业务并发需求,配置合适的最大连接数
- 超时时间配置:根据业务SQL的执行特点,配置合适的超时时间
- 并行度配置:根据SQL的复杂度和数据量,配置合适的并行度
- 缓存配置:根据业务访问模式,配置合适的缓存大小
- 参数调优:根据业务特点,调整相关的性能参数
3. 安全配置最佳实践
- 强密码策略:配置强密码策略,要求用户使用复杂密码
- 定期密码更换:要求用户定期更换密码,避免密码泄露
- 访问控制:配置IP白名单,限制只允许特定IP访问租户
- SSL/TLS:启用SSL/TLS连接,加密客户端与数据库的通信
- 审计日志:启用审计日志,记录所有操作,便于审计和追溯
4. 高级配置最佳实践
- 租户模式选择:根据业务需求,选择合适的租户模式(读写或只读)
- 复制模式选择:根据业务的可用性要求,选择合适的复制模式(同步或异步)
- 备份策略配置:根据业务的RPO要求,配置合适的备份策略
- 多租户隔离:确保多租户之间的资源、数据和访问相互隔离
- 租户生命周期管理:建立租户的创建、使用、调整和删除的完整生命周期管理流程
租户配置的性能优化
1. CPU配置优化
- 合理分配CPU资源:根据租户的CPU使用情况,合理分配CPU资源
- CPU绑定:将租户的CPU资源绑定到特定的CPU核上,减少CPU上下文切换
- CPU优先级:为重要租户配置较高的CPU优先级,确保其性能
- 监控CPU使用率:实时监控租户的CPU使用率,及时调整配置
2. 内存配置优化
- 内存分配比例:合理分配内存的使用比例,包括Buffer Cache、Plan Cache、Session内存等
- 内存限制:为租户配置合适的内存限制,避免内存溢出
- 内存监控:实时监控租户的内存使用情况,及时调整配置
- 内存回收:优化内存回收机制,提高内存的使用效率
3. 存储配置优化
- 存储隔离:为不同租户配置独立的存储资源,避免相互影响
- 存储类型:根据租户的存储需求,选择合适的存储类型(SSD、HDD等)
- 存储配额:为租户配置合适的存储配额,避免存储资源滥用
- 存储监控:实时监控租户的存储使用情况,及时调整配置
4. IO配置优化
- IOPS分配:根据租户的IO需求,合理分配IOPS资源
- IO优先级:为重要租户配置较高的IO优先级,确保其IO性能
- IO调度:优化IO调度算法,提高IO的使用效率
- IO监控:实时监控租户的IO使用情况,及时调整配置
租户配置的常见问题
1. 资源不足
问题描述:租户的资源不足,导致业务性能下降或无法正常运行。
可能原因:
- 租户的资源配置不足
- 集群的整体资源不足
- 其他租户占用了过多资源
解决方法:
- 增加租户的资源配置
- 扩展集群的整体资源
- 调整其他租户的资源配置
- 优化租户的资源使用效率
2. 性能下降
问题描述:租户的性能下降,SQL执行变慢。
可能原因:
- 资源配置不合理
- SQL语句优化不佳
- 统计信息过期
- 系统参数配置不合理
解决方法:
- 调整租户的资源配置
- 优化SQL语句
- 更新统计信息
- 调整系统参数
3. 连接数超限
问题描述:租户的连接数超过了配置的最大值,导致无法建立新连接。
可能原因:
- 业务并发连接数过高
- 连接泄漏(应用程序未正确关闭连接)
- 连接池配置不合理
解决方法:
- 增加租户的最大连接数
- 优化应用程序的连接使用
- 调整连接池的配置
- 监控连接使用情况,及时发现连接泄漏
4. 存储溢出
问题描述:租户的存储使用超过了配置的配额,导致无法写入数据。
可能原因:
- 数据量增长过快
- 存储配额配置不足
- 存在大量的临时数据或过期数据
解决方法:
- 增加租户的存储配额
- 清理过期数据或临时数据
- 优化数据存储,如压缩表、分区表等
- 监控存储使用情况,预测未来存储需求
租户配置的案例分析
案例1:租户资源调整
背景:某租户的业务量增长迅速,CPU使用率持续超过90%,导致业务性能下降。
解决方案:调整租户的资源配置,增加CPU和内存资源。
实施步骤:
- 查看租户当前的资源配置
- 创建更大的资源单元和资源池
- 将租户的资源池调整为新创建的资源池
- 验证调整后的资源使用情况
实施效果:
- 租户的CPU使用率下降到60%以下
- 业务性能得到明显提升
- 业务能够正常处理增长的请求
案例2:租户性能优化
背景:某租户的SQL执行时间较长,影响业务响应速度。
解决方案:优化租户的性能配置,调整相关参数。
实施步骤:
- 分析慢查询,找出性能瓶颈
- 调整租户的并行度参数,提高复杂SQL的执行效率
- 增加租户的缓存大小,提高数据访问速度
- 调整SQL超时时间,避免长查询占用资源
实施效果:
- SQL平均执行时间从5秒缩短到1秒
- 业务响应速度得到明显提升
- 租户的资源使用效率提高
常见问题(FAQ)
Q1: 如何确定租户的资源配置?
A1: 确定租户资源配置的方法:
- 分析租户的业务需求和负载情况
- 参考类似租户的资源配置
- 进行性能测试,确定合适的资源配置
- 监控租户的资源使用情况,动态调整
Q2: 如何调整租户的资源配置?
A2: 调整租户资源配置的步骤:
- 创建新的资源单元和资源池(如果需要)
- 使用ALTER TENANT语句修改租户的资源池
- 验证调整后的资源使用情况
- 监控租户的性能表现
Q3: 如何优化租户的性能?
A3: 优化租户性能的方法:
- 合理配置租户的资源
- 优化SQL语句
- 更新统计信息
- 调整系统参数
- 优化数据模型和索引
Q4: 如何监控租户的配置和性能?
A4: 监控租户配置和性能的方法:
- 使用OCP的监控功能
- 查询OceanBase的系统视图
- 使用Prometheus和Grafana进行监控
- 配置告警规则,及时发现问题
Q5: 如何管理多个租户?
A5: 管理多个租户的方法:
- 使用角色管理多个租户的权限
- 建立租户的标准化配置模板
- 定期审查租户的配置和使用情况
- 建立租户的生命周期管理流程
Q6: 如何确保租户的隔离性?
A6: 确保租户隔离性的方法:
- 为不同租户配置独立的资源池
- 使用资源隔离技术,如CPU隔离、内存隔离等
- 配置合适的资源限制,避免资源滥用
- 监控租户的资源使用情况,及时发现异常
Q7: 如何备份和恢复租户配置?
A7: 备份和恢复租户配置的方法:
- 定期备份租户的配置信息
- 使用OCP的配置管理功能
- 使用SQL语句导出和导入租户配置
- 建立配置变更的审计和回滚机制
Q8: 如何处理租户的配置冲突?
A8: 处理租户配置冲突的方法:
- 建立统一的配置管理流程
- 使用配置模板,确保配置的一致性
- 定期审查配置,发现和解决冲突
- 建立配置变更的审批机制
