阅读和分析源代码过程中,需要有一套OceanBase系统用于观察和验证其各种功能和行为表现。因此,在开始解析OceanBase的源代码之前,可以先从源代码编译OceanBase的可执行程序并将其部署起来。
目前的OceanBase社区版(v3.1)仅支持Linux操作系统,同时对硬件环境也有一定要求,见表1.1。
表1.1 OceanBase社区版软硬件要求
(续)
构建软件依赖环境最简单的方法是利用yum仓库,构建OceanBase完整的软件包依赖需要用到两部分yum仓库。
(1)CentOS的yum仓库
OceanBase依赖的软件包中,rpm和make等可以通过CentOS的官方yum仓库或者第三方镜像仓库获得。可以用以下命令批量安装:
(2)OceanBase的官方yum仓库
OceanBase依赖的其他软件包都可以从OceanBase的官方yum仓库中获得,该仓库的配置文件位于http://mirrors.aliyun.com/oceanbase/OceanBase.repo。
如果能够访问OceanBase的官方yum仓库,则可以在OceanBase源码目录下执行build.sh脚本进行初始化,该脚本将会从官方yum仓库下载安装所需的其他软件包:
OceanBase使用CMake作为构建工具,可以直接使用CMake命令自行创建目录进行构建,但是用源码根目录下提供的build.sh脚本进行构建会更简单一点。build.sh脚本会根据要构建的类型创建目标目录,然后为CMake命令创建一个CMAKE_BUILD_TYPE缓存项表示构建类型(Release/Debug/RelWithDebInfo),最后进入创建的目录中用CMake完成构建。
(1)RELEASE构建
如果只希望从外部观察OceanBase的功能和效果,构建时可以采用RELEASE模式,这样构建出的OceanBase可执行程序中不包含调试所需的记号,体积相对也小一些。RELEASE构建采用以下步骤:
1)在源码目录下执行build.sh脚本:
2)进入生成的RELEASE构建目录:
3)开始构建:
其中的N表示并行任务的数量,可根据机器性能调整,建议将N设置为min(核心数×2,内存GB数/2)。
4)查看构建产物:
OceanBase编译之后仅有一个单一的可执行程序observer。
(2)DEBUG构建
如果希望通过调试工具观察和跟踪OceanBase的内部运行过程,则需要用DEBUG构建模式生成带有调试信息的可执行程序。
DEBUG构建和RELEASE构建的步骤基本一致,只需要把传递给build.sh脚本的release选项改成debug即可。
(3)创建RPM包
不管是RELEASE还是DEBUG构建,得到的都是单一的OBServer可执行程序。真正要让构建出的OceanBase运行起来,最便捷的方式是用OceanBase Deployer工具(简称为OBD)将构建成果部署到目标机器上,或者将OBServer文件替换到已部署好的OceanBase集群中去。而OBD的部署工作依赖于rpm包形式的OceanBase,可以利用RPM构建方式来构建OceanBase并且将构建成果打包成rpm包。
RPM构建也和RELEASE构建的步骤基本一致,只需要把传递给build.sh脚本的release选项改成rpm即可。在RPM构建中,build.sh会将CMAKE_BUILD_TYPE缓存项设置为RelWithDebInfo,表示构建带有调试信息的发行版。同时build.sh还会将OB_BUILD_RPM缓存项设置为ON,这样CMake会根据CMakeLists.txt中的规则打包编译好的OBServer可执行程序。
RPM构建方式得到的rpm文件位于build.sh脚本创建的build_rpm子目录中。
部署OceanBase最方便的方式是使用OceanBase Deployer工具。OBD 是OceanBase系列开源软件的通用部署工具,它提供了对于包括OceanBase在内的多种软件的部署、管理功能。
(1)安装OBD
OBD可以使用yum包管理器安装或者自行编译安装。
1)用yum安装OBD。
使用yum包管理器安装OBD时,首先要添加OceanBase的官方yum仓库 :
配置好官方yum仓库之后,直接利用yum安装ob-deploy包即可得到OBD。
在使用OBD进行软件部署、管理之前,需要先执行下面的命令引用OBD的一些设置:
2)从源码编译OBD。
在用源码编译OBD之前,需要确保安装有以下软件包:
·gcc
·wget
·python-devel
·openssl-devel
·xz-devel
·mysql-devel
如果系统中安装的是Python 2.7,则使用以下命令安装:
如果希望使用Python 3.8,则首先在Python 2.7环境下执行以下命令:
然后在Python3.8环境执行以下命令:
安装完成后,在使用OBD之前仍然需要执行obd.sh脚本来引入OBD的设置。
(2)用OBD部署和管理OceanBase
用OBD进行OceanBase部署的命令如下:
这个命令会以deploy_name为名称部署一个OceanBase集群,集群将采用deploy_config_path指定的文件中的配置信息。一个简单的集群配置文件如代码1.1所示。
代码1.1 集群配置文件
OBD默认会从OceanBase的官方yum仓库下载安装要部署的软件,然后根据配置文件的要求对其进行各类初始化。
部署完成后使用OBD的cluster start选项启动OceanBase集群:
除了deploy选项,obd命令可以通过组合以下选项完成对OceanBase等软件的各类管理动作:
1)cluster:对于OceanBase集群的操作。
①deploy:部署一个集群。
②destroy:销毁一个已部署的集群。
③display:显示一个集群的信息。
④edit-config:编辑一个集群的配置。
⑤list:列出所有已部署的集群。
⑥redeploy:重新部署一个已经启动的集群。
⑦reload:让已经启动的集群重新装载配置。
⑧restart/start/stop:重启/启动/停止一个集群。
⑨upgrade:升级一个集群。
2)mirror:对OBD所能部署的软件仓库的操作,OBD进行部署时会从软件仓库下载并安装所需软件。
①clone:从一个仓库或者rpm文件克隆一个本地镜像。
②create:利用本地二进制文件创建一个本地镜像。
③list:列出所有本地镜像。
④update:更新远程镜像信息。
3)test:对已部署的软件镜像测试。
mysqltest:对一个部署运行mysqltest。
4)update:更新OBD本身。
(3)用OBD部署自行编译的OceanBase
OBD默认会从OceanBase的官方yum仓库下载安装要部署的软件,如果需要从自行编译的OceanBase部署集群,则需要先用OBD从编译生成的OceanBase建立一个本地镜像。
有两种办法创建OBD的本地仓库:
1)利用编译好的二进制文件创建镜像仓库。
首先在RELEASE或DEBUG构建模式的目标目录中执行make install,这会将编译好的二进制文件安装在默认目录/usr/local中。
执行以下命令从/usr/local中抽取二进制文件创建本地镜像仓库:
其中ver、repo_tag分别代表可以自定义的版本和标签,但repo_name中的仓库名字需要符合OBD所支持的软件之一,否则会报告“找不到合适插件” 的错误。对于OceanBase来说,repo_name用“oceanbase-ce”最为合适。
以这种方式创建的本地镜像仓库,无法使用obd mirror list local命令查看其详细信息,但在没有配置远程仓库的情况下会从本地镜像仓库提取软件进行部署。
如果想要确认本地镜像仓库是否创建成功,可以检查当前用户主目录下.obd/repository子目录中是否有名为repo_tag的目录。
2)利用生成的rpm文件克隆镜像仓库。
在使用RPM模式构建OceanBase之后,执行以下命令根据生成的rpm文件克隆一个本地镜像仓库:
其中rpm_file_path是rpm文件的路径。
之后可以使用obd mirror list local命令来查看克隆得到的本地镜像仓库,命令的效果如图1.2所示。
图1.2 本地镜像仓库列表
由于OBD默认是优先从远程仓库下载安装软件,因此在创建了本地仓库之后,还需要在OBD管理的仓库中删除远程仓库的信息,这样OBD才会退而求其次地采用本地仓库进行部署。远程仓库的信息保存在当前用户根目录下的.obd/mirror/remote/OceanBase.repo文件中,可以将该文件直接删除。
此后就可以使用OBD的mirror deploy选项来部署新的OceanBase集群了。