集群使用——资源管理和租户创建

news2024/9/22 15:32:23

概述

OceanBase 数据库是多租户的分布式数据库,租户使用的资源建立在资源池上。资源池包含了资源单元,而资源单元则规定了具体资源的量化(如
CPU、Memory、Disk_Size 和 IOPS 等)。
创建租户前,必须规定租户使用的资源范围,资源池和资源单元就是为了满足租户资源隔离和负载均衡而存在的。

资源管理中的概念

资源单元(Resource Unit,Unit)

  • 资源单元是一个容器。实际上,副本是存储在资源单元之中的,所以资源单元是副本的容器。
  • 资源单元包含了计算存储资源(Memory、CPU 和 IO 等)同时资源单元也是集群负载均衡的一个基本单位,
  • 在集群节点上下线,扩容缩容时会动态调整资源单元在节点上的分布进而达到资源的使用均衡。

资源池 (Resource Pool)

  • 一个租户拥有若干个资源池,这些资源池的集合描述了这个租户所能使用的所有资源。
  • 一个资源池由具有相同资源规格(Unit Config)的若干个资源单元组成。
  • 一个资源池只能属于一个租户。每个资源单元描述了位于一个 Server 上的一组计算和存储资源,可以视为一个轻量级虚拟机,包括若干 CPU 资源、内存资源、磁盘资源等。一个租户在同一个 Server 上最多有一个资源单元(资源单元是和副本关联的,显而易见一个服务器不能有同一份数据的两个副本)。

资源配置(Resource Config)

  • 资源配置是资源单元的具体配置,包含资源单元所属的资源池信息、使用资源的租户信息、资源单元的配置信息(如 CPU 核数和内存资源)等。修改资源配置可以动态调整资源单元的计算资源,进而调整对应租户的资源。

下面开始演示资源管理和租户创建:

1)资源管理

集群默认有个内部租户(sys),可以查看和管理集群的资源(sql如下):

select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, cpu_assigned, (cpu_total-cpu_assigned) cpu_free,
  mem_total/1024/1024/1024 mem_total_gb, mem_assigned/1024/1024/1024 mem_assign_gb, (mem_total-mem_assigned)/1024/1024/1024 mem_free_gb
  from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port) order by a.zone, a.svr_ip;

结果如下(实验环境集群为单节点集群):

 +-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+
 | zone  | observer            | cpu_total | cpu_assigned | cpu_free | mem_total_gb   | mem_assign_gb  | mem_free_gb    |
 +-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+
 | zone1 | 192.168.152.30:2882 |        14 |          2.5 |     11.5 | 5.000000000000 | 1.250000000000 | 3.750000000000 |
 +-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+
 1 row in set (0.006 sec)

查看资源单元规格

 MySQL [oceanbase]> select * from __all_unit_config;
     +----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+
     | gmt_create                 | gmt_modified               | unit_config_id | name            | max_cpu | min_cpu | max_memory | min_memory | max_iops | min_iops | max_disk_size | max_session_num     |
     +----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+
     | 2023-02-07 09:51:59.323369 | 2023-02-07 09:51:59.323369 |              1 | sys_unit_config |       5 |     2.5 | 1610612736 | 1342177280 |    10000 |     5000 |   10737418240 | 9223372036854775807 |
     +----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+
     1 row in set (0.001 sec)
  
     MySQL [oceanbase]>

可以看出,资源单元规格 sys_unit_config 的定义里 CPU 和内存的最小值和最大值定义不一样,而第一条sql统计资源中的已分配资源时是按最小值进行计算的。这将会导致剩余的可用资源计算不那么准确。 所以,建议把该资源单元规格中定义的 CPU 和内存的最小值和最大值拉平。

 修改资源单元 sys_unit_config:
alter resource unit sys_unit_config min_cpu=5,max_cpu=5,min_memory='1610612736B', max_memory='1610612736B';
 再次查看资源情况可以看见资源统计计算准确

查看已分配资源池的情况

  select t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu, t2.max_memory/1024/1024/1024 max_mem_gb, t2.min_memory/1024/1024/1024 min_mem_gb,
      t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id,
       t4.tenant_name from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)
       join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)
        left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)
         order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id;
         
