基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
部署三副本 OceanBase 集群
更新时间:2026-06-09 13:06:44
OceanBase 集群三副本,至少要有三台主机,分为三个 Zone。OceanBase 是单进程软件,只需要安装 oceanbase-xxx.rpm 包和 obproxy-xxx.rpm 包。本节主要介绍通过使用 RPM 包安装三副本 OceanBase 集群。
前提条件
在安装 OceanBase 数据库之前,需要确认以下信息:
OBServer 服务器已完成相关配置。详细信息,请参见 部署前准备 中 服务器配置 章节。
部署环境已完成相关配置。详细信息,请参见 命令行部署 中 部署环境配置 下的章节。
操作步骤
安装目录和软件
安装 OceanBase 数据库 RPM 包。
在各主机上分别安装 OceanBase 数据库 RPM 包。其中
$rpm_dir表示存放 RPM 包的目录,$rpm_name表示 RPM 包的名称。[root@xxx /]# cd $rpm_dir [root@xxx $rpm_dir]# rpm -ivh $rpm_name说明
OceanBase 数据库软件会安装在目录
/home/admin/oceanbase下。清理旧 OceanBase 目录(第一次部署不用)。
当要清理之前的 OceanBase 环境,或者 OceanBase 安装部署过程中出现问题导致环境变乱或者产生文件影响下一次安装时,选择直接清理旧的 OceanBase 目录。各 OBServer 服务器都要操作一遍。
其中
$cluster_name为集群名。[root@xxx admin]# su - admin -bash-4.2$ kill -9 `pidof observer` -bash-4.2$ rm -rf /data/1/$cluster_name -bash-4.2$ rm -rf /data/log1/$cluster_name -bash-4.2$ rm -rf /home/admin/oceanbase/store/$cluster_name /home/admin/oceanbase/log/* /home/admin/oceanbase/etc/*config* -bash-4.2$ ps -ef|grep observer示例如下:
[root@hostname admin]# su - admin -bash-4.2$ kill -9 `pidof observer` -bash-4.2$ rm -rf /data/1/obdemo -bash-4.2$ rm -rf /data/log1/obdemo -bash-4.2$ rm -rf /home/admin/oceanbase/store/obdemo /home/admin/oceanbase/log/* /home/admin/oceanbase/etc/*config* -bash-4.2$ ps -ef|grep observer初始化 OceanBase 目录。
OceanBase 的数据目录通常建议在独立的磁盘上,然后通过软链接方式链接到软件 Home 目录下面。各 OBServer 服务器都要操作一遍。
其中
$cluster_name为集群名。[root@xxx admin]# su - admin -bash-4.2$ mkdir -p /data/1/$cluster_name/{etc3,sstable,slog} -bash-4.2$ mkdir -p /data/log1/$cluster_name/{clog,etc2} -bash-4.2$ mkdir -p /home/admin/oceanbase/store/$cluster_name -bash-4.2$ for t in {etc3,sstable,slog};do ln -s /data/1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done -bash-4.2$ for t in {clog,etc2};do ln -s /data/log1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done示例如下:
[root@xxx admin]# su - admin -bash-4.2$ mkdir -p /data/1/obdemo/{etc3,sstable,slog} -bash-4.2$ mkdir -p /data/log1/obdemo/{clog,etc2} -bash-4.2$ mkdir -p /home/admin/oceanbase/store/obdemo -bash-4.2$ for t in {etc3,sstable,slog};do ln -s /data/1/obdemo/$t /home/admin/oceanbase/store/obdemo/$t; done -bash-4.2$ for t in {clog,etc2};do ln -s /data/log1/obdemo/$t /home/admin/oceanbase/store/obdemo/$t; done说明
obdemo是以集群名称创建的目录,可自定义,在启动进程时会用到。检查结果:
-bash-4.2$ cd /home/admin/oceanbase -bash-4.2$ tree store/ store/ `-- obdemo |-- clog -> /data/log1/obdemo/clog |-- etc2 -> /data/log1/obdemo/etc2 |-- etc3 -> /data/1/obdemo/etc3 |-- slog -> /data/1/obdemo/slog `-- sstable -> /data/1/obdemo/sstable 6 directories, 0 files测试 I/O 能力(可选)。
测试数据盘 I/O 能力,生成性能报告文件放在
/home/admin/oceanbase/etc目录下。observer启动时会读取这个文件进而自动设置内部一些跟 I/O 有关的参数。示例如下:
-bash-4.2$ time /home/admin/oceanbase/bin/ob_admin io_bench -c /home/admin/oceanbase/etc -d /data/1/obdemo user:root succ to open, filename=ob_admin.log, fd=3, wf_fd=2 ... ... real 0m0.331s user 0m0.100s sys 0m0.262s安装 OceanBase 客户端。
OceanBase 实例兼容 Oracle 或 MySQL,如果是 Oracle 租户,Java 程序连接需要使用 OceanBase 提供的 Java 驱动文件(oceanbase-client-*.jar )。如果要在命令行下访问 Oracle 租户,还需要安装客户端 OBClient。
OBClient 是 OceanBase 命令行客户端,可以访问 OceanBase 的 MySQL 租户和 ORACLE 租户。
示例如下:
-bash-4.2$ rpm -ivh obclient-1.2.6-20210510164331.el7.alios7.x86_64.rpm -- 核查是否安装成功 -bash-4.2$ which obclient /usr/bin/obclient
初始化 OceanBase 集群
说明
示例 IP 做了脱敏处理,这不是安装需求。在部署时应根据自己机器真实 IP 填写。
启动节点 observer 进程。
在每个节点的
admin用户下,启动 observer 进程。注意
三副本下,每个节点启动参数并不完全相同。启动 observer 时只需指定 RootService 所在的3台(或者多台)机器,不需要在创建集群时指定所有机器;集群创建完成后可以添加新的机器。
参数里指定数据文件的大小、内存的大小,以方便个别环境资源不足想精确控制observer对资源的占用。具体说明如下:
参数 说明 -i指定网卡名,可通过 ifconfig命令查看。-p指定服务端口号,一般指定为 2881。-P指定 RPC 端口号,一般指定为 2882。-n指定集群名称。可自定义,不同集群名称不要重复即可。 -z指定启动的 observer 进程所属的 Zone。可自定义。 -d指定集群主目录,除集群名字 obdemo外,其他不要变动。-c指定集群 ID。为一组数字,可自定义,不同集群不要重复即可。 -l指定日志级别。 -r指定 RS 列表,格式是 ip:2882:2881,分号分割,表示 RootService 信息。三台机器参数一致。-o指定集群启动参数,需要根据实际情况设置。 system_memory指定 OceanBase 内部保留内存,默认是30G,机器内存比较少的情况下把这个调小,影响就是可能在性能测试时有内存不足问题。datafile_size指定 OceanBase 数据文件sstable的大小(一次性初始化),根据/data/1/可用空间评估,建议不少于100G,同时又保留一些剩余空间。如果/data/1跟/data/log1本身就是一个文件系统(共用一个盘),那么务必保证留给/data/log1的空间大小是内存的 2-4 倍。config_additional_dir指定参数文件的冗余目录。示例如下:
zone1:
[root@xxx admin]# su - admin -bash-4.2$ cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -i eth0 -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" devname: eth0 rpc port: 2882 mysql port: 2881 zone: zone1 data_dir: /home/admin/oceanbase/store/obdemo rs list: 10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881 cluster id: 10001 appname: obdemo optstr: system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2zone2:
[root@xxx admin]# su - admin -bash-4.2$ cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -i eth0 -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" devname: eth0 rpc port: 2882 mysql port: 2881 zone: zone2 data_dir: /home/admin/oceanbase/store/obdemo rs list: 10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881 cluster id: 10001 appname: obdemo optstr: system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2zone3:
[root@xxx admin]# su - admin -bash-4.2$ cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -i eth0 -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" devname: eth0 rpc port: 2882 mysql port: 2881 zone: zone3 data_dir: /home/admin/oceanbase/store/obdemo rs list: 10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881 cluster id: 10001 appname: obdemo optstr: system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2可通过
netstat -ntlp命令查看 observer 进程是否启动成功。如果监听到了2881与2882端口,则说明进程启动成功。示例如下:
-bash-4.2$ netstat -ntlp (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:2881 0.0.0.0:* LISTEN 45576/observer tcp 0 0 0.0.0.0:2882 0.0.0.0:* LISTEN 45576/observer tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -集群 bootstrap 操作。
通过 obclient 命令连接任意一台节点,密码为空。
[root@xxx admin]# obclient -h127.0.0.1 -uroot -P2881 -p Enter password: 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 目录从头开始(请参见 清理 OceanBase 目录(第一次不用) )。
验证集群初始化成功。
进行 bootstrap 后,执行
SHOW DATABASES;命令,能看到数据库列表里有oceanbase即可。obclient> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | oceanbase | | information_schema | | mysql | | SYS | | LBACSYS | | ORAAUDITOR | | test | +--------------------+ 7 rows in set修改密码。
sys 租户的 root 用户密码默认为空,初始化成功后请修改密码。
obclient> ALTER USER root IDENTIFIED BY '******'; Query OK, 0 rows affected