OBCP第一章:OB分布式架构高级技术

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: OBCP第一章:OB分布式架构高级技术

OB聚合资源的物理表示

OB聚合资源的逻辑表示

OB资源的分配流程

资源管理相关操作:资源单元

创建/修改资源单元

CREATE/ALTER RESOURCE UNIT unitname 
MAX_CPU [=] cpunum, 
MAX_MEMORY [=] memsize, 
MAX_IOPS [=] iopsnum, 
MAX_DISK_SIZE [=] disksize, 
MAX_SESSION_NUM [=] sessionnum, 
[MIN_CPU [=] cpunum,]
[MIN_MEMORY [=] memsize,] 
[MIN_IOPS [=] iopsnum];

删除资源单元

DROP RESOURCE UNIT unitname;

查看资源单元配置

SELECT * FROM __all_unit_config;

资源管理相关操作:资源单元操作示例

创建资源单元

create resource unit ut_5c2g max_cpu=2, max_memory='1G', max_iops=10000, 
max_disk_size='10G', max_session_num=1000000;

修改资源单元

alter resource unit ut_5c2g max_cpu=5, max_memory='2G';

查看资源单元配置

SELECT * FROM __all_unit_config;

删除资源单元

DROP RESOURCE UNIT ut_5c2g;

资源管理相关操作:资源池

创建源池

CREATE RESOURCE POOL poolname
UNIT [=] unitname, 
UNIT_NUM [=] unitnum,##取值要小于等于对应 Zone 中的 OBServer 个数
ZONE_LIST [=](‘zone’[,‘zone’…]);

修改资源池

ALTER RESOURCE POOL poolname 
UNIT [=] unitname, 
UNIT_NUM [=] unitnum, 
ZONE_LIST [=] (‘zone’ [, ‘zone’ …]);

查看资源池

SELECT * FROM __all_resource_pool;

查看资源池

SELECT * FROM __all_resource_pool;

资源管理相关操作:资源池操作示例

创建源池

create resource pool pl_5c2g unit=ut_2c2g, unit_num=1;

修改资源池

alter resource pool pl_5c2g unit=ut_5c2g;

查看资源池

SELECT * FROM __all_resource_pool;

删除资源池

DROP RESOURCE POOL poolname;

租户相关操作

新增租户

CREATE TENANT [IF NOT EXISTS] tenantname 
[tenant_characteristic_list] [opt_set_sys_var]
tenant_characteristic_list: 
tenant_characteristic [, tenant_characteristic...]
tenant_characteristic: 
COMMENT 'string' 
|{CHARACTER SET | CHARSET} [=] charsetname 
|COLLATE [=] collationname
|ZONE_LIST [=] (zone [, zone…]) 
|PRIMARY_ZONE [=] zone 
|DEFAULT TABLEGROUP [=] {NULL | tablegroup}
|RESOURCE_POOL_LIST [=](poolname [, poolname…])
|LOGONLY_REPLICA_NUM [=] num
|LOCALITY [=] 'locality description'
opt_set_sys_var:
{ SET | SET VARIABLES | VARIABLES } system_var_name = expr [,system_var_name = expr]

租户相关操作

修改租户

ALTER TENANT {tenant_name | ALL}
[SET] [tenant_option_list] [opt_global_sys_vars_set]
tenant_option_list:
tenant_option [, tenant_option ...]
tenant_option:
COMMENT [=]'string' 
|{CHARACTER SET | CHARSET} [=] charsetname 
|COLLATE [=] collationname 
|ZONE_LIST [=] (zone [, zone…]) 
|PRIMARY_ZONE [=] zone 
|RESOURCE_POOL_LIST [=](poolname [, poolname…]) 
|DEFAULT TABLEGROUP [=] {NULL | tablegroupname}
|{READ ONLY | READ WRITE}
|LOGONLY_REPLICA_NUM [=] num
|LOCALITY [=] 'locality description'
|LOCK|UNLOCK; 
opt_global_sys_vars_set:
VARIABLES system_var_name = expr [,system_var_name = expr]

租户相关操作

删除租户

DROP TENANT tenant_name [FORCE/PURGE]
延迟删除
    进入回收站
    DROP TENANT tenant_name;
    不进入回收站
    DROP TENANT tenant_name PURGE;
    立即删除
    DROP TENANT tenant_name FORCE;

查看租户

select * from __all_tenant;

租户相关操作示例

新增租户

create tenant obcp_t1 charset='utf8mb4', zone_list=('zone1,zone2,zone3'), 
primary_zone='zone1,zone2,zone3', resource_pool_list=('pl_5c2g') set 
ob_tcp_invited_nodes=‘%';

修改租户

ALTER TENANT obcp_t1 primary_zone='zone2';

查看租户

select * from __all_tenant;

删除租户

DROP TENANT obcp_t1 force;

资源分配情况

查看集群资源由各个节点的聚合情况

