初试单机搭建OB4.0三节点集群
OB4.0 Beta版已于11月2日发布。小伙伴们,让我们赶紧把学习环境搞起来~~
测试目的:
本测试旨在一台虚拟机上,手动启动一个三节点集群(1-1-1),通过sysbench增加集群负载,使用dooba工具实时监测集群性能。该环境可用于集群扩容、缩容、高可用,合并转储等实验,相较于多虚拟机的集群环境来说,启动和加载更为快速,减少了虚拟机的数量和占用的资源。
测试环境:
- 物理机最低32G内存,虚拟机24G内存即可。
- /data需要150G以上空间。
参考视频:
这里推荐两位原厂的UP主:美少女Amber宝宝和obpilot,建议关注UP主并一键三连——鼠标长按点赞图标即可。
使用 sysbench 对 OceanBase 数据库进行 OLTP 性能测试(包含翻车记录)_哔哩哔哩_bilibili
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工具上,观察实时负载情况。