OceanBase企业版集群部署:oatcli命令行方式

发布于:2025-04-13 ⋅ 阅读:(24) ⋅ 点赞:(0)

本文介绍了如何通过oatcli命令行方式部署OceanBase企业版集群环境。

数据库版本:OceanBase V4.2.5

OceanBase企业版集群支持图形化部署和命令行部署:

  • 图形化部署:需要使用OAT工具部署OCP平台,再通过OCP平台部署数据库。
  • 命令行部署:使用oatcli工具部署数据库。

oatcli是管理OceanBase管理者工具(OceanBase Admin Toolkit,简称:OAT)资源的命令行工具。

安装包准备

OceanBase企业版部署需要的软件安装包如下(适用于单机版和多节点集群):

组件 安装包名称 说明
oat-all-in-one安装包 X86_64平台:oat-all-in-one-x86-411.tar 用于安装OAT
OCP和MetaDB的docker镜像 X86_64平台:ocpxxx.tar.gz、meta_xxxxxx_xxxxxx_x86_xxxxxxxx.tgz 用于部署OCP、OCP MetaDB、MonitorDB
OceanBase RPM包 X86_64平台:oceanbase-x.x.x.x-xxxxxxxxxxxxxxxxxx.el7.x86_64.rpm 用于部署OceanBase集群
ODP RPM包(非必须) X86_64平台:obproxy-x.x.x.x-xxxxxxxxxxxxxx.el7.x86_64.rpm 用于部署OBProxy代理服务

服务器准备

最低资源配置

OceanBase部署服务器应满足的最低配置如下(适用于单机版和多节点集群):

组件 服务器数量 最低配置 推荐磁盘类型
OAT 1台(可复用OCP服务器) 2U4G N/A
OCP和MetaDB(图形化部署) 1台 16U32G 1.5TB、万兆网卡、SSD存储
OceanBase集群 单机部署1台(非单机部署3台) 4U16G。OBServer服务器内存设置建议不超过1T;OBServer 服务器CPU数量建议不超过512核。 磁盘中日志盘需要内存的3倍以上;SSD存储
ODP(非必须) 3台(可复用OBServer节点) 4U8G 200G

:如果是通过命令行部署(oatcli或obd工具),可以不安装OCP和MetaDB组件。

是否部署ODP组件?

OceanBase数据库代理ODP(OceanBase Database Proxy,又称OBProxy)是OceanBase数据库专用的代理服务器,OceanBase数据库用户的数据会以多副本的形式存放在各个 OBServer节点上,ODP接收用户发出的SQL请求,并将SQL请求转发至最佳目标OBServer节点,最后将执行结果返回给用户。

在部署OceanBase集群后,是否需要部署ODP主要取决于应用场景和需求:

  • 如果应用需要对OceanBase集群进行高可用、负载均衡或连接池管理等操作,那么可以考虑部署ODP。ODP可以有效地解决OceanBase集群的连接数和负载均衡等问题,提高应用程序的稳定性和可靠性。
  • 如果应用只是简单地连接到OceanBase集群进行查询和操作,而不需要进行高可用、负载均衡或连接池管理等操作,那么可以不部署ODP,直接使用OceanBase提供的客户端库连接到集群,也可以满足应用的需求。

仲裁服务器

如果要使用三台服务器部署两副本的OceanBase集群和仲裁服务,仲裁服务器应满足的最小配置如下:

组件 最小规格 带宽 磁盘
仲裁服务器(V4.1.0 BP1及以后版本) 2U4G 要求输入和输出的数据传输速率都至少为20 Mbps Clog盘需要至少5GB的磁盘空间。存放日志文件的log目录需要单独预留空间

⚠️:三副本无需部署仲裁服务器。

服务器配置

操作系统

OceanBase数据库支持的主流操作系统及版本信息如下:

操作系统 版本 架构
KylinOS V10 x86_64(包括海光),ARM_64(鲲鹏、飞腾)
CentOS / Red Hat Enterprise Linux 7.x、8.x x86_64(包括海光),ARM_64(鲲鹏、飞腾)
Debian 8.3 及以上 x86_64(包括海光)
openEuler 20.03 LTS SP1/SP2 和 22.10 LTS x86_64(包括海光),ARM_64(鲲鹏、飞腾)

更多支持的操作系统及其版本请参考官方文档。、