select zone,
concat(svr_ip, ':', svr_port) observer,
cpu_capacity,
cpu_total,
cpu_assigned,
cpu_assigned_percent,
mem_capacity,
mem_total,
mem_assigned,
mem_assigned_percent,
unit_Num,
round('load', 2) 'load',
round('cpu_weight', 2) 'cpu_weight',
round('memory_weight', 2) 'mem_weight',
leader_count
from __all_virtual_server_stat
order by zone, svr_ip;

创建租户时的资源分配


资源单元及租户的相关要点

资源单元是资源分配的最小单元,同一个Unit不能跨节点(OBServer)

每个租户在一台observer上只能有一个unit

Unit是数据的容器

一个租户可以拥有若干个资源池

一个资源池只能属于一个租户

资源单元是集群负载均衡的一个基本单位

创建租户分区表时的资源分配:租户有1个unit

每个分区有三个副本,默认leader副本提供 读写服务,follower副本不提供服务

每个分区的三副本内容是一样的

创建租户分区表时的资源分配:租户有多个Unit

                               

资源池及租户初始化成功(tnt_pay)

create tablegroup tgorder partition by hash partitions 3;

每个分区有三个副本,默认leader副本提供读写服务

同一个分区不能跨Unit,同一个分区表不同分区可以跨Unit

同一个分区不能跨Unit,同一个分区表不同分区可以跨Unit


租户扩容

租户扩容方法一:升级规格S2到S3

alter resource pool pool_mysql unit='S3’;

租户扩容方法二:增加Unit的数量

alter resource pool pool_mysql unit_num=2;

租户资源初始状态:unit_num=1

分区分布初始状态:t1,t3,t4

租户资源扩容:unit_num->2

分区复制,分区组聚合一起,Leader打散

切换分区服务

删除旧分区

分区是数据迁移的最小单元,同一个分区不能跨 Unit,不同分区可以跨Unit

同号分区组的分区稳定在同一个Unit内部

Zone管理及状态


新增ZONE(状态为Inactive)

ALTER SYSTEM ADD ZONE 'zone';


删除ZONE(无状态)

ALTER SYSTEM DELETE ZONE ‘zone';

上线ZONE(状态为Active)

ALTER SYSTEM START ZONE 'zonename';

下线ZONE(状态为Inative)

ALTER SYSTEM STOP ZONE ’zonename’;

Server管理及状态

添加Server(状态为Inactive,随后切为active[start_service_time>0])

ALTER SYSTEM ADD SERVER 'ip:port'[ZONE='zone_name'];

删除Server(状态为Deleting)

ALTER SYSTEM DELETE SERVER 'ip:port'[ZONE='zone_name'];

取消删除Server(状态为Active[start_service_time>0或stop_time>0])

ALTER SYSTEM CANCEL DELETE SERVER 'ip:port' [,'ip:port'…] 
[ZONE=’zone_name’];

