泛微网络实践:手动部署 OceanBase 集群(三副本)

2024年 5月 7日 40.4k 0

作者简介:王芝超,数据库DBA。

本次测试使用单台服务,启动3个 observer 服务,先启动一个 observer ,然后有一个副本扩容至3副本的1-1-1集群。

 

服务器信息:

Observer

zone1 192.168.7.41 2881 2882
zone2 192.168.7.41 3881 3882
zone3 192.168.7.41 4881 4882

 

obproxy

192.168.11.131 2883 2884

 

1     系统初始化内容参考

部署之前首先要初始化服务器环境,这个请参考:

https://open.oceanbase.com/docs/tutorials/quickstart/V1.0.0/2-4-how-to-initialize-the-server-environment

 

 

2     建立相关数据目录

mkdir -p /ob/{observer01,observer02,observer03, oceanbase}
mkdir -p /ob/observer{01,02,03}/store/{sort_dir,sstable,clog,ilog,slog}

泛微网络实践:手动部署 OceanBase 集群(三副本)-1

 

3     安装 OceanBase 软件包

登录官网下载相应的安装包后进行安装,此处通过解压 rpm 安装包,并安装到 /ob/oceanbase 目录下

 

泛微网络实践:手动部署 OceanBase 集群(三副本)-2

 

 

4     启动 observer

启动 zone1 的 observer ,并初始化。

4.1   启动 observer

如果三个节点机型都一致,那么启动参数里只有一个参数不一样,就是 -z 指定该节点是哪个 zone 。三个 zone 的三个节点初始化为一个三副本集群。后面 -o 参数不是必须的。这里主要是测试机器内存不足,所以需要指定一些影响内存的参数。如果您机器内存足够(如大于64G),则可以不需要 -o 参数部分。

 

cd /ob/observer01/ && /ob/oceanbase/bin/observer -r "192.168.7.41:2882:2881" -o __min_full_resource_pool_memory=268435456,memory_limit=8G,system_memory=1G,stack_size=512K,cpu_count=16,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,net_thread_count=4,sys_bkgd_migration_retry_num=3,minor_freeze_times=10,enable_separate_sys_clog=0,enable_merge_by_turn=False,datafile_size=50G,enable_syslog_recycle=True,max_syslog_file_count=10 -z zone1 -p 2881 -P 2882 -c 1 -d /ob/observer01/store -i enp4s0 -l ERROR

 

泛微网络实践:手动部署 OceanBase 集群(三副本)-3

 

 

4.2   初始化集群

当 OceanBase 集群正常启动,并且监听正常时,连接到节点(通过 2881 端口直连),进行自举( bootstrap 集群初始化)操作。

初始密码是空。

obclient -h 192.168.7.41 -u root -P 2881 -p -c -A
set session ob_query_timeout=1000000000; alter system bootstrap ZONE 'zone1' SERVER '192.168.7.41:2882';

泛微网络实践:手动部署 OceanBase 集群(三副本)-4

 

4.3   查看集群状态

初始化完成后检查集群的状态

泛微网络实践:手动部署 OceanBase 集群(三副本)-5

 

4.4   修改密码

集群管理员( root@sys )密码默认集群管理员( root@sys )的密码是空的,这里需要设置一个密码。

 

alter user root identified by ‘****’

 

创建 proxyro 用户,后面部署 obproxy 时要用到。

OBPROXY 用户(proxyro)密码默认 OBPROXY 连接 OceanBase 集群使用用户 proxyro 。这个用户不存在,需要创建。

create user obproxyro identified by "proxy";
grant select on oceanbase.* to proxyro

 

 

5     集群副本扩容

启动 zone2,zone3 的 observer。

 

zone2
cd /ob/observer02/ && /ob/oceanbase/bin/observer -r "192.168.7.41:3882:3881" -o __min_full_resource_pool_memory=268435456,memory_limit=8G,system_memory=1G,stack_size=512K,cpu_count=16,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,net_thread_count=4,sys_bkgd_migration_retry_num=3,minor_freeze_times=10,enable_separate_sys_clog=0,enable_merge_by_turn=False,datafile_size=50G,enable_syslog_recycle=True,max_syslog_file_count=10 -z zone2 -p 3881 -P 3882 -c 1 -d /ob/observer02/store -i enp4s0 -l ERROR

 

 

zone3
cd /ob/observer03/ && /ob/oceanbase/bin/observer -r "192.168.7.41:4882:4881" -o __min_full_resource_pool_memory=268435456,memory_limit=8G,system_memory=1G,stack_size=512K,cpu_count=16,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,net_thread_count=4,sys_bkgd_migration_retry_num=3,minor_freeze_times=10,enable_separate_sys_clog=0,enable_merge_by_turn=False,datafile_size=50G,enable_syslog_recycle=True,max_syslog_file_count=10 -z zone3 -p 4881 -P 4882 -c 1 -d /ob/observer03/store -i enp4s0 -l ERROR
 