+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+
| resource_pool_name | unit_config_name | max_cpu | min_cpu | max_mem_gb     | min_mem_gb     | unit_id | zone  | observer            | tenant_id | tenant_name |
+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+
| sys_pool           | sys_unit_config  |       5 |       5 | 1.500000000000 | 1.500000000000 |       1 | zone1 | 192.168.152.30:2882 |         1 | sys         |
+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+
2 rows in set (0.005 sec)

2)如何创建和连接 MySQL 租户

1.创建资源单元规格:该步骤为可选步骤,如果有合适的规格可以跳过此步骤,直接进行复用
2.创建资源池:可以每个 zone 一个资源池,使用独立的资源单元规格,也可以所有 zone 使用同一个资源单元规格,都在一个资源池下。
3.创建租户:创建租户时需关联到第 2 步中创建的资源池。
4.连接租户:
MySQL 客户端连接
OBClient 客户端连接
OceanBase 连接驱动(JDBC)
DBEAVER 客户端连接
ODC 客户端连接:OceanBase 提供官方图形化客户端工具 OceanBase Developer Center,简称 ODC

-创建资源单元规格

   查看创建的资源单元规格:
   select * from __all_unit_config;
CREATE resource unit S1
        max_cpu=3, min_cpu=3, max_memory='3G', min_memory='3G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size='1024G';    
CREATE resource unit S2 
        max_cpu=4, min_cpu=4, max_memory='3G', min_memory='3G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size='1024G'; 
MySQL [oceanbase]> select * from __all_unit_config;
       +----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+
       | gmt_create                 | gmt_modified               | unit_config_id | name            | max_cpu | min_cpu | max_memory | min_memory | max_iops | min_iops | max_disk_size | max_session_num     |
       +----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+
       | 2023-02-07 09:51:59.323369 | 2023-02-07 12:20:46.250880 |              1 | sys_unit_config |       5 |       5 | 1610612736 | 1610612736 |    10000 |     5000 |   10737418240 | 9223372036854775807 |
       | 2023-02-07 14:09:21.996793 | 2023-02-07 14:09:21.996793 |           1001 | S1              |       3 |       3 | 3221225472 | 3221225472 |    10000 |     1000 | 1099511627776 |             1000000 |
       | 2023-02-07 14:09:37.685271 | 2023-02-07 14:09:37.685271 |           1002 | S2              |       4 |       4 | 3221225472 | 3221225472 |    10000 |     1000 | 1099511627776 |             1000000 |
       +----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+
       3 rows in set (0.001 sec

-创建资源池

 创建语法:
     单节点集群的话:
     create resource pool pool_1 unit='S1' , unit_num=1, zone_list=('zone1') ;(单副本单节点集群unit_num只能是1)
           
     1-1-1集群的话:
     create resource pool pool_1 unit='S1' , unit_num=1, zone_list=('zone1' ,'zone2') ;(1-1-1集群,每一个zone中的server是1,unit_num最大是1)  
     create resource pool pool_2 unit='S2' , unit_num=1, zone_list=('zone3');
           
     3-3-3集群的话
     create resource pool pool1
      unit=‘s1’,
      unit_num=3#一个zone中包含的observer数据量x>=3), 集群最低要求3-3-3,否则会报错(3个zone(表示3副本),每个zone中3台observer。
      zone_list=(‘zone1’,‘zone2’,‘zone3’,‘zone4’)

UNIT_NUM = unitnum:指定要创建的单个 Zone 下的 Unit 个数。每个单元会根据当前集群负载,自动在每个 Zone中选择一个 Server 负载,
但同一个资源池的多个 Unit 不能分配到同一个 Server,即一个资源池包含的 Unit 个数不能超过单 Zone 内 Server 的个数。

资源池创建出来后,集群的可用资源就减少了。但是这个资源池还没有关联到具体租户,所以无法被业务使用。

查看已分配资源池的情况
          select t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu, t2.max_memory/1024/1024/1024 max_mem_gb, t2.min_memory/1024/1024/1024 min_mem_gb,
               t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id,
                t4.tenant_name from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)
                join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)
                 left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)
                  order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id;
          +--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+
          | resource_pool_name | unit_config_name | max_cpu | min_cpu | max_mem_gb     | min_mem_gb     | unit_id | zone  | observer            | tenant_id | tenant_name |
          +--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+
          | sys_pool           | sys_unit_config  |       5 |       5 | 1.500000000000 | 1.500000000000 |       1 | zone1 | 192.168.152.30:2882 |         1 | sys         |
          | pool_1             | S1               |       3 |       3 | 3.000000000000 | 3.000000000000 |    1001 | zone1 | 192.168.152.30:2882 |      NULL | NULL        |
          +--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+
  再次查看剩余资源
  MySQL [oceanbase]> select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, cpu_assigned, (cpu_total-cpu_assigned) cpu_free,
      -> mem_total/1024/1024/1024 mem_total_gb, mem_assigned/1024/1024/1024 mem_assign_gb, (mem_total-mem_assigned)/1024/1024/1024 mem_free_gb
      -> from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port) order by a.zone, a.svr_ip;
  +-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+
  | zone  | observer            | cpu_total | cpu_assigned | cpu_free | mem_total_gb   | mem_assign_gb  | mem_free_gb    |
  +-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+
  | zone1 | 192.168.152.30:2882 |        14 |            8 |        6 | 5.000000000000 | 4.500000000000 | 0.500000000000 |
  +-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+
  1 row in set (0.005 sec)
  
  MySQL [oceanbase]>

