暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

原创 大大刺猬 1天前
8

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

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

环境说明

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

用途 内网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块

image20260901135559476.png

实验前准备

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

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

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

安装OAT

tar -xvf oat-all-in-one-x86-*.tar cd oat-all-in-one-x86 sh install.sh

然后一路回车即可:

[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:

image20260901141251415.png

OCP需要勾选OB产品服务

image20260901141532507.png

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

image20260901141718227.png

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

image20260901141845410.png

安装metadb

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

image20260901141011099.png

image20260901142223307.png

注意目录空间使用:

image20260901142549978.png

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

安装OCP

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

image20260901143024668.png

image20260901143241455.png

image20260901143914361.png

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

image20260901143750909.png

然后又是等.

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

image20260901144510336.png

配置NFS

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

# 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那个扩容放前面就行):

内容大概如下,有点多.

资源分配与管理: 集群安装与资源分配 租户创建与资源隔离 负载均衡机制: 分区与负载均衡 表组与负载均衡 存储架构原理: 转储机制 合并机制 事务控制原理: 隔离级别与一致性读 锁与事务监控 扩缩容: 集群扩容 租户扩容 运维管理: 集群运维 配置项管理 容灾管理: 备份恢复 主备租户 监控诊断: 全链路追踪 SQL监控 负载均衡 强一致性读路由 弱一致性读路由 分布式事务路由 慢SQL语句监控 客户端主动断连接 路由诊断 分布式对象设计: 分区表与表组 最佳索引设计 SQL执行优化 执行计划管理 统计信息收集 数据迁移:(不在考试大纲里面) 使用OMS进行数据迁移(白屏) 使用DataX进行数据迁移(黑屏) 数据导入导出: 导入数据 备份全量数据 数据加载与卸载: 使用外表进行数据迁移 使用Load Data加载数据

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

OCP上添加主机

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

image20260901145203967.png

依次把3个observer都加完就行

image20260901145347539.png

image20260901145824655.png

单机部署

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

image20260901145552739.png

image20260901145918007.png

image20260901150654652.png

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

cpu_count:3

memory_limit:12G

system_memory:4G

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

黑屏查看与修改:

# 登录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';

租户创建

# 登录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节点

image20260901153426428.png

image20260901153655620.png

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

image20260901154313104.png

obproxy集群安装

image20260901154446600.png

image20260901154629825.png

image20260901154639202.png

然后又是等… 大概1分钟

租户扩容

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

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次…),附成绩:
a1ce1b5bc11820e2a8adc9e3e93d2697.png
image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论