技术分享 | OceanBase 集群扩容缩容

news2024/9/20 21:39:37

作者:杨文

DBA,负责客户项目的需求与维护,会点数据库,不限于MySQL、Redis、Cassandra、GreenPlum、ClickHouse、Elastic、TDSQL等等。

本文来源:原创投稿

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


一、环境说明:

集群扩容分为两种情况:一种是扩副本,一种是扩资源。

原集群部署模式:1-1-1。

下面介绍两种扩容方式:

  • 扩容副本:扩容后的模式:1-1-1-1-1;
  • 扩容资源:扩容后的模式:2-2-2。

说明:扩容操作有两种方式:白屏方式操作和黑屏方式操作。

二、白屏方式进行扩容:

扩容副本:进入OCP -> 找到要扩容的集群 -> 总览 -> 新增zone;

扩容资源:进入OCP -> 找到要扩容的集群 -> 总览 -> 新增OBServer;

如图:

三、黑屏方式进行扩容:

说明:为了避免篇幅重复,此处扩容副本和扩容资源将分别使用自动化方式扩容和手工方式扩容。

3.1、扩容副本(Zone):

通过OBD方式进行自动化扩容:

1)准备配置文件:

vi /data/5zones.yaml
# Only need to configure when remote login is required
user:
    username: admin
    #password: admin
    key_file: /home/admin/.ssh/id_rsa.pub
    #port: your ssh port, default 22
    # timeout: ssh connection timeout (second), default 30
oceanbase-ce:
    servers:
        # Please don use hostname, only IP can be supported
        - name: observer4
          ip: 10.186.60.175
        - name: observer5
          ip: 10.186.60.176

    global:
        ......
        appname: ywob2
        ......

    observer4:
        mysql_port: 2881 # External port for OceanBase Database. The default value is 2881.
        rpc_port: 2882 # Internal port for OceanBase Database. The default value is 2882.
        # The working directory for OceanBase Database. OceanBase Database is started under this directory. This is a required field.
        home_path: /home/admin/oceanbase-ce
        # The directory for data storage. The default value is $home_path/store.
        data_dir: /data
        # The directory for clog, ilog, and slog. The default value is the same as the data_dir value.
        redo_dir: /redo
        zone: zone4
    observer5:
        mysql_port: 2881 # External port for OceanBase Database. The default value is 2881.
        rpc_port: 2882 # Internal port for OceanBase Database. The default value is 2882.
        # The working directory for OceanBase Database. OceanBase Database is started under this directory. This is a required field.
        home_path: /home/admin/oceanbase-ce
        # The directory for data storage. The default value is $home_path/store.
        data_dir: /data
        # The directory for clog, ilog, and slog. The default value is the same as the data_dir value.
        redo_dir: /redo
        zone: zone5

2)部署集群:

obd cluster deploy ywob2 -c 5zones.yaml

3)合并配置:将新配置文件的内容复制到原本配置文件中(此处重复内容较多,故不粘贴文本了)。

4)针对原集群名进行启动集群:

obd cluster start ywob
+------------------------------------------------+
|                    observer                    |
+--------------+---------+------+-------+--------+
|ip            | version | port | zone  | status |
+--------------+---------+------+-------+--------+
|10.186.60.85  | 3.2.2   | 2881 | zone1 | active |
|10.186.60.173 | 3.2.2   | 2881 | zone2 | active |
|10.186.60.174 | 3.2.2   | 2881 | zone3 | active |
+--------------+---------+------+-------+--------+
说明:此时observer显示仍为原来的三个IP。

5)查看进程:虽然新的observer中没有显示在列表中,但是实际上新的observer已经启动了。

6)集群中添加新节点:

mysql> alter system add zone 'zone4' region 'sys_region';
mysql> alter system add zone 'zone5' region 'sys_region';
mysql> alter system start zone 'zone4';
mysql> alter system start zone 'zone5';
mysql> alter system add server '10.186.60.175:2882' zone 'zone4';
mysql> alter system add server '10.186.60.176:2882' zone 'zone5';
mysql> alter system start server '10.186.60.175:2882' zone 'zone4';
mysql> alter system start server '10.186.60.176:2882' zone 'zone5';

7)再次检查:

obd cluster display ywob
+------------------------------------------------+
|                    observer                    |
+--------------+---------+------+-------+--------+
|ip            | version | port | zone  | status |
+--------------+---------+------+-------+--------+
|10.186.60.85  | 3.2.2   | 2881 | zone1 | active |
|10.186.60.173 | 3.2.2   | 2881 | zone2 | active |
|10.186.60.174 | 3.2.2   | 2881 | zone3 | active |
|10.186.60.175 | 3.2.2   | 2881 | zone4 | active |
|10.186.60.176 | 3.2.2   | 2881 | zone5 | active |
+--------------+---------+------+-------+--------+