-创建租户:

创建租户时需关联到第 2 步中创建的资源池。

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

ob_tcp_invited_nodes设置客户端IP白名单,‘%’,表示允许所有的来源,默认仅为本机127.0.0.1。
zone_list=(‘zone1’,‘zone2’,‘zone3’) 租户资源使用的zone(资源分布在哪些zone上,实验环境是单机集群,没法按照示例创建)。
primary_ZONE=‘ZONE1,ZONE2,ZONE3’ 主副本偏好设置。

查看tenant信息

MySQL [oceanbase]> select * from gv$tenant;
            +-----------+-------------+-----------+--------------+----------------+-----------------------+-----------+---------------+
            | tenant_id | tenant_name | zone_list | primary_zone | collation_type | info                  | read_only | locality      |
            +-----------+-------------+-----------+--------------+----------------+-----------------------+-----------+---------------+
            |         1 | sys         | zone1     | zone1        |              0 | system tenant         |         0 | FULL{1}@zone1 |
            |      1001 | obmysql     | zone1     | RANDOM       |              0 | mysql tenant/instance |         0 | FULL{1}@zone1 |
            +-----------+-------------+-----------+--------------+----------------+-----------------------+-----------+---------------+
            2 rows in set (0.003 sec)
 总结:
   一个资源单元为 UNIT,UNIT是最小的资源分割单位。
   一个资源池中包含若干 UNIT,一台Observer 只能有一个资源池的一个 UNIT。(所以创建resourcepool时unit_num最大数不能超过单个zone总observer的数目)
   一个资源池只能赋予给一个租户,一个租户可以包含多个资源池。
   资源池若指定只分布在一个zone,则该zone失效后,数据丢失,无副本。
   一个资源池建议指定分布在多个zone,多个zone则存在副本。(最好是全部zone,需大于2,若等于2,一个zone损坏,由于不满足多数派,虽然数据还有一个副本,但是服务会停止)

–连接租户

1.obclient

  obclient -h192.168.152.30 -uroot@obmysql -P2881 -p -c -A oceanbase
  alter user root identified by 'bJVqqEVt' ;
  obclient -h192.168.152.30 -uroot@obmysql -P2881 -pbJVqqEVt -c -A oceanbase
  show databases;

