创建新zone后,只能设置单zone单server,无法设置单zone多server

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】
/home/admin/oceanbase/bin/observer --version

observer (OceanBase_CE 4.1.0.1)

REVISION: 102000042023061314-43bca414d5065272a730c92a645c3e25768c1d05

BUILD_BRANCH: HEAD

BUILD_TIME: Jun 13 2023 14:26:23

BUILD_FLAGS: RelWithDebInfo

BUILD_INFO:

Copyright (c) 2011-2022 OceanBase Inc.
【问题描述】
这个版本的OB无法类似文档设置单ZONE多server或者多zone多server,只能添加单zone 单server
三台机器成功启动

启动命令:

Zone1 server1

$ cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -i eth0 -P 2882 -p 2881 -z zone1 -d /home/admin/oceanbase/store/obdemo -r ‘10.xx.xx.xx1:2882:2881’ -c 10001 -n obdemo -o “__min_full_resource_pool_memory=1073741824,memory_limit=15G,system_memory=2G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2”

Zone2 server2

$ cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -i eth0 -P 2882 -p 2881 -z zone2 -d /home/admin/oceanbase/store/obdemo -r ‘10.xx.xx.xx2:2882:2881;10.xx.xx.xx3:2882:2881’ -c 10002 -n obdemo -o “__min_full_resource_pool_memory=1073741824,memory_limit=15G,system_memory=2G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2”

Zone2 server3

$ cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -i eth0 -P 2882 -p 2881 -z zone2 -d /home/admin/oceanbase/store/obdemo -r ‘10.xx.xx.xx2:2882:2881;10.xx.xx.xx3:2882:2881’ -c 10002 -n obdemo -o “__min_full_resource_pool_memory=1073741824,memory_limit=15G,system_memory=2G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2”

操作命令及报错:

server1上登录OB初始化并进行添加zone和添加server操作

obclient [(none)]> ALTER SYSTEM BOOTSTRAP ZONE ‘zone1’ SERVER ‘10.xx.xx.xx1:2882’;
Query OK, 0 rows affected (47.305 sec)

obclient [(none)]> ALTER SYSTEM ADD ZONE zone2 IDC ‘hz1’, REGION ‘hangzhou’;
Query OK, 0 rows affected (0.010 sec)

obclient [oceanbase]> ALTER SYSTEM START ZONE zone2;
Query OK, 0 rows affected (0.007 sec)

obclient [(none)]> ALTER SYSTEM ADD SERVER ‘10.xx.xx.xx2:2882;10.xx.xx.xx3:2882’ ZONE ‘zone2’;
ERROR 1210 (HY000): Invalid argument

参考文档:

https://www.oceanbase.com/docs/common-oceanbase-database-10000000001697238

【复现路径】
【问题现象及影响】
主要是想知道分区是把数据存放在一个zone里面的多台server,还是会跨zone存放?
比如:
t1-p1,t1-p2,t1-p3的主副本是全部在zone1里面的server上进行存放,
还是t1-p1和t1-p2主副本在zone1,t1-p3主副本在zone2的server里面?

如果分区数据存放在一个zone里面,那一个zone里面只有一台server的话,是不是所有的分区数据都是在这台server上,在使用OBProxy情况下,业务跑起来的时候其实写压力和强一致性读压力也是打到这个server上,其他zone里面的server只会有同步数据和弱一致性读的压力?

【附件】

首先,你的三节点进程启动参数是不对的。
三节点要组建集群,则启动时指定的 rootservice 地址、集群 id 和集群名字要保持一致。这样后期 bootstrap 和 add server 才能互相通信。

第二,你节点很多,有两个思路组建集群。

一是三节点直接为三个 zone,启动参数 -r 直接指定三个节点, 在 bootstrap 的时候也指定三个节点地址,直接初始化出一个三节点三副本集群。

具体方法步骤可以看看 OceanBase 社区

二就是先节点 1 和 2 启动时-r 都指定节点 1。节点 1 自己 bootstrap 成功后,再 add server 节点 2(zone2)。此时集群就是两副本两节点。在启动节点 3,zone 为 zone3, -r 参数可以只有节点 1,也可以同时有节点 1 和节点 2。然后再节点 1 上再次 add server zone3 节点 3。此时就变成一个三节点三副本集群。不要玩两副本,要么单副本,要么三副本。如果还有节点 4,你可以选择加入到哪个 zone,那么启动参数就指定那个 zone,同时-r 指定为前面三个节点。然后在前面集群里 add server 节点 4 以及指定那个 zone。

所以,要点是
a.所有节点启动参数里集群 id 和名字必须保持一致。
b.节点启动时 的参数 zone 决定了它后面只能是集群中那个 zone。参数 -r 是当时集群的 rootservice 地址。如果是第一个节点还没有集群,那这个参数就是它自己。 多个节点各自为政是组建不了集群。

这一步成功后再来讨论你的数据分布问题。

也可以参考下面视频

感谢回复,我发现我的启动参数上面设置有点问题,可能我的表述也有点乱,我换成如下启动参数:

