集群初始创建了zone1,zone2,每个zone下面有一个observer,现给zone1增加了一个observer,且增加一个zone3,但是ocp控制台中,显示的资源水位没有变化

大家好,我给zone1新增加的一个Observer,和新增加的一个zone3,为啥这个资源水位图没有变化呢,这个集群下已经创建了租户,在我增加zone3之前租户数据库已有数据,我后面又同步了新的数据到数据库中

3 个赞

你的图忘记贴了。

OB 的扩容有两个层面,一个是集群层面扩容(给zone加机器或者加zone),二个是租户层面扩容(给租户的zone加unit_num或者给租户加zone)。二者是独立的,租户扩容的前提是集群里有剩余资源。你看到的 0% 就表示那个机器资源分配是0(还没有使用),并不是你给集群加了机器 就一定会被使用。是有可能被使用也有可能不被使用。

如果你手动部署过 OB 集群,然后新建租户,你就知道租户的产生原理。那么扩容这里就好理解了。
OB 扩缩容原理可以看: 揭秘OceanBase的弹性伸缩和负载均衡原理

V4 版本下查看 集群资源和租户资源分布 SQL 如下:

select zone,concat(SVR_IP,':',SVR_PORT) observer,
	cpu_capacity_max cpu_total,cpu_assigned_max cpu_assigned,
	cpu_capacity-cpu_assigned_max as cpu_free,
	round(memory_limit/1024/1024/1024,2) as memory_total,
	round((memory_limit-mem_capacity)/1024/1024/1024,2) as system_memory,
	round(mem_assigned/1024/1024/1024,2) as mem_assigned,
	round((mem_capacity-mem_assigned)/1024/1024/1024,2) as memory_free,
	round(log_disk_capacity/1024/1024/1024,2) as log_disk_capacity,
	round(log_disk_assigned/1024/1024/1024,2) as log_disk_assigned,
	round((log_disk_capacity-log_disk_assigned)/1024/1024/1024,2) as log_disk_free,
	round((data_disk_capacity/1024/1024/1024),2) as data_disk,
	round((data_disk_in_use/1024/1024/1024),2) as data_disk_used,
	round((data_disk_capacity-data_disk_in_use)/1024/1024/1024,2) as data_disk_free
from gv$ob_servers;

select t1.name resource_pool_name, t2.`name` unit_config_name, 
	t2.max_cpu, t2.min_cpu, 
	round(t2.memory_size/1024/1024/1024,2) mem_size_gb,
	round(t2.log_disk_size/1024/1024/1024,2) log_disk_size_gb, t2.max_iops, 
	t2.min_iops, t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,
	t4.tenant_id, t4.tenant_name
from __all_resource_pool t1
	join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)
	join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)
	left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)
order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id;
3 个赞

嗯嗯,是忘记上图了,我这个是属于您说的第一个集群层面的扩容,我给zone1增加了新的observer和新增加zone3,这个资源什么时候能被使用到呢,现在新的observer和zone里面是否有了新数据?我之前理解的创建完之后,由集群自动去管理,现在还显示资源使用0%,是需要我去干预这些资源的使用吗

1 个赞

集群新增zone,租户也要扩容新增zone,该新增zoneil才有数据。
集群zone新增机器,租户数据可能在那台机器或不在,取决于集群资源使用情况是否触发 负载均衡策略。这点不用关心,让ob自行决定。
建议先看看前面文章链接。

2 个赞

我刚才给租户扩容新增zone3之后,资源已经显示出来了,我给zone1新增的这个observer资源,看着还没有体现,我看您上面说的是取决于集群资源使用情况是否触发,由ob自行决定,从我这个截图来看,是不是说明这个新添加的observer目前是还没有使用到的呢

1 个赞

资源管理的截图发下

2 个赞

是的,您这个是哪个版本的observer,如果要做成每个zone的unit不对等,需要调整资源池配置,4.x现有版本应该都得unit在不同zone里对等,没办法自动平均负载,如果是3.x的话可以新建unit=2的资源池给zone1,原有的资源池的zonelist改为zone2,zone3

2 个赞

您好,这是资源管理的截图

1 个赞

你先添加的机器上面都没有任何资源,肯定不会显示水位

您好,我用的版本是4.3.5

你集群的版本是多少4X吗,4X的话不支持不同ZONE里面,租户的UNIT NUM是不一样的,3X是支持的

我给zone1添加的这个observer,应该怎么操作才能使用到这台Observer资源呢,我以为是OB自动处理的

4X你需要在其他ZONE里面也添加一台observer,做到所有ZONE里面的observer数量是一样的,然后把租户的 UNIT NUM调整成2,这样系统才会自动的去做资源的负载均衡

我用的是4.3.5,那是不是说,每个zone里面,资源都应该是一样的?比如说我给另外两个zone,分别再增加一台同规格的Observer,这样OB就能做到自动分配吗

哦,OB的4.x版本为啥这么做呢,感觉有点资源浪费呢,如果扩展observer的话,必须要所有的zone都扩展为相同的资源,这个理解对吗

每个zone资源unit数量是一样的,你把另外两个zone分别增加一台observer,然后改下资源池的unit_num=2,然后就可以自动去分配了

这个不是资源浪费的问题,4X是单机日志流,为了更好实现扩缩容,必须要做到对于同一个租户,在不同的ZONE的 UNIT是一样的,不然你要是扩容和缩容,从日志流层面是没办法实现扩缩容的

2 个赞

您好,请问下,我在给另外两个zone也分别增加一个OBServer期间,我的集群还可以正常对外提供服务吗,我们原始数据有近20T,需要从Mysql迁移到OB,我在想给每个zone扩容OBServer期间,可能时间会比较长


您好,我给另外两个zone分别添加一个OBServer之后,资源水位出来了。
我有一个疑问,比如我有20T的原始mysql数据,迁移到OB,使用2-2-2的架构,是不是我每个OBServer规划的数据磁盘空间每个大于10T就可以呢,剩下的这20T的数据,划分存储到哪个OBServer,需要我们自己关心吗

最好保持每台observer的磁盘数据在70%以下。ob会进行合并等操作磁盘占用量会存在波动。当磁盘占用达到95%ob将停止读写服务

1 个赞