8)为业务租户扩容数据副本。

说明:如果要缩容,步骤如下:收缩节点 -> 发起合并 -> 修改locality -> 收缩资源池 -> 下线zone。

3.2、扩容资源(OBServer):

1)扩容前,建议进行资源检查操作,此处省略。

2)按照之前的环境进行创建目录,安装并启动observer进程:

10.186.60.175:
su - admin
sudo rpm -ivh /tmp/oceanbase-ce-*.rpm

cd ~/oceanbase && bin/observer -i eth0 -p 2881 -P 2882 -z zone1 \
-d ~/oceanbase/store/ywob \
-r '10.186.65.85:2882:2881;10.186.60.173:2882:2881;10.186.60.174:2882:2881;10.186.60.175:2882:2881;10.186.60.176:2882:2881;10.186.60.177:2882:2881' \
-c 20230131 -n ywob \
-o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,\
system_memory=3G,memory_chunk_cache_size=128M,cpu_count=12,net_thread_count=4,\
datafile_size=50G,stack_size=1536K,\
config_additional_dir=/data/ywob/etc3;/redo/ywob/etc2"

10.186.60.176:
su - admin
sudo rpm -ivh /tmp/oceanbase-ce-*.rpm

cd ~/oceanbase && bin/observer -i eth0 -p 2881 -P 2882 -z zone2 \
-d ~/oceanbase/store/ywob \
-r '10.186.65.85:2882:2881;10.186.60.173:2882:2881;10.186.60.174:2882:2881;10.186.60.175:2882:2881;10.186.60.176:2882:2881;10.186.60.177:2882:2881' \
-c 20230131 -n ywob \
-o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,\
system_memory=3G,memory_chunk_cache_size=128M,cpu_count=12,net_thread_count=4,\
datafile_size=50G,stack_size=1536K,\
config_additional_dir=/data/ywob/etc3;/redo/ywob/etc2"

10.186.60.177:
su - admin
sudo rpm -ivh /tmp/oceanbase-ce-*.rpm

cd ~/oceanbase && bin/observer -i eth0 -p 2881 -P 2882 -z zone3 \
-d ~/oceanbase/store/ywob \
-r '10.186.65.85:2882:2881;10.186.60.173:2882:2881;10.186.60.174:2882:2881;10.186.60.175:2882:2881;10.186.60.176:2882:2881;10.186.60.177:2882:2881' \
-c 20230131 -n ywob \
-o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,\
system_memory=3G,memory_chunk_cache_size=128M,cpu_count=12,net_thread_count=4,\
datafile_size=50G,stack_size=1536K,\
config_additional_dir=/data/ywob/etc3;/redo/ywob/etc2"

检查进程和端口:

ps -ef |grep observer
netstat -ntlp

此时应该是可以看到进程的,并且可以监听到2881和2882端口。

3)将新节点添加到zone中:

mysql> alter system add server '10.186.60.175:2882' zone 'zone1';
mysql> alter system add server '10.186.60.176:2882' zone 'zone2';
mysql> alter system add server '10.186.60.177:2882' zone 'zone3';

4)节点添加完成后,信息查看:

查看集群所有节点信息:

select zone,svr_port,inner_port,with_rootserver,status from __all_server order by zone, svr_ip;

可以看到zone发生了变化。

分区副本迁移重新选主的过程,可以通过视图__all_rootservice_event_history 查看集群 event 事件信息。

等待资源平衡分区副本迁移完成后,查看资源使用情况:

select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, (cpu_total-cpu_assigned) cpu_free,
round(mem_total/1024/1024/1024) mem_total_gb,
round((mem_total-mem_assigned)/1024/1024/1024) mem_free_gb,
round(disk_total/1024/1024/1024) disk_total_gb,unit_num,
substr(a.build_version,1,6) version,usec_to_time(b.start_service_time) start_service_time,b.status
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;

此时资源还没被使用;

5)租户扩容:

增加unit数量,由1增加为2:

alter resource pool pool_yw1 unit_num = 2;

unit_num = 2,表示每个zone下有两个unit资源;

由于集群是2-2-2架构,每个zone下有2台observer,因此每个zone下都会有2个租户的unit资源,由于集群负载均衡策略,会导致副本迁移和leader重新选主;

分区副本迁移重新选主的过程,可以通过视图__all_rootservice_event_history 查看集群负载均衡任务的执行情况。__all_virtual_partition_migration_status视图可以看正在发生的迁移;

最后是可以看到数据副本发生了变化,数据重新平衡。

3.3、收缩资源(OBServer):

集群模式:由2-2-2模式缩减为1-1-1模式。

1)信息检查:资源检查、unit检查(此处省略)。

2)资源调整:

由于我们是三副本没变,只是扩了副本资源与unit数量,所以不需要调整副本;

