OceanBase 2.2初体验

OceanBase是蚂蚁金服自研的分布式关系数据库,2019年国庆期间以6088万tpmC值的成绩,超越Oracle荣登TPC-C基准测试性能榜首。最近因为一些原因赶了趟时髦,体验了一把OceanBase,这年头不搞个什么云,大数据,人工智能,…都不好意思说自己是搞IT的,不会点python,都不敢说自己会编程…

Oceanbase在0.4版本前是开源的,1.0版本后不再开源,目前可以在官网(https://oceanbase.alipay.com/)免费下载到2.2版本的试用版,本文是基于2.2版本的,但不涉及他们的OceanBase运维平台/云平台(OceanBase Cloud Platform – OCP)。

OceanBase(下文简称OB)的安装部署还是很简单的,主要的难点是OB对硬件要求是很高的(特别是内存方面, 如果没有闲置的机器, 这个是真的难),如果你只有一台8G,16G的机器,想把集群跑起来,那劝你还是放弃吧,OB不是那种低端的数据库… 安装部署另一个难点是缺少文档, 官网上的文档太少了, 过于简单(相对于Oracle/MySQL接近于简陋), 虽然步骤简单, 但如果报错, 很难找到解决方法.

部署模式使用的是三副本部署, 这也是最小规模的OceanBase集群, 因为没有足够的硬件设备, 我是部署在KVM虚拟机上的, 每个zone一个虚拟机, 操作系统需要的是RHEL/CentOS 7+, RHEL/CentOS 6.X版本是跑不起来的。

1. 准备安装环境

基本上根据官方文档<<OceanBase试用版安装指南>>做就行了, 这里有两个要点:

(1). 运行OB Server的虚拟机的内存不能太小, 推荐64G以上, 如果像我一样只是想尝个鲜, 建议每个虚拟机的内存也不要不低于30G, 要不在bootstrap的时候极可能过不了。如果没这么大的内存也不用太担心, 虚拟机的内存时可以”超分”的,在宿主机看来, 虚拟机只是个进程,KVM分配的内存(对应VSZ), 而不是实际使用的物理内存(RSS)可以, 所以宿主机最好配置一个大的交换区, 虽然可能性能不好,但至少可以让你跑起来, 像我的环境, 一台淘汰的System x3650 M3, 12核, 24线程, 64G的物理内存。3个虚拟机,每个虚拟机设置12CPU, 50G内存。

(2). 必须配置NTP, 且必须确保NTP工作正常(每个节点时间是同步的).

1.1. 创建KVM虚拟机

可以先做好一个虚拟机, 后面通过拷贝导入(–import)就可以快速搭建好剩下的两台虚拟机, 这里每个虚拟机配置了两块网卡:
一个对应桥接网卡, 用于对外通讯(192.168.203.);
一个对应一个虚拟网络(isolated network),用于OB Server之间的内部通讯(192.168.55.
)。

创建虚拟机参考:

创建3个虚拟机,配置主机名和IP地址:

1.2. 安装依赖软件包

根据oceanbase安装需要的软件包,建议配置网络配个yum仓库, 如果仅安装oceanbase和obproxy, 不需要安装JDK 8+(mariadb应该也是不用的,但会用到客户端,如果不安装obclient)。

1.3. 创建oceanbase用户

1.4. 配置pam_limits

注意: Linux用户登录时默认是不加载pam_limits.so, limits配置文件是不会加载的。

根据oceanbase文档要求创建资源限制配置

登录admin用户检查是否生效(如果还没生效, 很可能是因为你是复制粘贴网页的, 里面的字符集有问题, 可以通过journalctl检查下是否有报错)。

学习环境可以不开core文件限制, 生成基本也没用, 还占空间,除非淘宝的工程师。因为observer编译没带调试信息(应该是和程序分开了), gdb看到调用堆栈都是没什么有用信息。

1.5. 配置内核参数

1.6. 修改内核异步I/O限制

1.7 关闭防火墙和SELinux

(1). 关闭防火墙

(2). 关闭SELinux

1.8. NTP时钟同步

(1). 服务器端配置

使用KVM宿主机作为时钟源(192.168.55.1)

(2). 客户端配置

为每个虚拟机配置:

注意:配置完成启动后可能需要5-10分钟后才能成功连接和同步。在执行bootstrap之前一定要先确保时钟已经同步(synchronised)。

至此, 已经完成环境准备。

2. 安装/配置OB

2.1. 安装启动

下载的试用版提供的OB安装包是rpm格式,安装非常简单,上传,直接安装即可。

OB运行需要一些目录结构, 按照官方文档来就好,OB第一次启动需要提供参数。后续集群的自举和初始化会可能反复多次(反正我失败了好几次),最好把这些操作做成脚本,提高效率。

为保持文章简洁, 所有用到的脚本附在最后,供参考。

2.2. 初始化执行

每个OB服务器执行init_ob.sh.

等待片刻, 等待每个节点都启动完成,才可以执行下一步。

2.3. 集群自举和初始化

这个步骤类似于Oracle RAC安装过程执行root.sh和之后的dbca建库,OB这步骤为bootstrap, 这步过了, 集群即可用了。

bootstrap只需要在一个OB服务器上执行, 只能执行一次, 如果bootstrap失败,根据报错调整,重复2.1 – 2.2 步骤,直到成功。

我这里做成了脚本bootstrap.sh, 执行前需要确认NTP是同步的, 每个节点都已正常启动。

来源:Li_Xiang_996

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年4月6日
下一篇 2020年4月6日

相关推荐