首批通过分布式安全可靠测评,为关键业务系统打造
使用命令行部署三副本 OceanBase 集群
更新时间:2025-12-31 17:57:02
本文介绍如何使用命令行部署三副本 OceanBase 集群。
前提条件
在安装 OceanBase 数据库之前,需要确认以下信息:
- OBServer 服务器已完成相关配置。详细信息,请参见 服务器配置、(可选)配置时钟源 和 使用 oatcli 初始化 OBServer 服务器。
- OBServer 服务器已创建
admin用户。 - 已获取 OceanBase 数据库 RPM 包。详细信息,请参见 准备安装包。
操作步骤
步骤一:安装 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下。示例如下:
[root@xxx admin]# rpm -ivh oceanbase-*-20220418212020.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:oceanbase-*-20220418212020.################################# [100%](可选)安装 OceanBase 客户端。
OceanBase 客户端 OBClient 是 OceanBase 数据库专用的命令行客户端工具,通过 OBClient 您可以连接 OceanBase 数据库的 MySQL 租户和 Oracle 租户。如果只连接 OceanBase 数据库的 MySQL 租户,也可以通过 MySQL 客户端(mysql)连接 OceanBase 数据库。
注意
由于
obclientV2.2.1 之前的版本依赖于libobclient,所以需要先安装libobclient。请联系技术支持获取 OBClient RPM 包和 libobclient RPM 包。示例如下:
[root@xxx /home/admin/rpm]# rpm -ivh obclient-2.2.1-20221122151945.el7.alios7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:obclient-2.2.1-20221122151945.el7################################# [100%] ##核查是否安装成功## [root@xxx /home/admin/rpm]# which obclient /usr/bin/obclient
步骤二:配置目录
清理 OceanBase 目录 (第一次部署不用)。
当要清理之前的 OceanBase 环境,或者 OceanBase 安装部署过程中出现问题导致环境变乱或者产生文件影响下一次安装时,选择直接清理旧的 OceanBase 目录。其中
$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@xxx 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 目录下面。其中
$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
步骤三:初始化 OceanBase 集群
说明
示例 IP 做了脱敏处理,这不是安装需求。在部署时应根据自己机器真实 IP 填写。
启动节点 observer 进程。
在每个节点的
admin用户下,启动 observer 进程。注意
三副本下,每个节点启动参数并不完全相同。启动 observer 时只需指定 RootService 所在的 3 台(或者多台)机器,不需要在创建集群时指定所有机器;集群创建完成后可以添加新的机器。
cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -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"参数解释:
参数 说明 -i指定网卡名,可通过 ifconfig命令查看。-p指定服务端口号,一般指定为 2881。-P指定 RPC 端口号,一般指定为 2882。-n指定集群名称。可自定义,不同集群名称不要重复即可。 -z指定启动的 observer 进程所属的 Zone。 -d指定集群主目录,初始化目录时创建的目录。除集群名字 $cluster_name外,其他不要变动。-c指定集群 ID。为一组数字,可以自定义,不同集群不要重复即可。 -l指定日志级别。 -r指定 RS 列表,格式是 $ip:2882:2881,分号分割,表示 Root Service 信息。-o指定集群启动参数(配置项)列表,为可选项。可以为多个配置项指定值,多个配置项的值之间使用英文逗号进行分隔。请根据实际需要,选择适当的启动参数并为每个参数指定合适的值,以优化集群的性能和资源利用率。以下是一些常用的集群启动参数: - cpu_count:用于设置系统 CPU 总数。
- system_memory:用于设置系统预留给租户 ID 为
500的租户的内存容量,即指定 OceanBase 数据库内部保留内存。在机器内存较少的情况下可以考虑将该值调小,需要注意的是,在性能测试时可能会出现内存不足的问题。 - memory_limit:用于设置可用的总内存大小。
- datafile_size:用于设置数据文件占用磁盘可用空间的大小。即指定 OceanBase 数据库数据文件
sstable的大小(一次性初始化),根据/data/1/可用空间评估,建议不少于100G。 - datafile_disk_percentage:磁盘数据文件占用磁盘总空间的百分比。
- config_additional_dir:用于设置本地存储配置文件的多个目录,为了冗余存储多份配置文件。
- log_disk_size:用于设置 Redo 日志磁盘的大小。
- log_disk_percentage:用于设置 Redo 日志占用其所在磁盘总空间的百分比。
- syslog_level:用于设置系统日志级别。
- syslog_io_bandwidth_limit:用于设置系统日志所能占用的磁盘 IO 带宽上限,超过带宽上限容量的系统日志将被丢弃。
- max_syslog_file_count:用于设置在回收日志文件之前可以容纳的日志文件数量。
- enable_syslog_recycle:用于设置是否打开记录 OBServer 节点启动前的旧日志的开关。与
max_syslog_file_count配合使用,决定回收逻辑是否考虑旧的日志文件。
示例如下:
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"zone2:
[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"zone3:
[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"可以通过下面命令查看 observer 进程是否启动成功:
netstat -ntlp命令,如果监听到了2881与2882端口,则说明进程启动成功。ps -ef|grep observer命令可以返回 observer 进程信息。
示例如下:
-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 11114/observer tcp 0 0 0.0.0.0:2882 0.0.0.0:* LISTEN 11114/observer ... ... ... ... ... ... -bash-4.2$ ps -ef|grep observer admin 11114 0 40 16:18 ? 00:00:17 /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集群 bootstrap 操作。
通过 OBClient 命令连接任意一台节点,密码为空。
[root@xxx admin]# 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 目录从头开始部署。
验证集群初始化成功。
在完成集群的 bootstrap 初始化操作后,通过执行
SHOW DATABASES;命令进行验证,若查询结果显示数据库列表中存在oceanbase数据库,即可确认集群初始化成功。修改密码。
sys租户的root用户密码默认为空,初始化成功后请修改密码。ALTER USER root IDENTIFIED BY '******';
后续操作
集群创建成功后,可根据业务需要创建用户租户。
使用命令行创建用户租户的详细信息,请参见 创建租户。