过程如下:


   [admin@obce01 ~]$ obclient -h192.168.152.30 -uroot@obmysql -P2881 -p -c -A oceanbase
   Enter password:            --------------------------------------------------------初始密码为空
   Welcome to the OceanBase.  Commands end with ; or \g.
   Your MySQL connection id is 3221489885
   Server version: 5.7.25 OceanBase 3.1.0 (r3-b20901e8c84d3ea774beeaca963c67d7802e4b4e) (Built Aug 10 2021 08:10:38)
   MySQL [oceanbase]> alter user root identified by 'bJVqqEVt' ;
   Query OK, 0 rows affected (0.014 sec)
   
   MySQL [oceanbase]> Bye
   
   [admin@obce01 ~]$ obclient -h192.168.152.30 -uroot@obmysql -P2881 -pbJVqqEVt -c -A oceanbase
   Welcome to the OceanBase.  Commands end with ; or \g.
   Your MySQL connection id is 3221489906
   Server version: 5.7.25 OceanBase 3.1.0 (r3-b20901e8c84d3ea774beeaca963c67d7802e4b4e) (Built Aug 10 2021 08:10:38)
   
   Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
   
   Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
   
   
   MySQL [oceanbase]> show databases;
   +--------------------+
   | Database           |
   +--------------------+
   | oceanbase          |
   | information_schema |
   | mysql              |
   | test               |
   +--------------------+
   4 rows in set (0.005 sec)
   
   MySQL [oceanbase]>
  1. ODC客户端
    下载安装:下载客户端版 ODC

    新建连接串:智能识别 obclient -h192.168.152.30 -uroot@obmysql -P2881 -pbJVqqEVt -c -A oceanbase
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/343093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 面向对象基础

文章目录一、类和对象1. 类的定义2. 对象的使用二、对象内存图三、成员变量和局部变量四、封装1. private 关键字2. this 关键字五、构造方法六、标准类制作一、类和对象 在此之前,我们先了解两个概念,对象和类。 万物皆对象,客观存在的事物…

C语言基础应用(一)数据类型

一、数据类型 1、数据类型的分类 2、常量 常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。 2.1 常量举例 // 整型常量 举例 /*718 十进制0213 八进制0x4b 十六进制30u 无符号整数30l 长整型30ul 无符号长整型*/ // 浮点常量…

LoadRunner安装教程

备注:电脑最好安装有IE浏览器或者360极速版浏览器 一、下载安装包 提前下载安装文件,必须下载。 链接: https://pan.baidu.com/s/1blFiMIJcoE8s3uVhAxdzdA?pwdqhpt 提取码: qhpt 包含的文件有: 二、安装loadrunner 注意,以…

虚拟机CPU占用100%问题记录

项目场景 kswapd0占用CPU过高,严重影响服务器及虚拟机的使用。 原因分析 kswapd0 是 Linux 系统虚拟内存管理中负责换页的进程。 系统物理内存不足时,kswapd0 会频繁的进行换页操作(使用swap分区与内存换页操作交换数据)&…

java手机短信验证,并存入redis中,验证码时效5分钟

目录 1、注册发送短信账号一个账号 2、打开虚拟机,将redis服务端打开 3、创建springboot工程,导入相关依赖 4、写yml配置 5、创建controller层,并创建controller类 6、创建service层,并创建service类 7、创建工具类&#x…

STL——priority_queue

一、priority_queue介绍及使用 1.priority_queue文档介绍 (1)优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。 (2)此上下文类似与堆,在堆中可以…

树与图中的dfs和bfs—— AcWing 846. 树的重心 AcWing 847. 图中点的层次

一、AcWing 846. 树的重心1.1题目1.2思路分析题意:什么是树的重心?树的重心是指,删除某个结点后剩下的最大连通子树的结点数目最小,如下图是根据样列生成的树,若删除结点1,则剩下三个子树最大的是中间那颗结…

C++的 new 和 delete

文章目录一、new 和 delete 的使用二、operator new 和 operator delete 函数三、new 和 delete 的实现原理四、申请空间和释放空间应配套使用五、定位 new 表达式六、malloc/free 和 new/delete 的区别C语言的动态内存管理函数(malloc、calloc、realloc、free) 虽然可以继续在…

Python for 循环语句

