OceanBase集群扩缩容

​ OceanBase 数据库采用 Shared-Nothing 架构,各个节点之间完全对等,每个节点都有自己的 SQL 引擎、存储引擎、事务引擎,天然支持多租户,租户间资源、数据隔离,集群运行的最小资源单元是Unit,每个租户在每个节点上只会运行一个Unit。

先看看集群整体架构图,下面集群的部署模式为“三中心三副本”

有3个zone,每个zone下有两个OBServer节点
在这里插入图片描述
以业务租户Tenant_1为例,它有2个Unit,因为蓝色主副本P1、P2运行在zone1的observer上,蓝色主副本P3、P4运行在zone2的observer上,它们分别在另外两个observer上都运行着一个绿色从副本,以提高可用性和读性能,这是“三中心三副本”的由来。

在只有3个zone的情况下,Tenant_1租户的Unit=2,设置Unit=3 就是扩容,Unit=1 就是缩容

  • 扩容:需要在每个zone下都增加一台服务器,总共3台,然后在数据库参数中调整Unit_Num的大小由2改为3,就会自动在新添加的服务器上启动Unit(默认配置了负载均衡策略),并自动迁移数据,来提升服务能力

  • 缩容有两种场景,1.只减少租户下Unit数量,不下线服务器,2.减少Unit数量,也下线服务器

​ 在有多个zone的情况下,可以在创建租户时,指定租户属于不同zone,还可以迁移zone从一个机房搬迁到另一个机房,先增加 Zone,再在该 Zone 内增加节点,然后调整租户的 Locatity 属性,租户就是数据库实例,相当于把不同的数据库实例部署在不同的zone上。

​ 通过上面的理论得知,扩缩容实际上是调整Unit_Num的数量,而每个节点上只能运行一个租户的一个Unit,它又需要2个副本,所以增加一个Unit就需要在所有zone上都增加一台服务器,且Unit的资源描述大小不能超过服务器硬件配置(Unit需要8核、16G,而增加的服务器只有4核8G,则扩容失败),如果已有zone内的服务器资源配置充足,则不需要添加服务器就可以扩容。

​ **Tenant_SYS ** 系统租户目前不能扩容,只能3副本的形式存在,而且系统租户资源需要管理整个OceanBase集群的正常运行,所以不要在系统租户上创建数据库和表(上篇文章因演示需要才直接在系统租户下创建的数据库表),官方推荐在自定义租户下创建库表。

数据链路:客户端应用 -> F5/LVS -> OBProxy -> OBServer

上面介绍了扩缩容的理论,下面介绍扩缩容的实际操作,还是先说理论:
  • 在部署集群后,会自动创建一个系统租户(Tenant_SYS),同时会创建一些元数据表,部署时的配置信息会保存到元数据表中,扩缩容需要添加服务器节点,调休租户的Unit_Num大小,这些操作都需要保存到元数据表中,我们可以连接系统租户数据库查看元数据表的内容,查看zone、查看节点、查看租户、查看Unit等。
1.连接到系统租户
obclient -h192.168.113.161 -P2883 -uroot@sys#myoceanbase -p***** -A

-u :租户的连接账户,格式有:用户名@租户名#集群名,系统租户MySQL模式,默认用户名为root,租户为sys,集群名在创建集群时设置的,集群名可以不写。

-p:提供账户密码,为了安全可以不提供,改为在后面提示符下输入,密码文本不可见

-A:表示在 OBClient 连接数据库时不自动获取统计信息

2.查看zone和observer
# 查看zone
SELECT * FROM oceanbase.DBA_OB_ZONES;

STATUS: ACTIVE为可用状态,INACTIVE为不可用状态

# 查看节点
SELECT * FROM oceanbase.DBA_OB_SERVERS;

查询结果中的相关字段说明如下:

  • SVR_IP:节点 IP。
  • SVR_PORT:节点的 RPC 端口。
  • ZONE:节点所在的 Zone。
  • SQL_PORT:节点的 SQL 端口,可以使用该端口通过直连方式连接 OceanBase 数据库。
  • WITH_ROOTSERVER:该节点是否为集群 RS(RootServer),RS 负责处理集群管理操作。
  • STATUS:节点的状态。ACTIVE:表示该节点为可用状态。INACTIVE:表示该节点为宕机状态。DELETING:表示该节点正在被删除。
  • STOP_TIME:节点停止服务的时间点。如果值为 NULL,表示节点服务正常运行。
  • START_SERVICE_TIME:节点开始服务的时间点。如果值为 NULL,表示节点未提供服务。
  • BLOCK_MIGRATE_IN_TIME:禁止副本迁入的开始时间点。如果为 NULL,表示副本正常迁入。