⭐️ 需要进行一些特殊的操作系统配置如下:

  1. 在Intel x86架构的环境中:建议修改配置文件/etc/sysctl.conf,添加配置vm.swappiness = 0
  2. 在AMD或者ARM架构的环境中,建议开启Numa
  3. 在ARM和海光架构的环境中,建议修改配置文件/etc/sysctl.conf,添加以下配置:
kernel.numa_balancing = 0
vm.zone_reclaim_mode = 0
vm.swappiness = 0

内核参数

OceanBase服务器推荐的内核参数配置如下:

内核参数 推荐值 说明
vm.max_map_count 655360 用于设置一个进程可拥有的最大内存映射区域数量
vm.min_free_kbytes 2097152 用于设置系统保留的最小空闲内存量,以防止内存碎片化。如果服务器物理内存小于等于8GB时,建议保持默认值,无需修改
vm.overcommit_memory 0 用于控制内存过量提交机制,指定当内存不足时是否允许过量提交内存
ulimit.open files hard/soft nofile 655300 用于设置用户可同时打开的最大文件描述符数
ulimit.max_user_processes hard/soft nproc 655300 用于设置用户可以创建的最大进程数
ulimit.core file size hard/soft core unlimited 用于设置核心转储文件(core dump)的最大大小
ulimit.stack hard/soft stack unlimited 用于设置系统的栈大小的参数
current_clocksource tsc 用于显示当前系统使用的时钟源

BIOS设置

BIOS需要关闭以下配置:

  • Cstate
  • Pstate
  • EIST
  • Power saving
  • SMMU(ARM架构)

BIOS需要开启以下配置:

  • Automatic Power on After Power Loss: Always on
  • Intel Virtualization Technology
  • Hyper-threading
  • Hardware prefetcher
  • VT-d
  • SR-IOV
  • Turbo Mode
  • Energy performance:开启最大performance

磁盘挂载

OCP节点的磁盘挂载要求如下:

挂载点 容量 格式 说明
/home 100 GB~300 GB 建议 ext4 或 xfs 各组件运行日志盘
/data/log1 内存大小的 3~4 倍 建议 ext4 或 xfs OCP元数据库日志盘
/data/1 取决于所需存储的数据大小 建议 ext4 或 xfs OCP元数据库数据盘
/docker 200 GB~500 GB 建议 ext4 或 xfs Docker根目录

⚠️ :如果是通过命令行部署(oatcli或obd工具),可以不安装OCP和MetaDB组件。

OBServer节点的磁盘挂载要求如下:

挂载点 容量 格式 说明
/home 100 GB~300 GB 建议 ext4 或 xfs observer安装和运行日志盘
/data/log1 内存大小的 3~4 倍 建议 ext4 或 xfs observer事务日志盘
/data/1 取决于所需存储的数据大小 建议 ext4 或 xfs observer数据盘

网卡设置

建议配置2块万兆网卡

  • bond模式取名bond0,绑定的模式可以选择mode1mode4,但建议选择mode4。对于mode4模式,交换机需要配置802.3ad协议。
  • 网卡名建议使用eth0eth1

安装OAT部署工具

部署OAT前请检查以下条件是否已满足:

  • OAT的默认端口7000未被占用。
  • 拥有服务器的root用户权限。
  • 已经安装并启动Docker。推荐Docker版本为社区版17.03及以上。如果使用oat-all-in-one安装包部署OAT,将自动安装Docker环境,无需再单独安装。
  1. 解压oat-all-in-one安装包。
tar -xf oat-all-in-one-x86-411.tar
  1. 以root身份运行安装脚本install.sh
sh oat-all-in-one-x86/install.sh

安装过程中需要根据提示依次确认以下信息:

  • 请指定Docker的根目录,默认值/docker,可自定义。
  • 请指定OAT数据目录的路径,默认值/oat_data,可自定义,例如/oceanbase/oat_data
  • 请指定OAT HTTP监听端口,默认值7000,可自定义。
  • 请指定OAT数据库端口,默认值3306,可自定义。
  • 请输入OAT管理员账户密码(设置初始登录密码),可自定义。默认账号和初始密码为admin/aaAA11__
  • 根据返回的URL访问OAT,验证OAT服务的可用性。

安装完成后,在浏览器中输入OAT的访问地址,验证是否部署成功。

http://oat_server_ip:7000

