初试单机搭建OB4.0三节点集群

初试单机搭建OB4.0三节点集群

OB4.0 Beta版已于11月2日发布。小伙伴们,让我们赶紧把学习环境搞起来~~

测试目的:

本测试旨在一台虚拟机上,手动启动一个三节点集群(1-1-1),通过sysbench增加集群负载,使用dooba工具实时监测集群性能。该环境可用于集群扩容、缩容、高可用,合并转储等实验,相较于多虚拟机的集群环境来说,启动和加载更为快速,减少了虚拟机的数量和占用的资源。

测试环境:

  • 物理机最低32G内存,虚拟机24G内存即可。
  • /data需要150G以上空间。

参考视频:

这里推荐两位原厂的UP主:美少女Amber宝宝obpilot,建议关注UP主并一键三连——鼠标长按点赞图标即可。

不到两分钟体验OceanBase 数据库 4.0 版

使用 sysbench 对 OceanBase 数据库进行 OLTP 性能测试(包含翻车记录)_哔哩哔哩_bilibili

OceanBase 独立部署高级玩法二 :2C8G版

OB 性能监控分享── dooba_哔哩哔哩_bilibili

1 OB4.0安装及集群初始化

1.1介质下载及安装

安装请阅读官方文档:快速体验OceanBase-OceanBase数据库-OceanBase文档中心-分布式数据库使用文档

安装完成后,执行obd demo启动。待启动完成后,可以观察observer -o参数的变化,其中对于内存及磁盘空间是有最低要求的。

[admin@bogon bin]$ ps -ef|grep observer
admin    12545     1 69 09:23 ?        00:00:58 /home/admin/oceanbase-ce/bin/observer -r 127.0.0.1:2882:2881 -p 2881 -P 2882 -z zone1 -n obcluster -c 1 -d /home/admin/oceanbase-ce/store -i lo -l INFO -o __min_full_resource_pool_memory=2147483648,enable_syslog_recycle=True,enable_syslog_wf=True,max_syslog_file_count=4,memory_limit=6G,datafile_size=20G,log_disk_size=24G,system_memory=1G,cpu_count=16

其中,memory_limit是6G,那么操作系统至少要有6G空闲内存供observer进程使用;system_memory为1G,说明OB租户可用的总内存是6-1=5G。此外,由于demo环境下数据文件和事务日志文件往往共用一个磁盘,为了避免目录空间不够的情况发生,数据文件和事务日志文件都被指定了大小,数据文件大小为20G,日志文件大小为24G。OB4.0 demo要求的最低 54G 空间,显然是在此基础上额外预留了10G用于存放安装介质和log日志等。

1.2搭建集群

# 把以下环境变量加入到~/.bash_profile中
export LD_LIBRARY_PATH=/home/admin/oceanbase-ce/lib

# 创建3节点observer使用的相关目录
for i in {node1,node2,node3};    do \
echo $i; \
mkdir -p ~/$i/{admin,bin,etc}; cp ~/oceanbase-ce/bin/observer ~/$i/bin/; cd ~; \
mkdir -p /data/1/$i/obdemo/store/{clog,slog,sstable}  ;\
mkdir -p /data/1/$i/obdemo/{etc2,etc3}  ;\
done

# 启动observer进程,注意修改主机IP地址
port=2880; \
for i in {3,4,5};    do \
echo $i; node="node"$[$i-2]; \
cd /home/admin/$node/ && /home/admin/$node/bin/observer -i eth0 -p $[$port+1] -P $[$port+2] -z "zone"$[$i%3+1]  -d /data/1/$node/obdemo/store -r '192.168.3.170:2882:2881;192.168.3.170:3882:3881;192.168.3.170:4882:4881' -c 20221103 -n demo01 -o "__min_full_resource_pool_memory=2147483648,enable_syslog_recycle=True,enable_syslog_wf=True,max_syslog_file_count=4,memory_limit=6G,datafile_size=20G,log_disk_size=24G,system_memory=1G,cpu_count=16,config_additional_dir=/data/1/$node/obdemo/etc3;/data/1/$node/obdemo/etc2" ;  \
sleep 3; \
port=$[$port+1000]; \
echo ;cd ~; \
done;
# observer进程启动完成后可检查进程及端口状态
ps -ef|grep observer
netstat -ntlp |grep observer
# 若初始化失败,请检查日志,一般是目录权限问题或资源不足。
# 注意,如果初次bootstrap失败,建议清除所有目录、调整参数后重试。
# 清除安装目录使用admin用户执行如下命令:
# /bin/rm -rf ~/{node1,node2,node3} /data/1/{node1,node2,node3} 

[admin@bogon ~]$ obclient -h127.1 -uroot -A -c -P2881
Welcome to the OceanBase.  Commands end with ; or \g.
Your OceanBase connection id is 3221225473
Server version: OceanBase_CE 4.0.0.0 (r100000272022110114-6af7f9ae79cd0ecbafd4b1b88e2886ccdba0c3be) (Built Nov  1 2022 14:57:18)