泛微网络实践:手动部署 OceanBase 集群(三副本)-6

 

5.1   副本扩容

通过如下命令进行集群的副本扩容

obclient -h 192.168.7.41 -u root -P 2881 -p -c -A
alter system start zone 'zone2';
alter system start zone 'zone2';
alter system add zone 'zone2' region 'default_region';
alter system add zone 'zone3' region 'default_region';
alter system add server '192.168.7.41:3883' zone 'zone2';   
alter system add server '192.168.7.41:4882' zone 'zone3';  

 

泛微网络实践:手动部署 OceanBase 集群(三副本)-7

5.2   修改资源池配置

修改系统资源池:

泛微网络实践:手动部署 OceanBase 集群(三副本)-8

 

泛微网络实践:手动部署 OceanBase 集群(三副本)-9

5.3   修改副本

查看系统表,当前的副本数仍然为1,修改进行修改

泛微网络实践:手动部署 OceanBase 集群(三副本)-10

 

Locality 的设置通常用于集群的副本数升级、降级或集群的搬迁:

集群副本数升级

以租户为粒度,对集群中的每一个租户,增加租户下 Partition 的副本数。例如,将 Locality 由 F@z1变更为 F@z1,F@z2,F@z ,租户从 1 副本变为 3 副本。

 

泛微网络实践:手动部署 OceanBase 集群(三副本)-11

副本扩容命令:

ALTER TENANT sys locality="FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3";

扩容任务进度查询:

 select gmt_create,gmt_modified,job_id,job_type,job_status,return_code,progress,tenant_id from __all_rootservice_job;

 

泛微网络实践:手动部署 OceanBase 集群(三副本)-12

 

官方参考手册:

https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/modify-the-tenant-s-locality

 

https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/locality-management-overview

 

https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/modify-the-tenant-s-locality

 

 

 

5.4   扩容验证

副本修改完成之后,查看表的副本参数已经更改:REPLICA_NUM = 3

泛微网络实践:手动部署 OceanBase 集群(三副本)-13

 

 

 

6     安装 OBPROXY

手动部署,需要安装 OceanBase 的 OBPROXY 软件 。官网下载rpm包后安装即可

启动 OBPROXY 进程也推荐在软件安装目录,进程 obproxy 会在该目录下生成目录 etc 保存 OBPROXY 的运行参数,以及目录 log 保存运行日志。

泛微网络实践:手动部署 OceanBase 集群(三副本)-14

 

6.1   启动obproxy

进程 obproxy 默认会监听2个端口:2883 和 2884 。

 

/home/admin/obproxy-3.2.0/bin/obproxy -p2883 -c obcluster -r "192.168.7.41:2881;192.168.7.41:3881;192.168.7.41:4881" -o "enable_cluster_checkout=false,enable_strict_kernel_release=false,enable_metadb_used=false"

检查 OBPROXY 监听正常

 

泛微网络实践:手动部署 OceanBase 集群(三副本)-15

 

6.2   登录 OBPROXY 修改密码

登录用户名:root@proxysys, 端口:2883 ,初始密码:空。

obclient  -uroot@proxysys -h192.168.11.131 -P2883 -p -c -A
show proxyconfig like '%sys_password%';

 

修改 OBPROXY 用户密码是通过修改参数的方式,命令是:alter proxyconfig set 。

alter proxyconfig set obproxy_sys_password ="proxy";
alter proxyconfig set observer_sys_password ="proxy";

 

同时还需要修改 OBPROXY 连接 OceanBase 集群用户 proxyro 的密码。这样 OBPROXY 才能跟 OceanBase 集群正常连接。这个密码就是前面 OceanBase 集群初始化后创建的用户 proxyro 的密码。

退出,通过 OBPROXY 连接 OceanBase 集群看看, 如果能查看所有会话,则说明 OBPROXY 部署成功。

obclient  -uroot@sys#obcluster -h192.168.11.131 -P2883 -p -c -A   

 

泛微网络实践:手动部署 OceanBase 集群(三副本)-16

 

 

7     创建业务租户

创建业务租户 tenant_wang , 通过 proxy 登录集群 sys 租户,然后创建

obclient  -uroot@sys#obcluster -h192.168.11.131 -P2883 -p -c -A

 

7.1   创建资源池

create resource pool pool_wang unit='sys_unit_config' , unit_num=1, zone_list=('zone1' ,'zone2','zone3') ;