其中oat_server_ip为部署OAT的服务器的IP地址。

初始化OBServer服务器

使用oatcli初始化OBServer服务器前请检查以下条件是否已满足:

  • 已安装OAT工具。
  • 拥有OAT服务器的root用户权限。
  1. 在OAT服务器上,以root身份进入到OAT容器。
sudo docker exec -it oat bash
  1. 查看oatcli命令的使用方法。
oatcli --help
  1. 设置OAT API地址、用户名和密码来调用OAT API。
oatcli config set -sxx.xx.xx.xx:7000 -uadmin -p******
  • -s:api server地址,例如127.0.0.1:7000
  • -u:用户名。
  • -p:密码。
  1. 创建机房信息。
# oatcli create idc <NAME> <REGION>
oatcli create idc bj1 beijing
  • NAME:机房名称。
  • REGION:机房所属的地域。
  1. 为服务器连接创建SSH凭证。
# oatcli create credential [OPTIONS] NAME AUTH_TYPE:{password|pubkey|external}
oatcli create credential -uroot -p****** root_148 password
  • NAME:凭证标识名称。示例中凭证名为root_148
  • AUTH_TYPE:授权类型。password对应密码认证,pubkey对应公钥认证,external表示已配置免密。
  • -u:用户名。默认为root。
  • -p:密码。
  • -k:SSH私钥文件。
  1. 添加并初始化OBServer服务器。
# oatcli create server [OPTIONS] IPs... INIT_TAG:{observer|obproduct|both}
oatcli create server -ibj1:beijing -croot_148 xx.xx.xx.xx observer
  • -i机房名:地域,必须已存在。
  • -c:凭证名,必须已存在。
  • --add-only:仅添加服务器,不执行操作系统配置操作。默认为--no-add-only,即执行操作系统配置操作。
  • --ssh-port:SSH端口,默认为22。非必需。
  • --docker-root-dir:默认为/docker。非必需。
  • --admin-uid-gid:默认为500:500。非必需。
  • --admin-password:admin密码。非必需。
  • IPs:OBServer服务器IP。
  • INIT_TAG:服务器用途。observer为数据库节点,obproduct表示安装OceanBase产品服务,both表示安装OBServer和OceanBase产品服务。
  1. 查看服务器是否添加完成。
# oatcli describe server [OPTIONS] OBServer_IP
oatcli describe server xx.xx.xx.xx
  1. 在OAT中获取资源信息。
# oatcli get [OPTIONS] COMMAND [ARGS]...
oatcli get server
  • component:获取组件信息。
  • credential:获取凭证信息。
  • idc:获取机房信息。
  • image:获取镜像信息。
  • product:获取产品信息。
  • Server:获取服务器信息。

使用oatcli部署三副本集群

在部署OceanBase集群前请检查已经使用oatcli初始化OBServer服务器。

安装OceanBase软件

  1. 安装OceanBase数据库RPM包。
rpm -ivh oceanbase-4.2.0.0-100000052023073123.el7.x86_64.rpm

OceanBase数据库软件会默认安装在目录/home/admin/oceanbase下。

  1. 安装OceanBase客户端(非必需)。
rpm -ivh obclient-2.2.1-20221122151945.el7.alios7.x86_64.rpm

如果只连接OceanBase数据库的MySQL租户,也可以通过MySQL客户端(mysql)连接OceanBase数据库。

初始化OceanBase集群

  1. 清理OceanBase目录(第一次部署不用)。
