关于oceanbase:技术分享-OceanBase-4X-最小化单机部署

0次阅读

共计 3428 个字符,预计需要花费 9 分钟才能阅读完成。

作者:杨涛涛

资深数据库专家,专研 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,能够手动进行转储来开释内存。

正文完
 0