OceanBase 也支持单副本部署,并且单副本 OceanBase 集群还可以扩容(增加节点),所以也称为集群。OceanBase 是单进程软件,只需要安装 oceanbase-xxx.rpm 包和 obproxy-xxx.rpm 包。本节主要介绍通过使用 RPM 包安装单副本 OceanBase 集群。
前提条件
在安装 OceanBase 数据库之前,需要确认以下信息:
OBServer 服务器已完成相关配置。详细信息,请参见 部署前准备 中 服务器配置 章节。
部署环境已完成相关配置。详细信息,请参见 命令行部署 中 部署环境配置 下的章节。
操作步骤
安装目录和软件
安装 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 环境,或者 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,sort_dir,sstable,slog} -bash-4.2$ mkdir -p /data/log1/$cluster_name/{clog,etc2,ilog,oob_clog} -bash-4.2$ mkdir -p /home/admin/oceanbase/store/$cluster_name -bash-4.2$ for t in {etc3,sort_dir,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,ilog,oob_clog};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,sort_dir,sstable,slog} -bash-4.2$ mkdir -p /data/log1/obdemo/{clog,etc2,ilog,oob_clog} -bash-4.2$ mkdir -p /home/admin/oceanbase/store/obdemo -bash-4.2$ for t in {etc3,sort_dir,sstable,slog};do ln -s /data/1/obdemo/$t /home/admin/oceanbase/store/obdemo/$t; done -bash-4.2$ for t in {clog,etc2,ilog,oob_clog};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 |-- ilog -> /data/log1/obdemo/ilog |-- oob_clog -> /data/log1/obdemo/oob_clog |-- slog -> /data/1/obdemo/slog |-- sort_dir -> /data/1/obdemo/sort_dir `-- sstable -> /data/1/obdemo/sstable 9 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 进程。
示例如下:
[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' -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 cluster id: 10001 appname: obdemo optstr: system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2参数解释:
参数 说明 -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指定参数文件的冗余目录。可通过
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:62888 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:62889 0.0.0.0:* LISTEN - 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 - tcp 0 0 0.0.0.0:63000 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:2881 0.0.0.0:* LISTEN 79697/observer tcp 0 0 0.0.0.0:2882 0.0.0.0:* LISTEN 79697/observer集群 bootstrap 操作。
通过 obclient 命令连接已启动的 observer 进程,密码为空。
[root@xxx admin]# obclient -h127.1 -uroot@sys -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'; 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 '**1***'; Query OK, 0 rows affected
初始化集群参数(可选)
OceanBase 集群支持通过参数去调整集群的行为。参数修改通常是及时生效,并持久化到参数文件中( /home/admin/oceanbase/etc/observer.config.bin)。这个参数文件是 binary 类型文件,直接查看会有乱码,使用 strings 命令查看可正常显示。
示例如下:
[root@xxx /]# cd /home/admin/oceanbase/etc
[root@xxx etc]# strings observer.config.bin|grep rootservice
rootservice_list=10.10.10.1:2882:2881
或者在集群里使用 SHOW PARAMETERS LIKE '%rootservice_list%'\G 命令直接查看参数。
示例如下:
obclient> SHOW PARAMETERS LIKE '%rootservice_list%'\G
*************************** 1. row ***************************
zone: zone1
svr_type: observer
svr_ip: 10.10.10.1
svr_port: 2882
name: rootservice_list
data_type: NULL
value: 10.10.10.1:2882:2881
info: a list of servers against which election candidate is checked for validation
section: OBSERVER
scope: CLUSTER
source: DEFAULT
edit_level: DYNAMIC_EFFECTIVE
1 row in set
如果 /home/admin 目录空间很紧张,则设置开启回收系统日志的功能。
-bash-4.2$ obclient -h127.1 -uroot@sys -P2881 -p
Enter password:
-- observer log 自清理设置
obclient> ALTER SYSTEM SET enable_syslog_recycle=True;
Query OK, 0 rows affected
obclient> ALTER SYSTEM SET max_syslog_file_count=10;
Query OK, 0 rows affected
obclient> SHOW PARAMETERS WHERE NAME IN ('enable_syslog_recycle', 'max_syslog_file_count')\G
*************************** 1. row ***************************
zone: zone1
svr_type: observer
svr_ip: 10.10.10.1
svr_port: 2882
name: enable_syslog_recycle
data_type: NULL
value: False
info: specifies whether log file recycling is turned on. Value: True:turned on; False: turned off
section: OBSERVER
scope: CLUSTER
source: DEFAULT
edit_level: DYNAMIC_EFFECTIVE
*************************** 2. row ***************************
zone: zone1
svr_type: observer
svr_ip: 10.10.10.1
svr_port: 2882
name: max_syslog_file_count
data_type: NULL
value: 0
info: specifies the maximum number of the log files that can co-exist before the log file recycling kicks in. Each log file can occupy at most 256MB disk space. When this value is set to 0, no log file will be removed. Range: [0, +∞) in integer
section: OBSERVER
scope: CLUSTER
source: DEFAULT
edit_level: DYNAMIC_EFFECTIVE
2 rows in set