Copyright (c) 2000, 2018, OB Corporation Ab and others.

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

obclient [(none)]> set session ob_query_timeout=1000000000; alter system bootstrap ZONE 'zone1' SERVER '192.168.3.170:2882', ZONE 'zone2' SERVER '192.168.3.170:3882', ZONE 'zone3' SERVER '192.168.3.170:4882' ;
Query OK, 0 rows affected (0.001 sec)

Query OK, 0 rows affected (52.149 sec)

2 创建租户和测试数据库

# 创建资源单元,注意参数与OB3.1.4相比有所变化,
create resource unit microunit max_cpu=4,min_cpu=4, MEMORY_SIZE='2G';
# 创建资源池
create resource pool pool01 unit='microunit', unit_num=1;
# 创建租户
create tenant mysql01 resource_pool_list=('pool01'), primary_zone='RANDOM', charset='utf8' set ob_tcp_invited_nodes='%', ob_compatibility_mode='mysql';
# 修改root@sys的密码
alter user root identified by '123456';
# 修改root@mysql01的密码
obclient -h127.1 -uroot@mysql01 -P2881 oceanbase -A
alter user root identified by '123456';
# 在mysql01租户上创建测试数据库及其用户
create database sbtest;
grant all privileges on sbtest.* to sbuser@'%' identified by 'sbtest';

3 手动带参数启动obproxy

# 此时集群中是没有proxyro用户的,需要手动创建
obclient -h127.1 -uroot -p123456 -P2881
create user proxyro identified by '123456';
grant select on *.* to proxyro;

# 带参数启动obproxy,注意首次启动需要添加-e参数
# 初次启动obproxy出现了多次的obproxy's memroy is out of limit错误。
# 分析日志,判断为proxy_mem_limited=200M 值过小,需要在启动参数中指定一个更大的数值,这里用了1G
/home/admin/obproxy-ce/bin/obproxy -p2883 -r'192.168.3.170:2881;192.168.3.170:3881;192.168.3.170:4881' -n demo01 -c demo01 -e -o 'syslog_level=INFO,proxy_mem_limited=1G'

# obproxy正常启动,日志无报错,但此时遇到了obclient登录obproxy的异常。已确认这是一个小BUG
obclient -h127.1 -uroot@proxysys -P2883
ERROR 2027 (HY000): received malformed packet

# 改用mysql客户端登录成功。
mysql -h127.1 -uroot@proxysys -P2883

# 登录root@proxysys,配置obproxy_sys_password和observer_sys_password的密码
[admin@bogon obproxy-ce]$ mysql -h127.1 -uroot@proxysys -P2883
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.25

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MySQL [(none)]> alter proxyconfig set observer_sys_password='123456';
Query OK, 0 rows affected (0.02 sec)

MySQL [(none)]> alter proxyconfig set obproxy_sys_password='123456';
Query OK, 0 rows affected (0.01 sec)

4 性能测试及监控

Sysbench编译安装请查看B站UP主 Amber宝宝 相关视频,本文开头有介绍。具体命令见视频评论。

4.1准备测试数据

此时建议调大freeze_trigger_percentage(默认为20)和major_compact_trigger(默认为0)的值,否则容易出现内存不足。

内存不足时,sysbench会报错:

FATAL: `sysbench.cmdline.call_command' function failed: ./oltp_common.lua:237: db_bulk_insert_next() failed

调整完参数后,使用sysbench准备数据,这里需要修改oltp_read_write.lua文件的路径,其他参数视情况而定。

sysbench --mysql-host=192.168.3.170 --mysql-port=2883 --mysql-db=sbtest --mysql-user="sbuser@mysql01"  --mysql-password=sbtest --tables=8 --table_size=100000 --threads=8 --time=600  --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016 --secondary=on /home/admin/oltp_read_write.lua prepare

4.2使用dooba监控集群

此时,由于我们没有还没有配置prometheus和grafana,可以尝试使用OB生态工具中的dooba监控集群的负载。

该工具类似oracle的oratop,实时监控的结果非常直观。本测试中使用dooba一切正常,未发现与4.0不兼容的情况。

由于新版本的发布,官方文档中dooba的链接已经失效,可前往https://gitee.com/oceanbase/oceanbase/blob/3.1/tools/scripts/dooba.py)获取。

# 启动dooba
# 启动后按C键切换监控目标租户,按数字键2、3切换监控内容
python dooba.py -h 127.0.0.1 -uroot@sys -P2883 -p123456

4.3运行sysbench

测试数据准备完成后,建议执行一次手动合并,可使用如下命令查询合并状态。

select status from DBA_OB_ZONE_MAJOR_COMPACTION;

当STATUS字段为IDEL时,可启动sysbench。

sysbench --mysql-host=192.168.3.170 --mysql-port=2883--mysql-db=sbtest --mysql-user="sbuser@mysql01"  --mysql-password=sbtest --tables=8 --table_size=100000 --threads=8 --time=600  --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016 --secondary=on /home/admin/oltp_read_write.lua run

此时,可以切换到dooba工具上,观察实时负载情况。