泛微网络实践:手动部署 OceanBase 集群(三副本)-17

泛微网络实践:手动部署 OceanBase 集群(三副本)-18

7.2   创建业务租户

 

create tenant tenant_wang resource_pool_list=('pool_wang'), primary_zone='RANDOM',comment 'mysql tenant/instance', charset='utf8'  set ob_tcp_invited_nodes='%' ;

 

泛微网络实践:手动部署 OceanBase 集群(三副本)-19

 

7.3   创建业务数据库

 

退出 sys 租户,通过 proxy 登录业务租户 tenant_wang ,并创建数据库和表。

obclient  -uroot@tenant_wang#obcluster -h192.168.11.131 -P2883 -p -c -A
create database wang default character set utf8;

泛微网络实践:手动部署 OceanBase 集群(三副本)-20

 

创建表

CREATE TABLE `accountmoremenuinfo` (
  `id` INT DEFAULT NULL,
  `labelid` INT DEFAULT NULL,
  `customname` VARCHAR(1000) DEFAULT NULL,
  `icon` VARCHAR(1000) DEFAULT NULL,
  `isshow` CHAR(1) DEFAULT NULL,
  `url` VARCHAR(1000) DEFAULT NULL,
  `linkmode` CHAR(1) DEFAULT NULL,
  `type` VARCHAR(10) DEFAULT NULL,
  `shoposition` CHAR(1) DEFAULT NULL,
  `sortnum` INT DEFAULT NULL,
  `sType` VARCHAR(255) DEFAULT NULL,
  `iconType` VARCHAR(100) DEFAULT NULL,
  `iconFrom` VARCHAR(100) DEFAULT NULL,
  `iconImgSrc` VARCHAR(300) DEFAULT NULL
) ;
 
 
CREATE TABLE `actionexecutelog` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `ACTIONID` TEXT,
  `ACTIONTYPE` INT DEFAULT NULL,
  `DATASHOWCOUNT` INT DEFAULT NULL,
  `CREATEDATE` VARCHAR(80) DEFAULT NULL,
  `CREATETIME` VARCHAR(64) DEFAULT NULL,
  `ModifyDate` VARCHAR(80) DEFAULT NULL,
  `ModifyTime` VARCHAR(64) DEFAULT NULL,
  `clientip` VARCHAR(256) DEFAULT NULL,
  `execresult` INT DEFAULT NULL,
  `actiondbid` VARCHAR(1000) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_0826_actiondbid` (`actiondbid`),
  KEY `idx_0826_createDate` (`CREATEDATE`)
) ;
 
 
 
CREATE TABLE `actionsetting` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `ACTIONNAME` VARCHAR(1000) DEFAULT NULL,
  `ACTIONCLASS` TEXT,
  `TYPENAME` VARCHAR(160) DEFAULT NULL,
  `ACTIONSHOWNAME` VARCHAR(1000) DEFAULT NULL,
  `CREATEDATE` VARCHAR(80) DEFAULT NULL,
  `CREATETIME` VARCHAR(64) DEFAULT NULL,
  `MODIFYDATE` VARCHAR(80) DEFAULT NULL,
  `MODIFYTIME` VARCHAR(64) DEFAULT NULL,
  `javacode` TEXT,
  `uuid` VARCHAR(50) DEFAULT '0',
  `subcompanyid` INT DEFAULT NULL,
  PRIMARY KEY (`id`)
) AUTO_INCREMENT=152 ;
 

 

 

8     避坑指南

8.1   初始化报错找不到 lib 包

libmariadb.so.3: cannot open shared object file: No such file or directory

泛微网络实践:手动部署 OceanBase 集群(三副本)-21

 

切换到 admin 用户执行,并添加如下参数:

 

echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase/lib' >> ~/.bash_profile
source ~/.bash_profile

 

 

 ————————————————

 

附录:

练习题:

实践练习一(必选):OceanBase Docker 体验 

实践练习二(必选):手动部署 OceanBase 集群 

实践练习三(可选):使用OBD 部署一个 三副本OceanBase 集群 

实践练习四(必选):迁移 MySQL 数据到 OceanBase 集群 

实践练习五(可选):对 OceanBase 做性能测试 

实践练习六(必选):查看 OceanBase 执行计划 

还没交作业的小伙伴要抓紧啦!

可以免费带走 OBCP 考试券喔~~

方法一:完成四道必选练习

方法二:任意一道练习题 ➕ 结业考试超过80分

已经有很多同学抢先答题了,

加入钉钉群(群号3582 5151),和大家一起学习、交流~~

进群二维码:

泛微网络实践:手动部署 OceanBase 集群(三副本)-22

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论