减少unit数量:

alter resource pool pool_yw1 unit_num = 1;

3)检查:分区副本迁移重新选主的过程,可以通过视图__all_rootservice_event_history 查看集群 event 事件信息。

SELECT * FROM __all_rootservice_event_history WHERE 1 = 1 ORDER BY gmt_create LIMIT 50;

可以看到分区副本迁移重新选主的过程;

4)删除observer:

alter system delete server '10.186.60.175:2882' zone zone3;
alter system delete server '10.186.60.176:2882' zone zone2;
alter system delete server '10.186.60.177:2882' zone zone1;

5)检查:

查看 OB 集群所有节点信息:

select zone,svr_ip,svr_port,inner_port,with_rootserver,status from __all_server order by zone;

查看业务租户的分区副本所在节点分布情况:

SELECT t1.tenant_id, t1.tenant_name, t2.database_name,
t3.table_id, t3.table_Name, t3.tablegroup_id, t3.part_num,
t4.partition_Id, t4.zone, t4.svr_ip, t4.role,
round(t4.data_size / 1024 / 1024) data_size_mb
from gv$tenant t1
join gv$database t2 on (t1.tenant_id = t2.tenant_id)
join gv$table t3 on (t2.tenant_id = t3.tenant_id and t2.database_id = t3.database_id and t3.index_type = 0)
left join gv$partition t4 on (t2.tenant_id = t4.tenant_id and (t3.table_id = t4.table_id or t3.tablegroup_id = t4.table_id) and t4.role in (1, 2))
where t1.tenant_id  > 1000
order by t1.tenant_id, t3.tablegroup_id, t3.table_name, t4.partition_Id, t4.role;

可以看到数据平衡完了,数据全部都只分布在10.186.60.85/173/174主机上。

最后,分别通过直连和OBProxy进行连接数据库查验数据。

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

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

相关文章

面试官:为什么说ArrayList线程不安全?

本博客知识点收录于:⭐️《JavaSE系列教程》⭐️ 1)线程安全与不安全集合 我们学习集合的时候发现集合存在由线程安全集合和线程不安全集合;线程安全效率低,安全性高;反之,线程不安全效率高,安…

Yuga Labs发布“TwelveFold“进军BTC,新大陆的探索即将开启

Yuga Labs 正在将新的 NFT 引入比特币区块链,并于 2 月 28 日推出了一个名为 TwelveFold 的系列。该系列是比特币网络上“刻在 satoshis 上”的 300 个生成作品的限量版。据官方说明,TwelveFold将限量发行三百幅的生成式NFT 画作,每件NFT 作品…

AcWing3696. 构造有向无环图

先看题: 首先来看一下题目的要求:利用给定的边来构造一个有向无环图。 那么什么是有向无环图呢?我们来搜索一番:"所谓有向无环图其实就是:有方向的边;这些边在一个图中不会构成一个闭合的环路。"…

学习大数据应该掌握哪些技能

想要了解大数据开发需要掌握哪些技术,不妨先一起来了解一下大数据开发到底是做什么的~ 1、什么是大数据? 关于大数据的解释,比较官方的定义是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模…

C++STL详解(四)—— vector模拟实现

文章目录vector内置成员变量默认成员函数初始化列表构造迭代器区间构造函数赋个数赋值构造函数赋值构造的相关问题拷贝构造函数赋值运算符重载函数析构函数迭代器及迭代器相关函数begin和end范围for容量与扩容相关函数size和capacityreserveresizeemptyvector中的增删查改&…

「攻略手册」:ShardingSphere 与 Java 应用性能优化

笔者曾经写过一篇文章,介绍 ShardingSphere 在具体代码细节上的优化案例,但文章中没有介绍如何发现代码优化点。本文将结合之前笔者在 ShardingSphere 相关性能问题排查、优化经验,简要地介绍 ShardingSphere 性能问题排查、优化应如何入手。…

解决Sql WorkBench中数据库不能重命名的问题

解决Sql WorkBench中数据库不能重命名的问题mysql不支持直接重命名数据库1. 连接到数据库2. 打开菜单,选择迁移向导3. 点击Start Migration4. 填写源数据库的相应参数5. 填写目标数据库的响应参数6. 稍等片刻,点击Next7. 选择你要迁移的数据库。8. 进入一…

B站依然面临巨大风险,盈利之路可能会更加艰难

来源:猛兽财经 作者:猛兽财经 哔哩哔哩(BILI)虽然得到了阿里巴巴(BABA)和腾讯(00700)的支持,在扩大和多样化用户数量方面也取得了巨大的成绩。但哔哩哔哩还在继续亏损,随着国家的监管环境朝着对游戏行业有利的方向变化&#xff0…

【案例教程】GAMS电力模型

