技术分享 | OceanBase 4.X 最小化单机部署

本文由资深数据库专家杨涛涛分享,介绍了OceanBase4.x版本相较于3.x在单机部署时的资源占用优化,特别是如何实现单机分布式一体化架构,避免了多分区数据更新的两阶段提交。文章通过配置示例展示了最小化单机部署的过程,并讨论了内存和CPU资源的分配策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:杨涛涛

资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


我们知道,OceanBase 3.X 版本部署单机架构(一个ZONE,一台SERVER)需要耗费较多硬件资源才能正常使用。OceanBase 4.X 版本发布后,在资源占用这块做了很多优化,官方宣称4.X 版本是单机分布式一体化的架构,单台OB SERVER对数据的处理与单机数据库相比性能相当。比如对于 OceanBase 3.X 版本,就算是单机部署,对多个分区的数据更新依然需要两阶段提交来保证其原子性;对于OceanBase 4.X 单机部署,对多分区的数据更新不再需要两阶段提交来保证其原子性。

接下来,我们来体验下 OceanBase 4.X 版本的最小化单机部署。

下面是通过 OBD 部署的配置文件: 主要是以下几个参数
  1. memory_limit 设置为4G,这个是所有租户的总内存容量。
  2. system_memory 设置为1G,这个是500租户的内存容量。

    实际租户可使用内存是4G - 1G=3G。由于系统租户默认内存为2G,所以最后预留给业务租户的内存只有1G。当然也可以减少系统租户内存容量为1G,不过不建议这么做。

  3. __min_full_resource_pool_memory 设置为1G,这样才能允许创建unit最小内存为1G,要不会报如下错误:

    ERROR 1235 (0A000): unit MEMORY_SIZE less than __min_full_resource_pool_memory not supported

  4. cpu_count 设置为2。

    设置为2也够用了,系统租户使用一个核,剩下的一个核给业务租户使用。

oceanbase-ce:
  servers:
   - name: ob1
     ip: 127.0.0.1
  global:
     syslog_level: WARN
     enable_syslog_recycle: true
     max_syslog_file_count: 1
     
     __min_full_resource_pool_memory: 1073741824
     memory_limit: 4G
     system_memory: 1G

     datafile_size: 20G
     log_disk_size: 24G

     devname: lo
     cpu_count: 2

     production_mode: false
     cluster_id: 1
     appname: obytt100

     mysql_port: 2881
     rpc_port: 2882
     data_dir: /ob_data/1
     redo_dir: /ob_log/1
     home_path: /home/admin/oceanbase/1
     zone: z1

用以上配置文件来部署 OceanBase ,下面是我部署好的数据库:只有一台 OB SERVER ,可以当做单台 MySQL 实例一样来正常操作。

[root@ytt-pc scripts]# obd cluster display obytt100
Get local repositories and plugins ok
Open ssh connection ok
Cluster status check ok
Connect to observer ok
Wait for observer init ok
+--------------------------------------------+
|                  observer                  |
+-----------+---------+------+------+--------+
| ip        | version | port | zone | status |
+-----------+---------+------+------+--------+
| 127.0.0.1 | 4.0.0.0 | 2881 | z1   | ACTIVE |
+-----------+---------+------+------+--------+
obclient -h127.0.0.1 -P2881 -uroot -Doceanbase

我们来创建一个 MySQL 租户:

mysql:5.7.25:oceanbase>create resource unit ut1 max_cpu 1,memory_size '1G',max_iops 1024;
Query OK, 0 rows affected (0.009 sec)

<mysql:5.7.25:oceanbase>create resource pool p1 unit 'ut1',unit_num 1;
Query OK, 0 rows affected (0.013 sec)

<mysql:5.7.25:oceanbase>create tenant mysql resource_pool_list=('p1') set ob_tcp_invited_nodes='%';
Query OK, 0 rows affected (11.449 sec)


创建完租户后,查看现在的资源单元配置数据: sys_unit_config(sys租户资源单元)和 ut1 一共占用3G,加上之前500租户的1G,已经达到 memory_limit 的设置。

