有1-1-1的ob集群,想让应用单独访问一个ob server

我们使用的ob版本是421,目前有3个zone,每个zone一台服务器。目前ob上存在2个应用,一个是oracle模式的租户一个是mysql模式的租户。也配置了obproxy。
我们的想法是将ob没问题的时候当成单机来用,也就是正常情况下 想让租户A 访问zone1 租户B 访问zone2 所有的主副本都在一个机器上。避免分布式产生的资源消耗。应该怎么设置呢?

目前想法:
我首先设置primary zone为server1;server2,server3; 然后再把LOCALITY 调成F@zone1,R@zone2,R@zone3 这样是不是可以了 还需要在设置个tablegroup么 将其指定为SHARDING = NONE

可以实现么

部署成单副本就好了,比如:

2 个赞

都设置顺序优先级即可。设置R副本的话,当前zone出问题,这个租户就只读了,不用tablegroup了。
设置 租户A primary zone = zone1;zone2;zone3
设置 租户B primary zone = zone2;zone3;zone1

1 个赞

既然集群拓扑是1-1-1,那么租户 A、B、C 都按正常方式创建,拓扑 1-1-1 分布。
然后 租户 A、B、C 的primary_zone 分别设置为 不同的zone即可。

alter tenant tenanta primary_zone='zone1';
alter tenant tenantb primary_zone='zone2';
alter tenant tenantc primary_zone='zone3';

locality、tablegroup 不需要为此而特别设置。

那你这个不是不能均衡了?只有一个副本的意思?其他zone上没有副本了?

如果有问题的时候再改成P副本,这样不行么? 只设置优先级就可以 不是还需要查看leader的分布么

我之前 用了一个租户测试 本身是zone1,zone2,zone3,现在我指定成了zone1;zone2,zone3 这样其实就可以了?怎么才能确定说这个租户已经访问到指定zone上了?

设置R副本意义不大。优先级设置完,会切分区leader到第一优先的zone上的。

那就只设置primary zone就行?也就是我说的第一步,后面的R副本和table group 都不用设置,这样就能让对应租户 当成单机来用了? 怎么可以查到租户确实已经用到这个指定的zone了,而没用到其他的zone

CDB_OB_TABLE_LOCATIONS 这个视图查leader位置即可。

是的,单副本,就是这样的,挂了,那就是挂了

三个zone,自然是有三个副本。只不过是leader提供服务。触发leader挂了,会切主到其他zone。通过设置租户zone的优先级,限定其leader节点的位置。我是这样理解的。至于您说的其他zone上不产生副本,是不可能的。有几个zone,就有几个副本。

1 个赞