Start Server (状态为Active[start_service_time>0且 Active[stop_time=0])

ALTER SYSTEM START SERVER 'ip:port' [,'ip:port'...] 
[ZONE='zone'];

Stop Server (状态为Active[stop_time>0])

ALTER SYSTEM STOP SERVER 'ip:port' [,'ip:port'...] [ZONE='zone'];

集群扩容

集群初始状态:2-2-2

Unit:每个Zone4个Unit

集群扩容:2-2-2->3-3-3

目标端创建新Unit

分区复制,角色切换

下线多余分区及Unit

Unit是资源调度的最小单元

图中Unit移动是示意图,实际细节是 目标端先创建Unit,然后分区复制和 切换

参数控制 enable_rebalance 和 enable_auto_leader_switch

OceanBase的资源弹性伸缩与负载均衡相关参数

负载均衡功能参数

enable_rebalance 是否开启自动负载均衡的功能

控制负载均衡时Partition迁移的速度和影响

migrate_concurrency 用于控制控制内部数据迁移的并发度

data_copy_concurrency 用于设置系统中并发执行的数据迁移复制任务的最大并发数

server_data_copy_out_concurrency 用于设置单个节点迁出数据的最大并发数

server_data_copy_in_concurrency 用于设置单个节点迁入数据的最大并发数

查看业务租户内部所有leader副本的位置

select t5.tenant_name,t4.database_name,t3.tablegroup_name,t1.table_id,
t1.table_name,t2.partition_id,t2.role,t2.zone,
concat(t2.svr_ip,':',t2.svr_port) observer,
round(t2.data_size / 1024 / 1024) data_size_mb,
t2. row_count
from __all_virtual_table t1
join gv$partition t2
on (t1.tenant_id = t2.tenant_id and t1.table_id = t2.table_id)
left join __all_tablegroup t3
on (t1.tenant_id = t3.tenant_id and t1.tablegroup_id = t3.tablegroup_id)
join __all_database t4
on (t1.tenant_Id = t4.tenant_id and t1.database_id = t4.database_id)
join __all_tenant t5
on (t1.tenant_id = t5.tenant_id)
where t5.tenant_id = 1020
and t2.role = 1
order by t5.tenant_name,t4.database_name,
t3.tablegroup_name,t2.partition_id;

异地多活会有很多内部请求跨机房


相关文章
|
19天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
12天前
|
监控 安全 API
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
本文详细介绍了PaliGemma2模型的微调流程及其在目标检测任务中的应用。PaliGemma2通过整合SigLIP-So400m视觉编码器与Gemma 2系列语言模型,实现了多模态数据的高效处理。文章涵盖了开发环境构建、数据集预处理、模型初始化与配置、数据加载系统实现、模型微调、推理与评估系统以及性能分析与优化策略等内容。特别强调了计算资源优化、训练过程监控和自动化优化流程的重要性,为机器学习工程师和研究人员提供了系统化的技术方案。
133 77
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
|
3天前
|
设计模式 存储 算法
分布式系统架构5:限流设计模式
本文是小卷关于分布式系统架构学习的第5篇,重点介绍限流器及4种常见的限流设计模式:流量计数器、滑动窗口、漏桶和令牌桶。限流旨在保护系统免受超额流量冲击,确保资源合理分配。流量计数器简单但存在边界问题;滑动窗口更精细地控制流量;漏桶平滑流量但配置复杂;令牌桶允许突发流量。此外,还简要介绍了分布式限流的概念及实现方式,强调了限流的代价与收益权衡。
31 11
|
5天前
|
设计模式 监控 Java
分布式系统架构4:容错设计模式
这是小卷对分布式系统架构学习的第4篇文章,重点介绍了三种常见的容错设计模式:断路器模式、舱壁隔离模式和重试模式。断路器模式防止服务故障蔓延,舱壁隔离模式通过资源隔离避免全局影响,重试模式提升短期故障下的调用成功率。文章还对比了这些模式的优缺点及适用场景,并解释了服务熔断与服务降级的区别。尽管技术文章阅读量不高,但小卷坚持每日更新以促进个人成长。
26 11
|
7天前
|
消息中间件 存储 安全
分布式系统架构3:服务容错
分布式系统因其复杂性,故障几乎是必然的。那么如何让系统在不可避免的故障中依然保持稳定?本文详细介绍了分布式架构中7种核心的服务容错策略,包括故障转移、快速失败、安全失败等,以及它们在实际业务场景中的应用。无论是支付场景的快速失败,还是日志采集的安全失败,每种策略都有自己的适用领域和优缺点。此外,文章还为技术面试提供了解题思路,助你在关键时刻脱颖而出。掌握这些策略,不仅能提升系统健壮性,还能让你的技术栈更上一层楼!快来深入学习,走向架构师之路吧!
41 11
|
9天前
|
自然语言处理 负载均衡 Kubernetes
分布式系统架构2:服务发现
服务发现是分布式系统中服务实例动态注册和发现机制,确保服务间通信。主要由注册中心和服务消费者组成,支持客户端和服务端两种发现模式。注册中心需具备高可用性,常用框架有Eureka、Zookeeper、Consul等。服务注册方式包括主动注册和被动注册,核心流程涵盖服务注册、心跳检测、服务发现、服务调用和注销。
43 12
|
21天前
|
消息中间件 架构师 数据库
本地消息表事务:10Wqps 高并发分布式事务的 终极方案,大厂架构师的 必备方案
45岁资深架构师尼恩分享了一篇关于分布式事务的文章,详细解析了如何在10Wqps高并发场景下实现分布式事务。文章从传统单体架构到微服务架构下分布式事务的需求背景出发,介绍了Seata这一开源分布式事务解决方案及其AT和TCC两种模式。随后,文章深入探讨了经典ebay本地消息表方案,以及如何使用RocketMQ消息队列替代数据库表来提高性能和可靠性。尼恩还分享了如何结合延迟消息进行事务数据的定时对账,确保最终一致性。最后,尼恩强调了高端面试中需要准备“高大上”的答案,并提供了多个技术领域的深度学习资料,帮助读者提升技术水平,顺利通过面试。
本地消息表事务:10Wqps 高并发分布式事务的 终极方案,大厂架构师的 必备方案
|
2天前
|
存储 缓存 负载均衡
从零到一:分布式缓存技术初探
分布式缓存通过将数据存储在多个节点上,利用负载均衡算法提高访问速度、降低数据库负载并增强系统可用性。常见产品有Redis、Memcached等。其优势包括性能扩展、高可用性、负载均衡和容错性,适用于页面缓存、应用对象缓存、状态缓存、并行处理、事件处理及极限事务处理等多种场景。
14 1
|
6天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
27 2
|
19天前
|
运维 Cloud Native 持续交付
云原生技术深度探索:重塑现代IT架构的无形之力####
本文深入剖析了云原生技术的核心概念、关键技术组件及其对现代IT架构变革的深远影响。通过实例解析,揭示云原生如何促进企业实现敏捷开发、弹性伸缩与成本优化,为数字化转型提供强有力的技术支撑。不同于传统综述,本摘要直接聚焦于云原生技术的价值本质,旨在为读者构建一个宏观且具体的技术蓝图。 ####