<mysql:5.7.25:oceanbase>select name,max_cpu,round(memory_size/1024/1024/1024,2) 'memory_size_GB' from __all_unit_config;
+-----------------+---------+----------------+
| name            | max_cpu | memory_size_GB |
+-----------------+---------+----------------+
| sys_unit_config |       1 |           2.00 |
| ut1             |       1 |           1.00 |
+-----------------+---------+----------------+
2 rows in set (0.001 sec)

完后查看剩余资源数据:CPU ,内存都已经分配殆尽。

<mysql:5.7.25:oceanbase>select svr_ip,svr_port,zone,round((cpu_capacity_max-cpu_assigned_max),2) 'cpu_free_num',cpu_capacity_max 'cpu_total_num',round((mem_capacity-mem_assigned)/1024/1024/1024,2) 'mem_free_GB', round(memory_limit/1024/1024/1024,2) 'mem_total_GB' from gv$ob_servers;
+-----------+----------+------+--------------+---------------+-------------+--------------+
| svr_ip    | svr_port | zone | cpu_free_num | cpu_total_num | mem_free_GB | mem_total_GB |
+-----------+----------+------+--------------+---------------+-------------+--------------+
| 127.0.0.1 |     2882 | z1   |         0.00 |             2 |        0.00 |         4.00 |
+-----------+----------+------+--------------+---------------+-------------+--------------+
1 row in set (0.000 sec)
接下来就可以正常建库建表了
[root@ytt-pc scripts]# obclient -h127.0.0.1 -P2881 -uroot@mysql -Doceanbase -cA -e "create database ytt;use ytt;create table t1(id int primary key);"

如果提示内存不足,比如:No memory or reach tenant memory limit , 可以手动进行转储来释放内存。

### 关于 OceanBase 4.x 版本的学习资源 #### 官方文档 官方提供了详尽的文档来帮助开发者了解和掌握 OceanBase 数据库的功能与特性。对于 OceanBase 4.x 版本,可以通过以下链接访问其官方文档: - **OceanBase 文档中心**: 提供了全面的技术文档,涵盖了安装指南、配置说明以及高级功能解析等内容[^1]。 - 地址: [https://www.oceanbase.com/docs](https://www.oceanbase.com/docs) #### PDF 下载 如果偏好离线阅读或打印学习资料,可以从官网获取相关技术白皮书和技术手册的 PDF 文件。这些文件通常包含了数据库架构设计、性能优化建议等方面的内容。 #### 视频教程推荐 针对初学者到中级水平用户,有几套优质的视频课程可以帮助理解并实践 OceanBase 的核心概念及其应用开发技巧: 1. **尚硅谷系列** - 这些视频虽然主要围绕传统关系型数据库展开讲解,但对于熟悉 SQL 标准语法及事务处理机制非常有益. - 推荐观看列表: - Java Web 基础教学 (BV号:BV1Y7411K7zz)[^3]. ```plaintext https://www.bilibili.com/video/BV1Y7411K7zz ``` 2. **雷丰阳老师的 Spring Boot 讲解** - 结合现代微服务框架介绍如何集成 NoSQL 解决方案之一即 OceanBase Community Edition into enterprise projects effectively.[^3] #### 社区支持与其他工具辅助学习 除了上述提到的传统形式外还有其他途径可供探索: - 使用 OBD(OceanBase Deployer)简化本地环境搭建流程的同时还能体验内置 benchmark 测试程序带来的便利性;它允许我们无需手动调整各项复杂参数就能获得接近生产环境下表现的结果展示图谱等等实用功能特点描述如下所示:[^4]. ```bash # Example of setting up an instance via command line interface provided by 'obd' utility package manager toolset included within distribution archives downloaded earlier from official website links listed above under section titled "Software Download". $ obd cluster deploy mycluster --config=config.yaml && obd bench tpcc prepare && obd bench tpcc run ``` 最后值得注意的是不同版本间可能存在细微差异因此务必参照对应发行版具体指导信息来进行操作以免造成不必要的麻烦或者误解某些特定行为模式上的改变情况发生. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值