请教社区版如何绕开obdeploy,直接通过observer建立集群

【产品名称】OceanBase社区版

【产品版本】3.1.0

【问题描述】想在自己笔记本(CPU 6核12线程,16GB内存)上安装一个逻辑上2个observer(分别属于2个zone)组成的OceanBase集群,平时做做功能测试啥的。按理说可以直接起2个observer进程来组集群,但笔记本装的是国产的深度deepin操作系统(基于Debian),就没法直接安装社区版。然后就想用两个CentOS 7的Docker容器来起observer进程组成集群,但Docker容器整SSH太麻烦了,就没法用OBDeploy部署。自己摸索了一下,在单容器上起observer,bootstrap成功,能够建租户等。但基本上同样的配置分别在两个容器上起observer,然后登录进行两个zone组成一个集群的bootstrap,最后等了很久就会报timeout。

具体操作步骤如下:

  1. 两个容器的`home_path`下手动创建`etc`、`etc2`、`etc3`、`run`、`admin`、`log`和`store`目录。`store`目录作为数据目录,在其下手动创建`sstable`、`clog`、`ilog`和`slog`目录。
  2. 在`home_path`目录下:
  • 容器一(IP:`172.16.238.11`)运行命令:`observer -z zone1 --mysql_port 2883 --rpc_port 2882 -i eth0 -l WARN -d /root/oceanbase/store -c 1 -r “172.16.238.11:2882:2883;172.16.238.12:2882:2883” -o “memory_limit=8G,datafile_disk_percentage=20,datafile_size=8G,system_memory=2G,stack_size=512K,cpu_count=6,workers_per_cpu_quota=5,net_thread_count=2,sys_bkgd_migration_retry_num=3,enable_syslog_recycle=true,max_syslog_file_count=1,__min_full_resource_pool_memory=268435456,cache_wash_threshold=1G”`。
  • 容器二(IP:`172.16.238.12`)运行命令:observer -z zone2 --mysql_port 2883 --rpc_port 2882 -i eth0 -l WARN -d /root/oceanbase/data -c 1 -r “172.16.238.11:2882:2883;172.16.238.12:2882:2883” -o “memory_limit=8G,datafile_disk_percentage=20,datafile_size=8G,system_memory=2G,stack_size=512K,cpu_count=6,workers_per_cpu_quota=5,net_thread_count=2,sys_bkgd_migration_retry_num=3,enable_syslog_recycle=true,max_syslog_file_count=1,__min_full_resource_pool_memory=268435456,cache_wash_threshold=1G”`

两者就是ZONE的名字不一样而已,一个是`zone1`,另一个是`zone2`。

然后登录任意一个容器,使用`obclient-h127.0.0.1-uroot-P2883`连接observer,执行BOOTSTRAP操作:`ALTER SYSTEM BOOTSTRAP ZONE ‘zone1’ SERVER ‘172.16.238.11:2882’, ZONE ‘zone2’ SERVER ‘172.16.238.12:2882’;`。登了很久之后得到的是timeout的错误。

这个过程中笔记本的CPU占用都在40%以下,内存占用都在88%以下。因为在同一台终端上,两个容器的时间是同步的,`clockdiff`了一下结果是`host=172.16.238.12 rtt=750(187)ms/0ms delta=0ms/0ms Wed Jun 23 16:27:23 2021`。

感觉可能还是observer的启动参数不对?折腾了一天没想明白,想求助一下大家。

晚上按照开源项目上的说明,在deepin上编译了observer。也是单个observer只组成一个zone的话能够启动成功,正常使用:

cd z1
rm -rf etc etc2 etc3 run admin log data store
mkdir etc etc2 etc3 run admin log data
ln -sf ${PWD}/data ${PWD}/store
cd data
mkdir sstable clog ilog slog

sudo ./observer -z zone1 --mysql_port 2883 --rpc_port 2882 -i lo -l WARN -d ${PWD}/data -c 1 -r "127.0.0.1:2882:2883" -o "memory_limit=8G,datafile_disk_percentage=20,datafile_size=8G,system_memory=2G,stack_size=512K,cpu_count=6,workers_per_cpu_quota=5,net_thread_count=2,sys_bkgd_migration_retry_num=3,enable_syslog_recycle=true,max_syslog_file_count=1,__min_full_resource_pool_memory=268435456,cache_wash_threshold=1G"

启动后连接到observer,执行`ALTER SYSTEM BOOTSTRAP ZONE 'zone1' SERVER '127.0.0.1:2882';`。能够成功初始化数据库。

但是如果是起两个observer进程,想分别属于两个zone(zone1和zone2):

cd z1
rm -rf etc etc2 etc3 run admin log data store
mkdir etc etc2 etc3 run admin log data
ln -sf ${PWD}/data ${PWD}/store
cd data
mkdir sstable clog ilog slog
cd ..
sudo ./observer -z zone1 --mysql_port 2883 --rpc_port 2882 -i lo -l WARN -d ${PWD}/data -c 1 -r "127.0.0.1:2882:2883;127.0.0.1:2884:2885" -o "memory_limit=8G,datafile_disk_percentage=20,datafile_size=8G,system_memory=2G,stack_size=512K,cpu_count=6,workers_per_cpu_quota=5,net_thread_count=2,sys_bkgd_migration_retry_num=3,enable_syslog_recycle=true,max_syslog_file_count=1,__min_full_resource_pool_memory=268435456,cache_wash_threshold=1G"

cd ../z2
rm -rf etc etc2 etc3 run admin log data store
mkdir etc etc2 etc3 run admin log data
ln -sf ${PWD}/data ${PWD}/store
cd data
mkdir sstable clog ilog slog
cd ..
sudo ./observer -z zone2 --mysql_port 2885 --rpc_port 2884 -i lo -l WARN -d ${PWD}/data -c 1 -r "127.0.0.1:2882:2883;127.0.0.1:2884:2885" -o "memory_limit=8G,datafile_disk_percentage=20,datafile_size=8G,system_memory=2G,stack_size=512K,cpu_count=6,workers_per_cpu_quota=5,net_thread_count=2,sys_bkgd_migration_retry_num=3,enable_syslog_recycle=true,max_syslog_file_count=1,__min_full_resource_pool_memory=268435456,cache_wash_threshold=1G"

然后连接zone1的observer,执行`ALTER SYSTEM BOOTSTRAP ZONE 'zone1' SERVER '127.0.0.1:2882', ZONE 'zone2' SERVER '127.0.0.1:2884';`的时候,zone1的observer进程会马上退出,过一会zone2的observer也会自己退出。



日志打了14万行,看得我头大。。。

为什么就起一会日志会打了这么多。。。

1 个赞

两个zone不能bootstrap。先单zone bootsrap成功,然后加zone。从单副本是可以扩容到三副本(经过两副本)。两副本没意义,测试不了高可用。不如做单副本两节点测试(单副本不等同单节点)。

https://mp.weixin.qq.com/s/L0uBV8s5gXagiylz4vYyOg

https://mp.weixin.qq.com/s/r68FME4vipz4lSrYeRadWA

OceanBase 社区版部署示例 - OceanBase