Python for 循环语句Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。语法:for循环的语法格式如下:for iterating_var in sequence:statements(s)流程图:实例:实例#!/usr/bin/python# -*- coding: UT…

Hudi-简介和编译安装

简介 简介 Apache Hudi(Hadoop Upserts Delete and Incremental)是下一代流数据湖平台。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的upserts/delete、高级索引、流摄取服务、数据集群/压缩优化和并发,同…

【yolov5】首次尝试目标检测利用prompt(完整操作流程)

1、打开prompt 2、切换到pytorch所在环境 conda activate freezing我的环境名是freezing,这里根据自己环境名去激活切换 3、进入到yolov5项目所在路径 激活完环境后立即执行指令当然是无效的,首先要进入到你的项目目录 首先看一下自己的项目在那个位…

https协议

文章目录对称加密方案非对称加密方案对称加密方案非对称加密方案对称加密方案非对称加密方案数字证书因为HTTP是明文传输,所以会很有可能产生中间人攻击(获取并篡改传输在客户端及服务端的信息并不被人发觉),HTTPS加密应运而生。 …

【Java|golang】1234. 替换子串得到平衡字符串---双指针

有一个只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符,且长度为 n 的字符串。 假如在该字符串中,这四个字符都恰好出现 n/4 次,那么它就是一个「平衡字符串」。 给你一个这样的字符串 s,请通过「替换一个子串」的方式,…

SpringBoot2知识点记录

SpringBoot2知识点记录1.SpringBoot2基础入门1.1 环境要求1.1.1 maven设置1.2 第一个程序 HelloWorld1.2.1 创建maven工程1.2.2 引入依赖1.2.3 创建主程序1.2.4 编写业务1.2.5 测试1.2.6 简化配置1.2.7 简化部署1.3 自动装配1.3.1 SpringBoot特点1.3.1.1 依赖管理1.3.1.2 自动装…

上班在群里摸鱼,逮到一个字节8年测试开发,聊过之后羞愧难当...

老话说的好,这人呐,一旦在某个领域鲜有敌手了,就会闲得某疼。前几天我在上班摸鱼刷群的时候认识了一位字节测试开发大佬,在字节工作了8年,因为本人天赋比较高,平时工作也兢兢业业,现在企业内有一…

【论文阅读】基于意图的网络(Intent-Based Networking,IBN)研究综述

IBN研究综述一、IBN体系结构1.1 体系结构:1.2 闭环流程:1.3 IBN的自动化程度(逐步向前演进):二、IBN 的实现方式2.1 意图获取:2.1.1 YANG、NEMO2.1.2 Frenetic、NetKAT、LAI2.2 意图转译:2.2.1 iNDIRA系统2.2.2 基于模…

GIT命令操作大全

文章目录一、前言二、工作模块2.1 Workspace:工作区2.2 Index / Stage:暂存区2.3 Repository:本地仓库2.4Remote:远程仓库三、GIT基本配置四、GIT项目代码管理4.1 初始化git仓库4.2 提交到暂存区(stage)4.3 将暂存区的文件恢复到工…

解决HC-05/HC06等蓝牙模块的调试问题

解决HC-05/HC06等蓝牙模块的调试问题问题:1.无法使用USB转串口工具设置HC-05等蓝牙模块,具体问题是:发送AT指令,无回复;2.电脑如何连接HC-05模块,与模块通信(具体场景:HC-05模块的串…

python学习之pyecharts库的使用总结

pyecharts官方文档:https://pyecharts.org//#/zh-cn/ 【1】Timeline 其是一个时间轴组件,如下图红框所示,当点击红色箭头指向的“播放”按钮时,会呈现动画形式展示每一年的数据变化。 data格式为DataFrame,数据如下图…

数据结构——TreeMap、TreeSet与HashMap、HashSet

目录 一、Map 1、定义 2、常用方法 3、注意 二、TreeMap 三、HashMap 1、定义 2、冲突定义 3、冲突避免方法——哈希函数设计 (1)、直接定制法(常用) (2)、除留余数法(常用) (3)、平方取中法 &…