3.添加节点
3.1.节点需安装OceanBase软件包,并启动observer进程

在OecanBase添加节点前需要在节点上安装OceanBase软件,设置数据存储目录,在oceanbase-all-in-one-4.2.1.1-xxxx86_64.tar.gz的rpms目录中有安装包
在这里插入图片描述

1.安装rpm包,主要是oceanbase-ce 和oceanbase-ce-libs,都可以安装
rpm -ivh $rpm_name2.初始化 OceanBase 数据库的目录,$cluster_name是集群名
mkdir -p /data/1/$cluster_name/{etc3,sort_dir,sstable,slog} 
mkdir -p /data/log1/$cluster_name/{clog,etc2,ilog,oob_clog} 
mkdir -p /home/admin/oceanbase/store/$cluster_name
for t in {etc3,sort_dir,sstable,slog};do ln -s /data/1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done
for t in {clog,etc2,ilog,oob_clog};do ln -s /data/log1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done3.启动observer进程
/home/root/oceanbase/bin/observer -I 192.168.113.164 -P 2882 -p 2881 -z zone1 -d /home/root/oceanbase/store/myoceanbase -r '192.168.113.161:2882:2881' -c 20240119 -n myoceanbase -o "system_memory=10GB,datafile_size=100G,config_additional_dir=/data/1/myoceanbase/etc3;/data/log1/myoceanbase/etc2"

启动observer进程相关参数说明如下:

  • -I:参数用于指定待启动的节点 IP。在多机部署场景下,不能指定 127.0.0.1 作为目标 IP。
  • -c:用于指定集群 ID。其值可通过 SHOW PARAMETERS LIKE 'cluster_id'; 语句获取。
  • -p:用于指定 SQL 端口号。一般为 2881,除非有明确目的,一般不建议修改。
  • -P:用于指定 RPC 端口号。一般为 2882,除非有明确目的,不建议修改。
  • -n:用于指定集群名。其值可通过 SHOW PARAMETERS LIKE 'cluster'; 语句获取。本示例中集群名为 myoceanbase
  • -z:用于指定待加入的 Zone。可通过视图 DBA_OB_ZONES 查看集群中的 Zone 名。
  • -d:用于指定数据目录。
  • -r:用于指定待添加的 OceanBase 集群的 RS 地址列表。
  • -l:用于指定日志的级别,本示例中为 WARN,表示日志级别为 WARNING 级别。
  • -o:用于指定集群的启动配置项,需要根据实际情况配置。
    • system_memory:用于指定 OceanBase 数据库内部保留内存,10G,默认是 30G。
    • datafile_size:用于指定 OceanBase 数据库数据文件 SSTable 的大小(一次性初始化),根据 /data/1/ 可用空间评估,建议不少于 100G,同时又保留一些剩余空间。
    • config_additional_dir:用于指定参数文件的冗余目录。

如果需要添加多个节点,请重复执行上面添加节点操作。

3.2.向OceanBase集群添加节点

添加节点后,就需要连接集群,把节点添加到元数据表中

1.连接系统租户数据库
obclient -h192.168.113.161 -P2883 -uroot@sys#myoceanbase -p***** -A2.向集群的 Zone 中添加节点
ALTER SYSTEM ADD SERVER 'svr_ip:svr_port' [,'svr_ip:svr_port'...] [ZONE [=] 'zone_name'];
ALTER SYSTEM ADD SERVER '192.168.113.164:2882','192.168.113.165:2882' ZONE 'zone4';3.查询 DBA_OB_SERVERS 进行确认
SELECT * FROM oceanbase.DBA_OB_SERVERS;

增加节点后,节点所在的 Zone 内有更多的节点容纳 Unit,从而可以执行后续的迁移 Unit、调整租户的 UNIT_NUM 以及新建租户等操作

3.3.扩容,调整租户UNIT_NUM大小

租户扩容和缩容本质上是提高和降低租户的服务能力,包括计算能力和存储容量。可以通过提高单节点的服务能力达成,也可以通过增加服务节点达成。

下面通过调整Unit_Num大小来达到租户总服务能力的提升或降低,实现租户的扩容或缩容。