# Zone1 server1
$ cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -i eth0 -P 2882 -p 2881 -z zone1 -d /home/admin/oceanbase/store/obdemo -r '10.xx.xx.xx1:2882:2881;10.xx.xx.xx2:2882:2881;10.xx.xx.xx3:2882:2881' -c 10001 -n obdemo -o "__min_full_resource_pool_memory=1073741824,memory_limit=15G,system_memory=2G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"


# Zone1 server2
$ cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -i eth0 -P 2882 -p 2881 -z zone1 -d /home/admin/oceanbase/store/obdemo -r '10.xx.xx.xx1:2882:2881;10.xx.xx.xx2:2882:2881;10.xx.xx.xx3:2882:2881' -c 10001 -n obdemo -o "__min_full_resource_pool_memory=1073741824,memory_limit=15G,system_memory=2G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"

# Zone1 server3
$ cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -i eth0 -P 2882 -p 2881 -z zone1 -d /home/admin/oceanbase/store/obdemo -r '10.xx.xx.xx1:2882:2881;10.xx.xx.xx2:2882:2881;10.xx.xx.xx3:2882:2881' -c 10001 -n obdemo -o "__min_full_resource_pool_memory=1073741824,memory_limit=15G,system_memory=2G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"

我的想法其实是一个zone里面添加多台server,比如我就分一个zone,zone1里面包含了server1,server2,server3,但是在BOOTSTRAP初始化的时候无法再同一个zone里面添加多个server,添加节点的时候也是会有一样的情况,一个zone里面只能添加一台server,添加多台就报 ERROR 1210 (HY000): Invalid argument

$ obclient -h127.1 -uroot -P2881 -p
Enter password:
Welcome to the OceanBase.  Commands end with ; or \g.
Your OceanBase connection id is 3221225472
Server version: OceanBase_CE 4.1.0.1 (r102000042023061314-43bca414d5065272a730c92a645c3e25768c1d05) (Built Jun 13 2023 14:26:23)

Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

obclient [(none)]> SET SESSION ob_query_timeout=1000000000;
Query OK, 0 rows affected (0.001 sec)

obclient [(none)]> ALTER SYSTEM BOOTSTRAP ZONE 'zone1' SERVER '10.xx.xx.xx1:2882;10.xx.xx.xx2:2882;10.xx.xx.xx3:2882';
ERROR 1210 (HY000): Invalid argument
obclient [(none)]>

如果换成zone1=server1,zone2=server,zone3=zone3这种单zone单server的话是可以添加成功的

$ obclient -h127.1 -uroot -P2881 -p
Enter password:
Welcome to the OceanBase.  Commands end with ; or \g.
Your OceanBase connection id is 3221225472
Server version: OceanBase_CE 4.1.0.1 (r102000042023061314-43bca414d5065272a730c92a645c3e25768c1d05) (Built Jun 13 2023 14:26:23)

Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

obclient [(none)]> SET SESSION ob_query_timeout=1000000000;
Query OK, 0 rows affected (0.001 sec)

obclient [(none)]> ALTER SYSTEM BOOTSTRAP ZONE 'zone1' SERVER '10.xx.xx.xx1:2882',ZONE 'zone2' SERVER '10.xx.xx.xx2:2882',ZONE 'zone3' SERVER '10.xx.xx.xx3:2882';
Query OK, 0 rows affected (1 min 4.026 sec)

其实从上面的报错来看,好像这个版本不支持单zone多server的部署方式,一个zone下只能添加一台server,但是从整体架构图和添加zone参考文档上看应该是支持单zone里面有多台server的
整体架构图文档:
https://www.oceanbase.com/docs/common-oceanbase-database-10000000001687909

如果是想单 zone 加多个 observer,则启动参数 -r 只需要一个节点,第一个节点即可。单副本的 rs 节点只能有一个。第一个节点负责做 bootstrap,后面节点挨个加入,这样就有单副本三节点集群了。

如果这个 rs 挂掉了呢,那 rs 就不可用了。并不会飘到其他节点。这就是单副本的弊端,没有高可用。

了解,感谢,我试了下依次添加server进去是可以的,但是不能一次性添加,那个文档上写法有点问题,看是否改下?
https://www.oceanbase.com/docs/common-oceanbase-database-10000000001697238

obclient [(none)]> SET SESSION ob_query_timeout=1000000000;
Query OK, 0 rows affected (0.001 sec)

obclient [(none)]> ALTER SYSTEM BOOTSTRAP ZONE 'zone1' SERVER '10.xx.xx.xx1:2882';
Query OK, 0 rows affected (46.175 sec)


obclient [oceanbase]> ALTER SYSTEM ADD SERVER '10.xx.xx.xx2:2882' ZONE 'zone1';
Query OK, 0 rows affected (0.015 sec)

obclient [oceanbase]> ALTER SYSTEM ADD SERVER '10.xx.xx.xx3:2882' ZONE 'zone1';
Query OK, 0 rows affected (0.010 sec)

你把后面加的 2 个节点删除一下,再用下面 SQL 加一下,看看报什么错

ALTER SYSTEM ADD SERVER '10.xx.xx.xx2:2882','10.xx.xx.xx3:2882' ZONE 'zone1';

官网文档中举例里面把 逗号 写成 分号 是错误的。

这个可以正常执行,没有报错的,