su - admin
kill -9 `pidof observer` 
rm -rf /data/1/$cluster_name 
rm -rf /data/log1/$cluster_name 
rm -rf /home/admin/oceanbase/store/$cluster_name /home/admin/oceanbase/log/* /home/admin/oceanbase/etc/*config*
ps -ef|grep observer

其中$cluster_name为集群名。

  1. 初始化OceanBase目录。

OceanBase的数据目录通常建议在独立的磁盘上,然后通过软链接方式链接到软件Home目录下面。其中$cluster_name为集群名。

su - admin
mkdir -p /data/1/$cluster_name/{etc3,sstable,slog} 
mkdir -p /data/log1/$cluster_name/{clog,etc2} 
mkdir -p /home/admin/oceanbase/store/$cluster_name
for t in {etc3,sstable,slog};do ln -s /data/1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done
for t in {clog,etc2};do ln -s /data/log1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done
  1. 启动节点observer进程。

在每个节点的admin用户下,启动observer进程。

cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer {-I $ip | -i $devname} -P $rpc_port -p $sql_port \
-z $zone_name -d /home/admin/oceanbase/store/$cluster_name -r '$ip:2882:2881' -c $cluster_id -n $cluster_name \
-o "system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/$cluster_name/etc3;/data/log1/$cluster_name/etc2"

三副本下,每个节点启动参数并不完全相同。启动observer时只需指定RootService所在的3台(或者多台)机器,不需要在创建集群时指定所有机器;集群创建完成后可以添加新的机器。

启动参数含义:

  • -I:指定待启动的节点IP。
  • -p:指定服务端口号,一般指定为2881。
  • -P:指定RPC端口号,一般指定为2882。
  • -n:指定集群名称。不同集群不要重复即可。
  • -z:指定启动的observer进程所属的Zone。
  • -d:指定集群主目录,初始化目录时创建的目录。除集群名字$cluster_name外,其他的不要修改。
  • -c:指定集群ID。不同集群不要重复即可。
  • -l:指定日志级别。
  • -r:指定RS列表,格式是$ip:2882:2881,分号分割,表示Root Service信息。
  • -o:指定集群启动参数(配置项)列表,为可选项。其中config_additional_dir用于设置本地存储配置文件的多个目录,为了冗余存储多份配置文件。

假设我们要创建一个三节点的OB集群,集群名为obdemo

zone1节点启动observer进程:

su - admin
cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -I 10.10.10.1 -P 2882 -p 2881 \
-z zone1 -d /home/admin/oceanbase/store/obdemo -r '10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881' -c 10001 -n obdemo \
-o "system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"

zone2节点启动observer进程:

su - admin
cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -I 10.10.10.2 -P 2882 -p 2881 \
-z zone2 -d /home/admin/oceanbase/store/obdemo -r '10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881' -c 10001 -n obdemo \
-o "system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"

zone3节点启动observer进程:

su - admin
cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -I 10.10.10.3 -P 2882 -p 2881 \
-z zone3 -d /home/admin/oceanbase/store/obdemo -r '10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881' -c 10001 -n obdemo \
-o "system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"

可以通过下面命令查看observer进程是否启动成功:

  • netstat -ntlp命令,如果监听到了2881与2882端口,则说明进程启动成功。
  • ps -ef | grep observer命令可以返回observer进程信息。
  1. 集群bootstrap操作。

通过OBClient命令连接任意一台节点,密码为空。

obclient -h127.0.0.1 -uroot -P2881 -p******

obclient> SET SESSION ob_query_timeout=1000000000;
Query OK, 0 rows affected

obclient> ALTER SYSTEM BOOTSTRAP ZONE 'zone1' SERVER '10.10.10.1:2882',ZONE 'zone2' SERVER '10.10.10.2:2882',ZONE 'zone3' SERVER '10.10.10.3:2882';
Query OK, 0 rows affected

⚠️ 如果这一步失败报错了,其原因很可能就是observer进程启动参数有不对、observer相关目录权限不对、日志目录空间不足一定比例(跟数据目录合用了大目录,空间被数据目录占用了)、节点时间不同步、节点内存资源不足等。请先排查这些问题点后,然后清理OceanBase目录从头开始部署。

  1. 验证集群初始化成功。

在完成集群的bootstrap初始化操作后,通过执行SHOW DATABASES;命令进行验证,若查询结果显示数据库列表中存在oceanbase数据库,即可确认集群初始化成功。

  1. 修改密码。

sys租户的root用户密码默认为空,初始化成功后请修改密码。

ALTER USER root IDENTIFIED BY '******';

卸载与环境清理

  1. 停止和卸载服务

停止和卸载所有OBServer节点中的服务。

ps -ef|grep observer
kill -9 `pidof observer`

rpm -qa|grep oceanbase
sudo rpm -e $rpm_name
rpm -ql $rpm_name

其中,$rpm_name是要卸载的软件包的名称。

  1. 数据库文件清理

删除旧的数据库文件,包括数据文件、日志文件和其他临时文件。

sudo rm -rf /home/admin/oceanbase/*
sudo rm -rf /data/log1/*
sudo rm -rf /data/1/*

以上清理方式适用于oatcli命令行部署的OceanBase集群,但不适用于使用obd部署的集群。