从 V4.0.0 版本开始,OceanBase 数据库要求租户内每个 Zone 的 Unit 个数必须保持一致

  • 有个前提条件,设置租户内的负载均衡策略,租户内的负载均衡策略由租户级配置项 enable_rebalanceenable_transfer 共同控制,它们的默认值为 true,设置后不需要重启 OBServer 节点,立即生效。当他们的值为true时,表示在进行租户扩缩容操作时,系统会自动调整分区分布,实现负载均衡。

    ALTER SYSTEM SET enable_rebalance = true TENANT = 'tenant_name';
    ALTER SYSTEM SET enable_transfer = true TENANT = 'tenant_name';#系统租户开启所有用户租户(不含 sys 租户和 Meta 租户)的租户内负载均衡和租户下的 Transfer 功能
    ALTER SYSTEM SET enable_rebalance = true TENANT = all;
    ALTER SYSTEM SET enable_transfer = true TENANT = all;
    

调整Unit_Num大小,来给租户扩缩容

  • 1.连接系统租户数据库

    obclient -h192.168.113.161 -P2883 -uroot@sys#myoceanbase -p***** -A
    
  • 2.use oceanbase;

    可以 show tables; 看看有很多系统内置的表
    在这里插入图片描述

  • 3.查看租户 mysql001 信息,获取其 TENANT_ID。

    SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'ocp';
    

    查询结果中,UNIT_NUM 的值为 1 表示租户的 Unit Number 数为 1。

    在这里插入图片描述

  • 4.查看租户 ocp 所拥有的 Unit,在3台服务器上分别有一个Unit,一主两从。

    SELECT * FROM oceanbase.DBA_OB_UNITS WHERE TENANT_ID = 1002;
    

    在这里插入图片描述

  • 5.把租户 mysql001 的 UNIT_NUM 修改为 2。

    ALTER RESOURCE TENANT mysql001 UNIT_NUM = 2;
    
  • 6.查看调大 Unit Number 任务的执行状态。

    SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE='ALTER_RESOURCE_TENANT_UNIT_NUM' AND TENANT_ID=1006;
    
  • 7.再次查看租户 mysql001 修改后的 Unit。

    SELECT * FROM oceanbase.DBA_OB_UNITS WHERE TENANT_ID = 1006;
    
  • 8.通过随机删除 UNIT_GROUP 的方式来调小 UNIT_NUM 的数量

    ALTER RESOURCE TENANT mysql001 UNIT_NUM = 1;
    

参考了官方文档:
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000507927
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000508357

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

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

相关文章

OPC UA 开源库编译方法及通过OPC UA连接西门S7-1200 PLC通信并进行数据交换

前言 在现代工业自动化领域,OPC UA(开放性生产控制和统一架构)是一种广泛应用的通信协议。本文将以通俗易懂的方式解释OPC UA的含义和作用,帮助读者更好地理解这一概念。 一、OPC UA的定义 OPC UA全称为“开放性生产控制和统一…

Labview实现用户界面切换的几种方式---通过VI间相互调用

在做用户界面时我们的程序往往面对的对象是程序使用者,复杂程序如果放在同一个页面中,往往会导致程序冗长卡顿,此时通过多个VI之间的切换就可以实现多个界面之间的转换,也会显得程序更加的高大上。 本文所有程序均可下载&#xff…

【Python机器学习】多分类问题的不确定度

decision_function和predict_proba也适用于多分类问题。还是以鸢尾花数据集为例: from sklearn.ensemble import GradientBoostingClassifier from sklearn.datasets import make_circles,load_iris import numpy as np from sklearn.model_selection import train_…

【总结】Dinky学习笔记

概述 Dinky 是一个开箱即用、易扩展,以 Apache Flink 为基础,连接 OLAP 和数据湖等众多框架的一站式实时计算平台,致力于流批一体和湖仓一体的探索与实践 官网:Dinky 核心特性 沉浸式:提供专业的 DataStudio 功能&a…

1979-A threshold selection method from gray-level histograms

1 论文简介 《A threshold selection method from gray-level histograms》是由日本学者大津于 1979 年发表在 IEEE TRANSACTIONS ON SYSTEMS 上的一篇论文。该论文提出了一种基于图像灰度直方图的阈值化方法,计算简单,且不受图像亮度和对比度的影响&am…

64.Spring事件监听的核心机制是什么?

Spring事件监听的核心机制是什么? spring的事件监听有三个部分组成 事件(ApplicationEvent) 负责对应相应监听器 事件源发生某事件是特定事件监听器被触发的原因监听器(ApplicationListener) 对应于观察者模式中的观察者。监听器监听特定事件,并在内部定义了事件发生后的响应…

【论文阅读】ControlNet、文章作者 github 上的 discussions

