首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >[oceanbase] OBCP V4 上机实验环境搭建&考试心得分享

[oceanbase] OBCP V4 上机实验环境搭建&考试心得分享

原创
作者头像
大大刺猬
发布2026-09-04 22:00:43
发布2026-09-04 22:00:43
60
举报
文章被收录于专栏:大大刺猬大大刺猬

本文为根据官方的obcpv4实验手册来准备环境并进行部分实验. 明天(2026.09.02)就要考试了,再过一遍实验....

一共8+2道题考,试时间好像是3个小时, 感觉不一定够. 之前考tdsql(tcce)的时候实验好像是8小时...

环境说明

本次使用腾讯云的竞价服务器, 配置如下:

用途

内网IP

公网IP

配置

OAT/OCP/METADB

172.17.32.23

124.x

16C32G 100GB+50GB(作为NFS)

OBServer/OBProxy

172.17.32.33

129.x

4C16G 100GB

OBServer/OBProxy

172.17.32.14

49.x

4C16G 100GB

OBServer/OBProxy

172.17.32.42

49.x

4C16G 100GB

建议选库存充足的实例,不然做到一半回收了就尴尬了(之前遇到过一次...)

我这一套算下来 每小时不到1块

实验前准备

主要是安装好OAT,METADB,OCP且配置好NFS.

上传OAT软件步骤就省略了.

后续会使用一大堆密码,我这里就随机生成个密码(除了OAT)来使用了,免得到处找密码: W_12vtY3FpA7pYA9

安装OAT

代码语言:shell
复制
tar -xvf oat-all-in-one-x86-*.tar
cd oat-all-in-one-x86
sh install.sh

然后一路回车即可:

代码语言:txt
复制
[root@VM-32-23-centos oat-all-in-one-x86]# sh install.sh 
Before installation, please set the config below:
Input the docker root dir: /docker
Input the docker bip: 172.17.0.1/16
Valid Docker BIP address: 172.17.0.1/16
Input the OAT data dir: /oat_data
Input the OAT HTTP listen port: 7000
Input the OAT database port: 3306
Input the OAT admin user password(login password): aaAA11__
Start prepare docker

● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2026-09-01 14:06:23 CST; 2s ago
     Docs: http://docs.docker.com
 Main PID: 14770 (dockerd)
    Tasks: 45
   Memory: 37.0M
   CGroup: /system.slice/docker.service
           ├─14770 /usr/bin/dockerd --bip=172.17.0.1/16 -H unix:///var/run/docker.sock --selinux-enabled=false --log-opt ma...
           └─14788 containerd --config /var/run/docker/containerd/containerd.toml --log-level info

Sep 01 14:06:22 VM-32-23-centos dockerd[14770]: time="2026-09-01T14:06:22.229733561+08:00" level=info msg="pickfirstBa...=grpc
Sep 01 14:06:22 VM-32-23-centos dockerd[14770]: time="2026-09-01T14:06:22.229882819+08:00" level=info msg="pickfirstBa...=grpc
Sep 01 14:06:22 VM-32-23-centos dockerd[14770]: time="2026-09-01T14:06:22.229983566+08:00" level=info msg="pickfirstBa...=grpc
Sep 01 14:06:22 VM-32-23-centos dockerd[14770]: time="2026-09-01T14:06:22.964279810+08:00" level=info msg="Graph migra...onds"
Sep 01 14:06:22 VM-32-23-centos dockerd[14770]: time="2026-09-01T14:06:22.964691200+08:00" level=info msg="Loading con...art."
Sep 01 14:06:23 VM-32-23-centos dockerd[14770]: time="2026-09-01T14:06:23.068746780+08:00" level=info msg="Loading con...one."
Sep 01 14:06:23 VM-32-23-centos dockerd[14770]: time="2026-09-01T14:06:23.086251763+08:00" level=info msg="Docker daem....09.9
Sep 01 14:06:23 VM-32-23-centos dockerd[14770]: time="2026-09-01T14:06:23.086322981+08:00" level=info msg="Daemon has ...tion"
Sep 01 14:06:23 VM-32-23-centos dockerd[14770]: time="2026-09-01T14:06:23.095600391+08:00" level=info msg="API listen ...sock"
Sep 01 14:06:23 VM-32-23-centos systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
Start prepare OAT
Loaded image: reg.docker.alibaba-inc.com/oceanbase/oat:4.3.2_bp1_20250711_x86
531eccfaba23e96af6dd8a0357cbd8e6199fe839abea662d790d0ddacd0af020
check OAT url http://127.0.0.1:7000/hc
OAT API not ready, please wait, sleep 5s retry...
OAT API not ready, please wait, sleep 5s retry...
OAT API not ready, please wait, sleep 5s retry...
OAT API not ready, please wait, sleep 5s retry...
OAT API not ready, please wait, sleep 5s retry...
OAT API ready
Copy images and binary_packages to OAT data dir
Trigger OAT scan api to find images and binary_packages
Trigger scan task success, please visit OAT web site and wait for scan task finished
OAT is ready for visit
url is: http://172.17.32.23:7000
user/password is: admin/aaAA11__ 