本专题主要针对电力系统领域中比较典型的优化问题、优化方法及其在GAMS中的实现进行分析。共分为五个部分,包括电力系统机组组合专题、最优潮流专题、水电优化运行专题、鲁棒优化和多能源互补优化专题、分布鲁棒优化专题等,从基本模型到复杂模型逐步深入…

MySql数据类型都是字符串(varchar),数据类型一样,但是联表查询不走索引,是什么原因呢

大家都知道,如果联表查询中,数据类型不一样,是很有可能不走索引的,但是有时候数据类型一样也是有可能不走索引的,我们往下看1 数据准备我们准备两个表,用来模拟联表查询1.1 user表CREATE TABLE user (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键,phone varchar(20) DE…

华为OD机试用Python实现 -【几何平均值最大子数组】| 2023年3月被抽中

华为OD机试题 最近更新的博客华为 OD 机试 300 题大纲几何平均值最大子数组题目描述输入描述输出描述说明示例一输入输出说明示例二输入输出说明Python 代码实现核心逻辑最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单</

测试只能干到35岁?35岁+的测试就会失业?

互联网行业在很多年轻人的眼中&#xff0c;是高薪的象征。前几年的软件测试行业还是一个风口&#xff0c;随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业&#xff0c;但是现在裁员潮涌现的时候&#xff0c;互联网行业首当其冲&#xff0c;互联网企业大量的裁员&…

当你开始学习 Python 时,这是一个简单的学习计划及当你初学 Python 时,这里有几个建议

当你开始学习 Python 时&#xff0c;这是一个简单的学习计划&#xff1a; 1.入门 安装Python环境并熟悉基本的Python语法 熟悉Python的基本数据类型&#xff0c;例如数字、字符串和列表 学习控制流程&#xff0c;例如条件语句和循环语句 掌握函数和模块的基本知识 2.进阶 …

Qt开发基本步骤示例:输入半径显示圆的面积

目录 1. 创建一个新项目 1.1 创建类的基类 1.2 main.cpp代码释义 2. 代码写在哪&#xff1f; 2.1 怎么找到我们需要的函数&#xff1f; 1. 创建一个新项目 点击创建项目&#xff0c;开始创建&#xff1a; 1.1 创建类的基类 QMainWindow&#xff1a;带菜单栏的窗口QWidge…

第一章——冯·诺伊曼结构计算机工作原理及层次结构分析

&#x1f3e1;个人主页 &#xff1a; 守夜人st &#x1f680;系列专栏&#xff1a;计算机组成原理 …持续更新中敬请关注… &#x1f649;博主简介&#xff1a;软件工程专业&#xff0c;在校学生&#xff0c;写博客是为了总结回顾一些所学知识点 目录第一章——冯诺伊曼结构计算…

深入浅出RPC框架-学习笔记

1 基本概念 1.1 本地函数调用 1.2 远程函数调用 1.3 RPC概念模型 5个模型组成&#xff1a;User、User-Stub、RPC-Runtime、Server-Stub、Server 1.4 一次RPC的完整过程 1.4.1 IDL (Interface description language)文件 IDL通过一种中立的方式来描述接口&#xff0c;使得在不…

JavaScript(1)

JavaScript简介 JavaScript是一门跨平台、面向对象的脚本语言&#xff0c;用来控制网页行为的&#xff0c;它能使网页可以交互。 JavaScript引入方式 1、内部脚本 将js代码定义在HTML页面中&#xff0c;在HTML中&#xff0c;JavaScript代码必须位于<script>与</scrip…

用C语言写一个自己的shell-Part Ⅱ--execute commands

Part Ⅱ–execute commands Exec This brings us to the exec family of functions. Namely, it has the following functions: execlexecvexecleexecveexeclpexecvp For our needs,we will use execvp whose signature looks like this int execvp(const char *file, cha…

【数据库专题】数据库Mongodb之深入认知云计算三种服务方式、mongodb特点、mongodb重要进程 mongod、mongo、其他进程区别

文章目录一、什么是云计算1. IaaS:基础设施即服务2. SaaS:软件即服务3. PaaS:平台即服务二、大数据与云计算关系三、什么是MongoDB四、大数据与MongoDB五、MongoDB特点六、安装MongoDB七、重要进程介绍7.1 mongod进程7.2 mongo进程7.3 其他进程7.3.1 mongodump重建数据库7.3.2 …

解决封号 Walmart最全申诉步骤

最近龙哥听说不少平台的账号都被封掉&#xff0c;登不上去了。所以龙哥赶紧就把这篇Walmart申诉教程提上日程&#xff0c;以防这个不时之需哈。当时Walmart的这个封号申诉规则和社交平台的还是有很大区别的&#xff0c;今天龙哥就从封号原因和申诉流程两方面展开&#xff0c;让…