文章目录 IntroductionMethodControlNetControlNet for Text-to-Image DiffusionTrainingInference Experiments消融实验定量分析 在作者 github 上的一些讨论消融实验更进一步的探索Precomputed ControlNet 加快模型推理迁移控制能力到其他 SD1.X 模型上其他 Introduction 提…

烟火检测/区域人流统计/AI智能分析网关V4如何配置通道?

TSINGSEE青犀智能分析网关(V4版)是一款高性能、低功耗的软硬一体AI边缘计算硬件设备,硬件内部署了近40种AI算法模型,支持对接入的视频图像进行人、车、物、行为等实时检测分析,并上报识别结果,并能进行语音…

【征服redis2】redis的事务介绍

目录 目录 1.redis事务介绍 2 事务出错的处理 3.Java如何使用redis事务 1.redis事务介绍 在前面我们介绍了redis的几种典型数据结构和应用,本文我们来看一下redis的事务问题。事务也是数据库的重要主题,熟悉关系型数据库的读者应该对事务比较了解&a…

erlang (OS 操作模块)学习笔记

cmd: env: 返回所有环境变量的列表。 每个环境变量都表示为元组 {VarName,Value},其中 VarName 是 变量和 Value 其值。 例: {VarName,Value} {"ERLANG_HOME","C:\\Program Files\\erl-24.3.4.2\\bin\\erl-24.3.4.2"}…

2023我的总结:读书、写作、运动、爱家人、学一门手艺

不知不觉中,2024年1月已过去大半了,按照惯例,还是对过去一年的所思所行做个简单的汇报。也希望我的一些经历,能给到正在做年终总结或新年规划的朋友,一些参考。 01 读书,是门槛最低的高贵 最近一段时间&am…

gh0st远程控制——客户端界面编写(二)

● 补充小知识:枚举类型的使用 每个控件(比如列表)都对应一个自己的唯一的变量 使用枚举类型可以将变量名与编号进行绑定,以后程序需要扩展的时候,只需要在定义枚举变量的位置重新修改编号就可以了,这样全…

Linux shell编程学习笔记40:stat命令

程序员必备的面试技巧 “程序员必备的面试技巧,就像是编写一段完美的代码一样重要。在面试战场上,我们需要像忍者一样灵活,像侦探一样聪明,还要像无敌铁金刚一样坚定。只有掌握了这些技巧,我们才能在面试的舞台上闪耀…

htb monitored root方式其中的一种(仅作记录)

快下班时候审出来的,目前root的第5种方式 nagiosmonitored:~$ cat /usr/local/nagiosxi/scripts/backup_xi.sh #!/bin/bash # # Creates a Full Backup of Nagios XI # Copyright (c) 2011-2020 Nagios Enterprises, LLC. All rights reserved. #BASEDIR$(dirname …

SCI 2区论文:医疗保健中心训练有素的脑膜瘤分割模型的性能测试-基于四个回顾性多中心数据集的二次分析

基本信息 标题:Performance Test of a Well-Trained Model for Meningioma Segmentation in Health Care Centers: Secondary Analysis Based on Four Retrospective Multicenter Data Sets中文标题:医疗保健中心训练有素的脑膜瘤分割模型的性能测试&am…

PE解释器之PE文件结构(二)

接下来的内容是对IMAGE_OPTIONAL_HEADER32中的最后一个成员DataDirectory,虽然他只是一个结构体数组,每个结构体的大小也不过是个字节,但是它却是PE文件中最重要的成员。PE装载器通过查看它才能准确的找到某个函数或某个资源。 一&#xff1…

软件测试|sqlalchemy一对一关系详解

简介 SQLAlchemy 是一个强大的 Python ORM(对象关系映射)库,它允许我们将数据库表映射到 Python 对象,并提供了丰富的关系模型来处理不同类型的关系,包括一对一关系。在本文中,我们将深入探讨 SQLAlchemy …

Ubuntu使用QtCreator + CMake 开发C/C++程序

平台 OS: Ubuntu 20.04 cmake: 3.16.3 IDE: Qt Creator 4.11.1 Based on Qt 5.14.1 (GCC 5.3.1 20160406 (Red Hat 5.3.1-6), 64 bit) Built on Feb 5 2020 12:48:30 From revision b2ddeacfb5 Copyright 2008-2019 The Qt Company Ltd. All rights reserved. The program …

Hugging Face怎么通过国内镜像去进行模型下载(hf-mirror.com)

一、引言 Hugging Face 🤗是一家专注于自然语言处理(NLP)技术的公司,以其开源贡献和先进的机器学习模型而闻名。该公司最著名的产品是 Transformers 库,这是一个广泛使用的 Python 库,它提供了大量预训练模…