OAT就安装好了, 可以使用浏览器登录了(要换成公网IP):

http://172.17.32.23:7000

账号密码: admin/aaAA11__

第一次登录要修改密码, 我这里就修改为: bbBB22__

添加服务器

不管安装啥,都得先添加服务器. 登录OAT:

OCP需要勾选OB产品服务

precheck因为配置不够而失败,我们直接跳过

再添加OBServer服务器(不需要勾选OB产品服务): precheck也会失败,还是直接<设置为成功>

安装metadb

安装OCP之前需要个metadb, 可以使用mysql代替, 但我们还是安装metadb吧.

注意目录空间使用:

然后等安装好即可. 预计2分半

安装OCP

安装好metadb之后我们就可以安装OCP了. 但还需要先上传ocp image到/oat_data/images目录

metadb设置, 我们选择<其他 OB_MYSQL>,这样就不会检查配置了(我们的配置不满足要求).

然后又是等.

大概2个2分半(可以趁此玩会数独)

配置NFS

备份是要求NFS的, 我们就提前配好吧.

代码语言:shell
复制
# server端配置(本次使用ocp上面多的50G的磁盘作为NFS server)
yum install rpcbind -y
yum install nfs-utils -y
mkfs.xfs /dev/vdb
mkdir /data/backup -p
mount /dev/vdb /data/backup
chown admin:admin /data/backup/
echo "/data/backup 172.17.32.0/24(rw,no_root_squash,no_all_squash,sync)" >> /etc/exports
exportfs -r
systemctl start rpcbind
systemctl start nfs


# 客户端配置(那3个observer服务器上执行), 临时挂载就行,懒得写fstab了
yum install nfs-utils -y
mkdir /data/backup -p
mount 172.17.32.23:/data/backup /data/backup
chown admin:admin /data/backup/
mkdir /data/1 /data/log1 -p # 没得磁盘,我们得自己创建目录

实验

为了方便一次性做完,可以适当的调整下顺序(主要是dba2那个扩容放前面就行):

内容大概如下,有点多.

代码语言:txt
复制
资源分配与管理:
	集群安装与资源分配
	租户创建与资源隔离
负载均衡机制:
	分区与负载均衡
	表组与负载均衡
存储架构原理:
	转储机制
	合并机制
事务控制原理:
	隔离级别与一致性读
	锁与事务监控

扩缩容:
	集群扩容
	租户扩容
运维管理:
	集群运维
	配置项管理
容灾管理:
	备份恢复
	主备租户
监控诊断:
	全链路追踪
	SQL监控


负载均衡
强一致性读路由
弱一致性读路由
分布式事务路由
慢SQL语句监控
客户端主动断连接
路由诊断

分布式对象设计:
	分区表与表组
	最佳索引设计
SQL执行优化
	执行计划管理
	统计信息收集

数据迁移:(不在考试大纲里面)
	使用OMS进行数据迁移(白屏)
	使用DataX进行数据迁移(黑屏)
数据导入导出:
	导入数据
	备份全量数据
数据加载与卸载:
	使用外表进行数据迁移
	使用Load Data加载数据
	

我这里就随便选几道题演示了, 基本上都能根据文档上做

OCP上添加主机

登录OCP, 添加主机.(还是得先添加服务器,才能安装)

依次把3个observer都加完就行

单机部署

后面有个扩容的, 所以我们先部署单机.

本来安装集群的时候还要设置几个参数,但是我忘记了... 这里就直接修改参数吧...

cpu_count:3

memory_limit:12G

system_memory:4G

__min_full_resource_pool_memory:1G (隐藏参数得黑屏修改)

黑屏查看与修改:

代码语言:shell
复制
# 登录sys租户
mysql -h172.17.32.33 -P2881 -uroot@sys -pW_12vtY3FpA7pYA9 -Ac -Doceanbase

# 设置资源
alter system set memory_limit='12G'; 
alter system set cpu_count=3; 
alter system set system_memory='4G';
alter system set __min_full_resource_pool_memory=1073741824; -- 这里的值只能写数字
alter system set resource_hard_limit=200; -- 资源太少了, 就超卖些吧

