部署分布式 OceanBase 集群
本文档使用命令行 来进行 1-1-1 架构的分布式 OceanBase 集群部署,有 3 台 服务器,每 1 台 服务器就是一个 Zone。
192.168.48.142
192.168.55.209
192.168.55.210
前提条件
- 准备三台服务器,并且这三台机器之间可以互相访问。同时,需要确保本地机器能够通过 SSH 登录到这三台服务器,以便进行操作和配置。
- 准备好 OceanBase 数据库的 RPM 包、OBClient 的 RPM 包 和 OBProxy RPM 包 。
部署前配置
创建 admin 用户(所有节点)
使用 root 用户分别登录3台服务器
ssh root@192.168.48.142
ssh root@192.168.55.209
ssh root@192.168.55.210
创建 admin 用户
--创建用户组 admin 以及创建用户 admin
useradd -U admin -d /home/admin -s /bin/bash
--设置用户admin密码
echo 'admin'|passwd --stdin admin
--赋予用户目录权限
chown -R admin:admin /home/admin
--为账户 admin 设置 sudo 权限
sudo visudo 等价于 vi /etc/sudoers
在打开的界面找到以下内容
Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
条目下增加
admin ALL=(ALL) NOPASSWD: ALL
按 ESC 键,输入 :wq,保存退出。
--云服务器需要,修改 root 用户权限并将 admin 用户添加至 wheel 组
vim /etc/pam.d/su
在打开的界面找到以下内容
#auth sufficient pam_wheel.so trust use_uid
删除前面的注释符号# 保存
然后将 admin 用户添加至 wheel 组
usermod -aG wheel admin
目录规划(所有节点)
--创建 data 目录
mkdir -p /data/{1,log1}
--赋予权限
chown -R admin:admin /data
依次往 3 台主机上传 rpm 安装包
官方下载地址:https://www.oceanbase.com/softwarecenter
根据部署环境选择对应的安装介质
说明:OBproxy 可以和 OBServer 共用一台主机 ,这里只需要将安装包上传到一台主机即可。
下载并上传到/home/admin目录下
[root@iZbp1330hxx8l77slgu7ghZ ~]# ls -l /home/admin/
total 341204
-rw-r--r-- 1 root root 12010316 Jun 11 2024 obclient-2.2.6-32024052710.el7.x86_64.rpm
-rw-r--r-- 1 root root 75214004 Apr 17 20:41 ob-deploy-3.2.0-2.el7.x86_64.rpm
-rw-r--r-- 1 root root 30409776 Jun 11 2024 obproxy-4.2.3.0-20231226165754.el7.x86_64.rpm
-rw-r--r-- 1 root root 231747600 Jun 18 2024 oceanbase-4.3.1.0-100010022024052916.el7.x86_64.rpm
部署操作
安装软件(所有节点)
- 登录到 服务器。
- 切换到 admin 目录下。
cd /home/admin
- 安装 OceanBase 数据库 RPM 包。
rpm -ivh oceanbase-4.3.1.0-100010022024052916.el7.x86_64.rpm
说明:OceanBase 软件将会被安装在目录 /home/admin/oceanbase
下。如果需要指定其他目录,可以通过设置 --prefix
参数来指定。命令参考如下: rpm -ivh --prefix=<自定义安装目录>
。
- 安装 obclient 客户端 RPM 包。
rpm -ivh obclient-2.2.6-32024052710.el7.x86_64.rpm
- 重复步骤 1 ~ 步骤 4,完成所有机器上 OceanBase 数据库 RPM 包和 obclient RPM 包的安装。
- 安装 OBproxy RPM 包。只在192.168.48.142上安装
说明:OBproxy RPM 包安装到其中一台机器即可。
rpm -ivh obproxy-4.2.3.0-20231226165754.el7.x86_64.rpm
初始化目录(所有节点)
说明:
OceanBase 的数据目录通常建在独立的磁盘上 ,然后通过软链接方式链接到软件 Home 目录 下面。
此处 dxjoceanbase 是以集群名称 创建的目录,可根据需要自行定义。该名称在启动 observer 进程时会用到 。
切换 admin 用户
su - admin
创建各目录盘
su - admin
--创建OceanBase 数据盘目录
mkdir -p /data/1/dxjoceanbase/{etc3,sstable,slog}
--创建 OceanBase 日志盘目录
mkdir -p /data/log1/dxjoceanbase/{clog,etc2}
--创建 OceanBase 数据文件目录
mkdir -p /home/admin/oceanbase/store/dxjoceanbase
--创建 OBproxy 日志文件目录
mkdir -p /home/admin/logs/obproxy/log
建立软连接
建立数据文件目录下 sstable
和 slog
文件到数据盘目录的软连接。
su - admin
for t in {sstable,slog};do ln -s /data/1/dxjoceanbase/$t /home/admin/oceanbase/store/dxjoceanbase/$t; done
建立数据文件目录下 clog
和 etc2
到数据盘目录的软连接。
su - admin
for t in {clog,etc2};do ln -s /data/log1/dxjoceanbase/$t /home/admin/oceanbase/store/dxjoceanbase/$t; done
建立到 obproxy 的软链接(该操作在安装了 OBProxy 的主机上执行)
obproxy 安装目录在 /opt/taobao/install
下。obproxy 进程 home 目录是 /opt/taobao/install/obproxy
,这是一个软链接,实际指向相应的 obproxy 版本软件目录。
--建立软链接
su - admin
cd /opt/taobao/install
sudo ln -s obproxy-4.2.3.0 obproxy
--修改 obproxy 的所有者和所属组为 admin
su - root
chown -R admin:admin /opt/taobao/install/obproxy
初始化 OceanBase 集群
注意
-
启动 observer 进程,必须使用
admin
用户 。 - 在部署时应根据机器真实 IP 填写(ECS 机器的私有 IP 地址)。
启动 observer 进程
语法
su - admin
--语法
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"
参数解释
参数 | 说明 |
---|---|
-I |
-i
|* -I
:指定待启动的节点 IP 。在多机部署场景下,不能指定 127.0.0.1 作为目标 IP。建议使用指定 IP(例如:-I 10.10.10.1
)来启动节点。
-
-i
:指定网卡名 ,可通过ifconfig
命令查看。
说明:支持通过同时指定 IP 和网卡名 (例如:-I 10.10.10.1 -i eth0
)来启动节点,但不建议这么用 。|
|-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 数据库内部保留内存。在机器内存较少的情况下可以考虑将该值调小,需要注意的是,在性能测试时可能会出现内存不足的问题。 - :用于设置可用的总内存大小。
- datafile_size:用于设置数据文件占用磁盘可用空间的大小。即指定 OceanBase 数据库数据文件
sstable
的大小(一次性初始化),根据/data/1/
可用空间评估,建议不少于100G
。 - datafile_disk_percentage:磁盘数据文件占用磁盘总空间的百分比。
- datafile_next:用于设置磁盘数据文件自动扩容的步长。
- datafile_maxsize:用于设置磁盘数据文件自动扩容的最大空间。
- 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 进程
启动第一台机器的 observer 进程
--zone1:在 admin 用户下,启动第一台机器的 observer 进程
su - admin
cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -I 192.168.48.142 -P 2882 -p 2881 -z zone1 -d /home/admin/oceanbase/store/dxjoceanbase -r '192.168.48.142:2882:2881;192.168.55.209:2882:2881;192.168.55.210:2882:2881' -c 10001 -n dxjoceanbase -o "memory_limit=6G,system_memory=1G,datafile_size=10G,log_disk_size=5G,__min_full_resource_pool_memory=1073741824,resource_hard_limit=150,config_additional_dir=/data/1/dxjoceanbase/etc3;/data/log1/dxjoceanbase/etc2"
--验证 observer 进程启动成功
ps -ef|grep observer 输出如下:
admin 2230 1 8 15:10 ? 00:00:01 /home/admin/oceanbase/bin/observer -I 192.168.48.142 -P 2882 -p 2881 -z zone1 -d /home/admin/oceanbase/store/dxjoceanbase -r 192.168.48.142:2882:2881;192.168.55.209:2882:2881;192.168.55.210:2882:2881 -c 10001 -n dxjoceanbase -o memory_limit=6G,system_memory=1G,datafile_size=10G,log_disk_size=5G,__min_full_resource_pool_memory=1073741824,resource_hard_limit=150,config_additional_dir=/data/1/dxjoceanbase/etc3;/data/log1/dxjoceanbase/etc2
启动第二台机器的 observer 进程
--zone2:在 admin 用户下,启动第二台机器的 observer 进程
su - admin
cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -I 192.168.55.209 -P 2882 -p 2881 -z zone2 -d /home/admin/oceanbase/store/dxjoceanbase -r '192.168.55.209:2882:2881;192.168.55.209:2882:2881;192.168.55.210:2882:2881' -c 10001 -n dxjoceanbase -o "memory_limit=6G,system_memory=1G,datafile_size=10G,log_disk_size=5G,__min_full_resource_pool_memory=1073741824,resource_hard_limit=150,config_additional_dir=/data/1/dxjoceanbase/etc3;/data/log1/dxjoceanbase/etc2"
--验证 observer 进程启动成功
ps -ef|grep observer 输出如下:
admin 2230 1 6 15:10 ? 00:00:15 /home/admin/oceanbase/bin/observer -I 192.168.48.142 -P 2882 -p 2881 -z zone1 -d /home/admin/oceanbase/store/dxjoceanbase -r 192.168.48.142:2882:2881;192.168.55.209:2882:2881;192.168.55.210:2882:2881 -c 10001 -n dxjoceanbase -o memory_limit=6G,system_memory=1G,datafile_size=10G,log_disk_size=5G,__min_full_resource_pool_memory=1073741824,resource_hard_limit=150,config_additional_dir=/data/1/dxjoceanbase/etc3;/data/log1/dxjoceanbase/etc2
启动第三台机器的 observer 进程
--zone3:在 admin 用户下,启动第三台机器的 observer 进程
cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -I 192.168.55.210 -P 2882 -p 2881 -z zone3 -d /home/admin/oceanbase/store/dxjoceanbase -r '192.168.48.142:2882:2881;192.168.55.209:2882:2881;192.168.55.210:2882:2881' -c 10001 -n dxjoceanbase -o "memory_limit=6G,system_memory=1G,datafile_size=10G,log_disk_size=5G,__min_full_resource_pool_memory=1073741824,resource_hard_limit=150,config_additional_dir=/data/1/dxjoceanbase/etc3;/data/log1/dxjoceanbase/etc2"
--验证 observer 进程启动成功
ps -ef|grep observer 输出如下:
admin 2282 1 14 15:16 ? 00:00:01 /home/admin/oceanbase/bin/observer -I 192.168.55.210 -P 2882 -p 2881 -z zone3 -d /home/admin/oceanbase/store/dxjoceanbase -r 192.168.48.142:2882:2881;192.168.55.209:2882:2881;192.168.55.210:2882:2881 -c 10001 -n dxjoceanbase -o memory_limit=6G,system_memory=1G,datafile_size=10G,log_disk_size=5G,__min_full_resource_pool_memory=1073741824,resource_hard_limit=150,config_additional_dir=/data/1/dxjoceanbase/etc3;/data/log1/dxjoceanbase/etc2
注意:如果启动失败,可以看下日志中的报错信息,根据报错信息进行错误处理。
[admin@xxx ~]cat /home/admin/oceanbase/log/observer.log |grep "ERROR"
集群 BootStrap 操作
注意: 同一个集群,只需要进行一次集群初始化,即仅执行一次 bootstrap
命令即可。
使用 obclient
命令登录集群
登录任意一台服务器,使用 obclient
命令登录集群
obclient -h127.0.0.1 -uroot -P2881 -p
修改集群的查询时间
set session ob_query_timeout=1000000000;
执行 bootstrap
命令
注意: 启动 observer 进程时设置的不同 Zone 与机器 IP 要一一对应。执行时间约1m多点
--语法
ALTER SYSTEM BOOTSTRAP ZONE 'zone1' SERVER 'xxx.xxx.xxx.xx1:2882',ZONE 'zone2' SERVER 'xxx.xxx.xxx.xx2:2882',ZONE 'zone3' SERVER 'xxx.xxx.xxx.xx3:2882';
--示例
ALTER SYSTEM BOOTSTRAP ZONE 'zone1' SERVER '192.168.48.142:2882',ZONE 'zone2' SERVER '192.168.55.209:2882',ZONE 'zone3' SERVER '192.168.55.210:2882';
如果这一步报错了,一般原因集中在如下几点:
- observer 进程启动参数不对。
- observer 相关目录权限不对。
- 日志目录空间不足一定比例(跟数据目录合用了大目录,空间被数据目录占用了)
- 节点时间不同步。
- 节点内存资源不足等等。
请排查这些问题后,清理目录后重新部署,详情请参见 清理 OceanBase 旧集群。
简单验证集群初始化成功
通过查看集群中 database
,来简单验证集群初始化成功。
show databases;
输出如下:
obclient [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| LBACSYS |
| mysql |
| oceanbase |
| ORAAUDITOR |
| SYS |
| test |
+--------------------+
7 rows in set (0.007 sec)
初始化 OBProxy
创建 OBProxy 账户
OBProxy 需要与后端 OBServer 节点保持通信 ,需要提前在 OceanBase 集群的 sys 租户下为 OBProxy 节点创建连接用户(proxyro)和密码 。该用户密码用于启动 OBProxy 进程时配置相关参数来建立通信 。
说明: proxyro 用户是 OBProxy 访问 OceanBase 集群的用户。一个 OceanBase 集群对应一个 proxyro 账号。
创建 proxyro
用户
CREATE USER proxyro IDENTIFIED BY '123456';
给 proxyro
用户授权
GRANT SELECT ON *.* TO proxyro;
执行 exit
命令退出集群。
启动 OBProxy 节点
- 在安装了 OBProxy 的主机上执行。
- 进入 admin 用户下的 OBProxy 软件的 home 目录启动 OBProxy 进程。
OBProxy 启动时通过参数 rootservice_list
指定 OceanBase 集群。
语法
cd /opt/taobao/install/obproxy && bin/obproxy -r "xxx.xxx.xxx.1:2881;xxx.xxx.xxx.2:2881;xxx.xxx.xxx.3:2881" -p 2883 -o "observer_sys_password=$sha1_value,enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false" -c cluster_name
说明
-
$sha1_value
应根据实际设置密码替换。例如:proxyro 用户设置的密码是123456
,则需要设置observer_sys_password
的值是7c4a8d09ca3762af61e59520943dc26494f8941b
。查询密码 sha1 后的值命令如下:
[admin@xxx ~] echo -n 123456|sha1sum
参数解释
参数 | 说明 |
---|---|
-r |
指定 OBServer 节点 IP 和端口。 |
-p |
指定服务端口号,一般指定为 2883 。 |
-c |
指定集群名称。 |
-o |
指定硬件或者内核参数配置。 |
示例
--查询密码 sha1 后的值
echo -n 123456|sha1sum
--启动 OBProxy 节点
cd /opt/taobao/install/obproxy && bin/obproxy -r "192.168.48.142:2881;192.168.55.209:2881;192.168.55.210:2881" -p 2883 -o "observer_sys_password=7c4a8d09ca3762af61e59520943dc26494f8941b,enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false" -c dxjoceanbase
若执行此命令报错bin/obproxy: error while loading shared libraries: libidn.so.11: cannot open shared object file: No such file or directory
,请执行该命令 sudo yum install libidn
。
检查进程是否存在
ps -ef|grep obproxy
输出结果如下:
admin 2986 1 0 15:23 ? 00:00:00 bin/obproxy -r 192.168.48.142:2881;192.168.55.209:2881;192.168.55.210:2881 -p 2883 -o observer_sys_password=7c4a8d09ca3762af61e59520943dc26494f8941b,enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false -c dxjoceanbase
部署后验证
部署成功后,可以通过 OBProxy 连接集群。格式为: 用户名@租户名#集群名 或 集群名:租户名:用户名 。
使用 root
用户登录 dxjoceanbase 集群的 sys 租户。
obclient -h127.0.0.1 -P2883 -uroot@sys#dxjoceanbase -Doceanbase -A
连接成功后,输入如下:
[admin@iZbp1i4d7p6sjwjysy9j8cZ obproxy]$ obclient -h127.0.0.1 -P2883 -uroot@sys#dxjoceanbase -Doceanbase -A
Welcome to the OceanBase. Commands end with ; or \g.
Your OceanBase connection id is 1
Server version: OceanBase 4.3.1.0 (r100010022024052916-9a755dd27aaaf5e34e8ad6ad95942a0d89e7c80f) (Built May 29 2024 17:21:45)
Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
obclient [oceanbase]>
部署完成后,可以根据需要查询集群的资源、创建租户、创建用户等操作。