# 查看资源配置
SELECT SVR_IP,CPU_CAPACITY, CPU_CAPACITY_MAX, 
CONCAT(ROUND(MEMORY_LIMIT/1024/1024/1024,1),' GB') AS MEMORY_LIMIT , 
CONCAT(ROUND(MEM_CAPACITY/1024/1024/1024,1), ' GB' ) AS MEN_CAPACITY FROM 
GV$OB_SERVERS; 
show parameters like 'memory_limit';
show parameters like 'cpu_count';
show parameters like 'system_memory';

租户创建

代码语言:shell
复制
# 登录sys租户
mysql -h172.17.32.33 -P2881 -uroot@sys -pW_12vtY3FpA7pYA9 -Ac -Doceanbase

# 创建unit
CREATE RESOURCE UNIT u1 MAX_CPU 2, MIN_CPU 1, MEMORY_SIZE '2G'; -- 就不演示资源不够的情况了. 没啥意义

# 查看可用资源
-- CPU
SELECT SVR_IP, CPU_CAPACITY_MAX, CPU_ASSIGNED_MAX,  
CPU_CAPACITY_MAX-CPU_ASSIGNED_MAX AS CPU_UNASSIGNED_MAX,  
CPU_CAPACITY, CPU_ASSIGNED,  
CPU_CAPACITY-CPU_ASSIGNED AS CPU_UNASSIGNED  
FROM GV$OB_SERVERS ORDER BY SVR_IP; 
-- memory
SELECT SVR_IP,  
CONCAT(ROUND(MEMORY_LIMIT/1024/1024/1024,1),'GB') AS MEM_LIMIT,   
CONCAT(ROUND(MEM_CAPACITY/1024/1024/1024,1),'GB') AS MEM_CAPACITY,   
CONCAT(ROUND(MEM_ASSIGNED/1024/1024/1024,1),'GB') AS MEM_ASSIGNED,  
CONCAT(ROUND((MEM_CAPACITY-MEM_ASSIGNED)/1024/1024/1024,1),'GB') AS MEM_UNASSIGNED  
FROM GV$OB_SERVERS ORDER BY SVR_IP; 

# 创建资源池(会实际分配资源)
CREATE RESOURCE POOL rp1  
UNIT 'u1',  
UNIT_NUM 1,  
ZONE_LIST ('zone1'); 

SELECT RESOURCE_POOL_ID,NAME,TENANT_ID,UNIT_COUNT,UNIT_CONFIG_ID,ZONE_LIST  
FROM  DBA_OB_RESOURCE_POOLS; 

# 创建租户 (白屏需要等几分钟才会同步), 黑屏创建的租户是没有root账号的密码的, 需要登录进去手动设置(alter user root@'%' identified by 'W_12vtY3FpA7pYA9';).
CREATE TENANT tenant1  
RESOURCE_POOL_LIST=('rp1') 
SET ob_tcp_invited_nodes='%'; 
 
SELECT TENANT_ID,TENANT_NAME,TENANT_TYPE,PRIMARY_ZONE,LOCALITY  
FROM DBA_OB_TENANTS;

# 查看各租户的资源(我偷偷把sys租户的资源也调小了)
MySQL [oceanbase]> SELECT T1.SVR_IP, T3.TENANT_NAME, T1.MIN_CPU, T1.MAX_CPU,  
    -> CONCAT(ROUND(T1. MEMORY_SIZE/1024/1024/1024,1),'GB') AS MEMORY_SIZE 
    -> FROM DBA_OB_UNITS T1, DBA_OB_RESOURCE_POOLS T2, DBA_OB_TENANTS T3   
    -> WHERE T1.RESOURCE_POOL_ID = T2.RESOURCE_POOL_ID  
    -> AND T2.TENANT_ID = T3.TENANT_ID  
    -> ORDER BY SVR_IP,TENANT_NAME; 
+--------------+-------------+---------+---------+-------------+
| SVR_IP       | TENANT_NAME | MIN_CPU | MAX_CPU | MEMORY_SIZE |
+--------------+-------------+---------+---------+-------------+
| 172.17.32.33 | sys         |       1 |       1 | 2.0GB       |
| 172.17.32.33 | tenant1     |       1 |       2 | 2.0GB       |
+--------------+-------------+---------+---------+-------------+


MySQL [oceanbase]> SELECT SVR_IP, CPU_CAPACITY_MAX, CPU_ASSIGNED_MAX,  
    -> CPU_CAPACITY_MAX-CPU_ASSIGNED_MAX AS CPU_UNASSIGNED_MAX,  
    -> CPU_CAPACITY, CPU_ASSIGNED,  
    -> CPU_CAPACITY-CPU_ASSIGNED AS CPU_UNASSIGNED  
    -> FROM GV$OB_SERVERS ORDER BY SVR_IP;
+--------------+------------------+------------------+--------------------+--------------+--------------+----------------+
| SVR_IP       | CPU_CAPACITY_MAX | CPU_ASSIGNED_MAX | CPU_UNASSIGNED_MAX | CPU_CAPACITY | CPU_ASSIGNED | CPU_UNASSIGNED |
+--------------+------------------+------------------+--------------------+--------------+--------------+----------------+
| 172.17.32.33 |                6 |                3 |                  3 |            3 |            2 |              1 |
+--------------+------------------+------------------+--------------------+--------------+--------------+----------------+
1 row in set (0.01 sec)

MySQL [oceanbase]> SELECT SVR_IP,  
    -> CONCAT(ROUND(MEMORY_LIMIT/1024/1024/1024,1),'GB') AS MEM_LIMIT,   
    -> CONCAT(ROUND(MEM_CAPACITY/1024/1024/1024,1),'GB') AS MEM_CAPACITY,   
    -> CONCAT(ROUND(MEM_ASSIGNED/1024/1024/1024,1),'GB') AS MEM_ASSIGNED,  
    -> CONCAT(ROUND((MEM_CAPACITY-MEM_ASSIGNED)/1024/1024/1024,1),'GB') AS MEM_UNASSIGNED  
    -> FROM GV$OB_SERVERS ORDER BY SVR_IP; 
+--------------+-----------+--------------+--------------+----------------+
| SVR_IP       | MEM_LIMIT | MEM_CAPACITY | MEM_ASSIGNED | MEM_UNASSIGNED |
+--------------+-----------+--------------+--------------+----------------+
| 172.17.32.33 | 12.0GB    | 8.0GB        | 4.0GB        | 4.0GB          |
+--------------+-----------+--------------+--------------+----------------+

集群扩容

把单节点扩展为3节点

然后就等5分钟左右就OK了

obproxy集群安装

然后又是等... 大概1分钟

租户扩容

集群扩容的时候,租户就已经变成了3副本了, 我们就改为修改zone分布吧.....

代码语言:shell
复制
MySQL [oceanbase]> SELECT TENANT_ID,TENANT_NAME,TENANT_TYPE,PRIMARY_ZONE,LOCALITY FROM 
    -> DBA_OB_TENANTS; 
+-----------+-------------+-------------+--------------+---------------------------------------------+
| TENANT_ID | TENANT_NAME | TENANT_TYPE | PRIMARY_ZONE | LOCALITY                                    |
+-----------+-------------+-------------+--------------+---------------------------------------------+
|         1 | sys         | SYS         | RANDOM       | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
|      1001 | META$1002   | META        | RANDOM       | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
|      1002 | tenant1     | USER        | RANDOM       | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
+-----------+-------------+-------------+--------------+---------------------------------------------+


MySQL [oceanbase]> alter tenant tenant1 primary_zone='zone1,zone2;zone3';
Query OK, 0 rows affected (0.07 sec)

MySQL [oceanbase]> SELECT TENANT_ID,TENANT_NAME,TENANT_TYPE,PRIMARY_ZONE,LOCALITY FROM  DBA_OB_TENANTS;
+-----------+-------------+-------------+-------------------+---------------------------------------------+
| TENANT_ID | TENANT_NAME | TENANT_TYPE | PRIMARY_ZONE      | LOCALITY                                    |
+-----------+-------------+-------------+-------------------+---------------------------------------------+
|         1 | sys         | SYS         | RANDOM            | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
|      1001 | META$1002   | META        | zone1,zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
|      1002 | tenant1     | USER        | zone1,zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
+-----------+-------------+-------------+-------------------+---------------------------------------------+

考试心得

20209.09.02写:

  1. 2026.09.02下午考试完, 时间基本上够.
  2. 考试不需要使用OAT,基本上就OCP上操作,还有部分黑屏操作
  3. 安装,集群扩容,备份恢复,主备库切换等都是OCP上操作的. 具体是白屏还是黑屏题目都有明确写的,根据题目来就行.
  4. 有个小坑就是ocp上的nfs服务没有启动,需要自己启动(考试题目直接让挂,然后就报错clnt_create: RPC: Program not registered, 但需要在ocp服务器上执行systemctl start rpcbind nfs启动相关服务才行....)

阅卷方式好像是去服务器上跑脚本检查, 所以考试不需要截图之类的,还是比较方便.

过了再发, 没过就等下次咯.

2026.09.04写:

今天(2026.09.04)出成绩了,就两天就出成绩,速度还是挺快的. 运气挺好,一次就过了(主要对比笔试考了4次.....),附成绩:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 环境说明
  • 实验前准备
    • 安装OAT
    • 添加服务器
    • 安装metadb
    • 安装OCP
    • 配置NFS
  • 实验
    • OCP上添加主机
    • 单机部署
    • 租户创建
    • 集群扩容
    • obproxy集群安装
    • 租户扩容
  • 考试心得
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档