OceanBase生产环境安装部署的最优实践

关于生产环境,为了尽量确保性能和稳定性,我们比较建议采用标准化的配置进行部署,例如接下来会提到的服务初始化、日志管理和数据分盘等关键步骤。而在非生产环境中,如果条件满足,同样建议遵循规范部署的原则。

前期准备

资源规划

评估方式一:POC

1、强烈建议POC,通过POC可以确认对应业务数据大致的压缩率、业务负载以及业务满足情况。

2、根据业务数据的压缩率以及性能情况评估所需要的机器数量。

评估方式二:高可用

1、是否有做两地三中心或者三地五中心的需求,如果有的话,那么需要对应的副本数量。

2、是否有做混合云的需求,专线&带宽需要提前准备。

3、业务是否重要性不高,不关注高可用性,是否准备单副本部署(线上环境不推荐,不能保证高可用)。

4、是否有异地灾备的需求,两地网络延迟比较高。这种可以使用主备库,多副本集群->多副本集群、多副本集群->单副本集群、单副本集群->单副本集群。

评估方式三:业务后续增长

1、后续请求量、数据量评估,需要预留机器资源,或者后续扩容也可以。

评估方式四:周边工具

1、确认需要安装的工具,比如OCP(管理平台)、OMS(迁移平台)、ODC(开发平台)。

2、多个工具的集群是否放在一起,单机部署 or 集群(三副本)部署。

3、工具服务是否单独部署。

服务器配置

重要的事情写在前面:

一、磁盘

1、要求至少SSD,不建议使用机械硬盘。

2、如果是NVME,并且是多块,不建议单机多实例部署,建议LVM进行磁盘管理。

这里碰到很多用户疑问:如果一块磁盘坏了,是不是这个实例就有问题了,答案是是的。那么为什么不每个实例占用一块盘来避免这个问题呢?咱们考虑这个一个问题,如果是LVM,坏了一块盘,本身OB是有高可用能力的,可以自动切走保证业务正常,之后修复完加入进来就好了,即便数据清空了,OB也会自动补数据的;但是如果单机多实例,如果一台机器挂了,那上面的所有实例就都不可用了,这个维护成本就会非常的高。

3、强烈建议分盘,也就是clog盘和数据盘,因为clog也会占用IO,尤其是写请求量比较高的时候。避免相互影响,强烈建议分盘。

4、clog盘存储空间大小至少是分配给observer内存的三倍以上;数据盘大小根据业务量来分配。后面创建租户也按照这个规则来,比如给租户内存100g,那么日志盘至少给他300g。

二、网卡

线上业务建议万兆网卡

以下为官网推荐软硬件配置:

项目描述
服务器支持主流服务器和国产化适配软硬件已适配基于硬件整机中科可控 H620 系列、华为 TaiShan 200 系列、长城擎天 DF720 等整机。已适配支持海光 7185/7280、鲲鹏 920、飞腾 2000+ 等 CPU。已适配支持麒麟 V4、V10 和 UOS V20 等国产操作系统,并适配上层中间件东方通 TongWeb V7.0、金蝶 Apusic 应用服务器软件 V9.0 等
系统Alibaba Cloud Linux 2/3 版本(内核 Linux 3.10.0 版本及以上)Anolis OS 8.X 版本(内核 Linux 3.10.0 版本及以上)Red Hat Enterprise Linux Server 7.X 版本、8.X 版本(内核 Linux 3.10.0 版本及以上)CentOS Linux 7.X 版本、8.X 版本(内核 Linux 3.10.0 版本及以上)Debian 9.X 版本及以上版本(内核 Linux 3.10.0 版本及以上)Ubuntu 16.X 版本及以上版本(内核 Linux 3.10.0 版本及以上)SUSE / OpenSUSE 15.X 版本及以上版本(内核 Linux 3.10.0 版本及以上)KylinOS V10 版本统信 UOS V20 版本中科方德 NFSChina 4.0 版本及以上浪潮 Inspur kos 5.8 版本
物理 CPU生产环境最低要求 4 核,推荐 32 核及以上。
内存生产环境最低要求 16 GB,长期使用要求不低于 32 GB,推荐设置在 256 GB 至 1024 GB 范围内。
磁盘类型SSD、NVME。
磁盘存储空间日志盘建议OB内存的三倍以上,数据库根据业务存量+增量数据来确认。
文件系统EXT4 戓 XFS,当数据超过 16TB 时,使用 XFS
网卡建议万兆及以上

集群部署架构规划

我们建议的连接方式是应用连接obproxy(ODP),然后obproxy解析请求并且路由转发到合适的OBServer内执行。

1710489193

在这个基础上,推荐在obproxy上面增加一层负载均衡器(LB),像SLB、F5等,也可以通过OCP上面的LB来做。

obproxy的部署常见有几种方式:

1、部署在OBServer端,如果每个zone有多个observer,那么可以每个zone部署1-2个obproxy节点,不需要每个observer的机器上面都1:1部署。

1710489206

2、独立部署,专门为obproxy找机器来部署

1710489215

3、sidecar的方式,跟应用容器部署在一起。

1710489223

服务器初始化

强烈建议对新交付的服务器进行初始化操作,比如OS的内核参数、系统变量等。系统参数不调整,很容易为后面使用带来隐患,到时候再调整就比较麻烦了。

有两种方法:

1、手动/脚本化操作,推荐的配置可以参考官网:

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000220856

1710489232

2、如果使用的OCP部署,那么添加主机以后,会自动检测这些参数是否调整,然后可以通过平台一键初始化(标准化)。详情可以参见官网:

https://www.oceanbase.com/docs/common-ocp-1000000000584697

安装部署

安装OB集群,现在主要推荐以下两种方式:

1、优先推荐OCP部署,OCP是运维管控平台,可以在平台上直接管理OB集群,包括监控告警、运维操作等。

部署OCP:

https://www.oceanbase.com/docs/common-ocp-1000000000584989

OCP 创建集群:

https://www.oceanbase.com/docs/common-ocp-1000000000584993

2、OBD部署,OBD是安装部署工具,可以提供快速的安装能力,并且不占用资源,但是不提供管理能力。

https://www.oceanbase.com/docs/community-obd-cn-1000000000519108

需要注意:

1、OCP 的metadb和monitordb所在的集群一定是ocp独立的集群,不要跟业务集群混部。因为OCP需要周期性的获取大量的监控信息,会占用大量的资源。

2、OCP和OBD一定不要混着用,这里的混着用是指有时候用OBD重启,有时候用OCP重启。对于通过OBD部署然后OCP接管维护的集群,后续操作都使用OCP操作就好。

3、OBD 启动集群默认情况下是会指定配置文件中的参数的,如果使用的过程中修改过OB集群的参数,那么不会自动同步到OBD的配置文件中。所以这种情况要么手动同步配置到OBD的配置文件,要不OBD启动的时候指定 --wop来无参启动,要么使用OCP或者命令行手动启动。

4、Zone 的数量决定了集群内副本的最大数据,比如现在zone1、zone2、zone3,那么底层的分片数量就可以是三副本,可以保证高可用性。如果所有机器放到了一个zone下,那么分片只有单副本,不能保证高可用。

5、并不是说机器有多少资源,OBServer就能用多少的,而是要看分配给OBServer多少资源,资源参数可参考下面。

安装过程中注意事项:

1、提前创建OB部署用户,推荐admin用户。

2、提前创建目录并且授权。

3、部署的时候是可以指定参数的,默认情况下不需要额外做调优,但是资源占用需要了解一下,尤其是OB磁盘是预占用的,默认情况可能会预占用90% 左右的磁盘空间,很可能触发服务器使用率告警。这个时候就需要根据实际的情况来判断是否自定义资源。

常用资源参数简介及计算方式

参数解释特性小课堂
CPU资源参数cpu_countOB可使用的CPU核数,参数为数值,例如:16,设置为0,系统自动检测并设置不支持动态调整修改该参数需要重启集群才能生效
内存资源参数memory_limitOB可使用的内存大小,参数需要带单位,例如:32G支持动态调整1. memory_limit没有上限边界,建议按实际内存free -m信息中的free列剩余大小进行规划设置。2. 支持动态增大和缩小,但不能比已分配出去的内存还小。3. memory_limit优先级大于memory_limit_percentage,即同时设置,以memory_limit生效。
内存资源参数memory_limit_percentageOB可用内存占总内存的百分比,参数为数值,例如:80(表示80%)支持动态调整
内存资源参数system_memoryOB的500租户的内存,即OB系统内部运行内存,参数需要带单位,例如:30G支持动态调整1. system_memory取值计算方式:– 16G<=memory_limit <=32G,system_memory=3-5G– 32G<=memory_limit <=64G,system_memory=5-10G– memory_limit >64G,system_memory=取整数部分(3 *(memory_limit的平方根-3G))2. system_memory和sys租户没关系,sys租户是OB部署完成由系统自建的自适应资源租户,租户ID为1,而system_memory对应的租户ID为500。
磁盘资源参数datafile_sizeOB数据目录预占用大小,参数需要带单位,例如:32G预占用,不支持调小1. 预占用会提前申请磁盘空间,部署完成查看磁盘使用很大,属于正常现象。2. datafile_size优先级大于datafile_disk_percentage。
磁盘资源参数datafile_disk_percentageOB数据目录预占用目录百分比,参数为数值,例如:80(表示80%)预占用,不支持调小
磁盘资源参数log_disk_sizeOB日志数据目录预占用大小,参数需要带单位,例如:32G预占用,支持动态调整1. log_disk_size取值计算方式:log_disk_size>=memory_limit * 32. 预占用会提前申请磁盘空间,部署完成查看磁盘使用很大,属于正常现象。3. log_disk_size优先级大log_disk_percentage。
磁盘资源参数log_disk_percentageOB数据目录预占用目录百分比,参数为数值,例如:80(表示80%)预占用 支持动态调整
系统日志参数enable_syslog_recycle是否开启OB系统日志回收,建议开启需要和max_syslog_file_count参数搭配使用
系统日志参数max_syslog_file_count在回收OB系统日志文件之前最大保留OB系统日志个数需要和enable_syslog_recycle参数搭配使用单个系统日志256M,建议生产环境按需要日志保留天数需要,来设置系统日志个数。注意:OB系统日志打印较大较频繁,需要关注设置个数和磁盘大小关系,防止磁盘被占满。

集群使用

集群创建完成后,就可以创建业务租户并且使用了。

一定不要用 sys 租户来承载业务,因为 sys 租户要处理很多内部任务,会占用资源,影响集群以及业务使用。

创建租户

方法一:OCP 创建

https://www.oceanbase.com/docs/common-ocp-1000000000584674

1、确认可分配资源

具体可以分配多少内存,可以通过【资源管理】查看各节点的剩余资源

1710489259

2、新建租户

1710489267

3、填写租户信息

1710489280

zone 优先级主要是 primary_zone 设置 leader优先级,如果优先级全部相同,那么 leader 会打散到所有节点上。

方法二:手动创建

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000218355

1、确认可分配资源

新租户可以分配的内存大小为 memory_limit - system_memory - sys 租户内存,CPU 数量为 cpu_count - sys 租户 cpu。

# 查询参数
show parameters where name in ('memory_limit','system_memory','cpu_count');
# 查询 sys 租户资源
select * from DBA_OB_UNIT_CONFIGS;

2、创建租户

# 创建资源规格,5C14G,日志40G,IOPS 10000000。
create resource unit unit_1 max_cpu 5, min_cpu 5, memory_size '15G', log_disk_size '50G', max_iops 10000000;
# 创建资源池,指定 资源规格以及 zone_list。
create resource pool pool_1 unit = 'unit_1', unit_num = 1, zone_list = ('zone1','zone2','zone3');
# 创建租户,指定副本数量3,primary_zone,以及资源池和白名单。
create tenant perf replica_num = 3,primary_zone='RANDOM', resource_pool_list=('pool_1') set ob_tcp_invited_nodes='%';

3、修改 root 用户密码

创建完租户,默认的 root 密码为空,如果需要可以修改密码。

# 租户的 root 用户登陆后执行修改 sql
set password for root=password('xxx');

连接数据库

主要有两种连接方式:

1、通过 OBServer 直连(默认端口 2881)

mysql -h xxx.xxx.xxx.xxx -uroot@sys -P2881 -p -c -A oceanbase

2、通过 OBProxy 连接(默认端口2883)

mysql -h xxx.xxx.xxx.xxx -uroot@sys#obdemo -P2883 -p -c -A oceanbase

使用 OBProxy 连接时,用户信息需要包括【用户名@租户名#集群名】;如果是 OBServer 连接,那么只需要包括【用户名@租户名】。

应用连接建议:

jdbc 版本建议5.1.47 或者8.0.25以下

有兴趣的朋友,可以关注下微信公众号,会同步更新内容的。

1710489668

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目实战-开发工具入门/基本框架搭建/项目初始化/引入组件库

上周更新完了之前vue3的shopping项目&#xff0c;接下来&#xff0c;将会开启一个新的项目&#xff0c;效果是类似于移动端的一个伙伴匹配项目&#xff0c;今天这篇文章从需求分析到架构设计再到项目初始化&#xff0c;基本框架搭建几个部分来为大家详细介绍。 从这个项目开始…

YOLOV5 改进:替换backbone为Swin Transformer

1、前言 本文会将YOLOV5 backbone更换成Swin Transformer 具体为什么这样实现参考上文:YOLOV5 改进:替换backbone(MobileNet为例)-CSDN博客 这里只贴加入的代码 训练结果如下: 2、common文件更改 在common文件中加入下面代码: 这里是swin transformer的实现,参考:…

VMware部署银河麒麟遇到的问题记录

1. 解决VMware Workstation安装VMware Tools显示灰色的办法 1.关闭虚拟机; 2.在虚拟机设置分别设置CD/DVD、CD/DVD2和软盘为自动检测三个步骤; 3.再重启虚拟机,灰色字即点亮。 2.Linux安装vmTool

Pytest接口自动化测试框架搭建模板

auto_api_test 开发环境: Pycharm 开发语言&版本: python3.7.8 测试框架: Pytest、测试报告: Allure 项目源码Git地址 项目目录结构 api – 模仿PO模式, 抽象出页面类, 页面类内包含页面所包含所有接口, 并封装成方法可供其他模块直接调用config – 配置文件目录data…

打造高效自动化渗透测试系统:关键步骤与实践

随着当前网络安全威胁的不断扩展与升级&#xff0c;开展渗透测试工作已经成为广大企业组织主动识别安全漏洞与潜在风险的关键过程。然而&#xff0c;传统的人工渗透测试模式对测试人员的专业能力和经验水平有很高的要求&#xff0c;企业需要投入较大的时间和资源才能完成。在此…

品牌纷纷推出“穷鬼套餐”的原因竟然有这些?

被大众戏称为“千元店”的山姆也开穷鬼套餐了&#xff1f;&#xff1f;该套餐包括1.59公斤售价21.9元的鸡蛋、7个装售价23.9元的原味贝果以及16片装售价59.8元的瑞士卷。 穷鬼套餐最开始是麦当劳和肯德基的推出的概念&#xff0c;由麦当劳推出的11随心配、肯德基超值午餐等。为…

python(django)之产品后台管理功能实现

1、添加新项目 在命令行输入以下代码 python manage.py startapp prroduct 2、添加路径和代码结构 在新项目目录下admin.py中加入以代码 from .models import Product class ProductAdmin(admin.ModelAdmin):list_display [product_name, product_desc,producter,created_…

CC-DefineTag:一个简单好用的标签组件,支持自动换行、自适应高度,且可设置行数、标签文字颜色等属性

CC-DefineTag&#xff1a;一个简单好用的标签组件&#xff0c;支持自动换行、自适应高度&#xff0c;且可设置行数、标签文字颜色等属性 摘要&#xff1a; 在前端开发中&#xff0c;标签组件是常见的UI组件之一&#xff0c;用于显示一组相关的标签。然而&#xff0c;传统的标签…

Postman Runner 使用指南

什么是 Postman Runner&#xff1f; 而 Postman Runner 是 Postman 中的一个模块&#xff0c;它提供了一种批量运行 API 请求的方式&#xff0c;这些请求可以是已经保存的历史请求、集合中的请求或者手动添加的请求。在批量运行 API 请求的过程中&#xff0c;Postman Runner 可…

4.1 用源文件写汇编代码

汇编语言 1. 源程序 1.1 伪指令 汇编指令是有对应的机器码的指令&#xff0c;可以被编译为机器指令&#xff0c;最终为CPU所执行伪指令没有对应的机器指令&#xff0c;最终不被CPU所执行伪指令是由编译器来执行的指令&#xff0c;编译器根据伪指令来进行相关的编译工作 1.2…

arm-linux实现onvif server+WS-UsernameToken令牌验证

目录 一、环境搭建 1、安装openssl 2、安装bison 3、安装flex 二、gsoap下载 三、编译x86版本gsoap 四、编译arm-linux版本gsoap 1、交叉编译openssl 1.1、下载openssl 1.2、交叉编译 2、交叉编译zlib 2.1、下载zlib 2.2、交叉编译 3、交叉编译gsoap 3.1、编译过…

Day75:WEB攻防-验证码安全篇接口滥用识别插件复用绕过宏命令填入滑块类

目录 图片验证码-识别插件-登录爆破&接口枚举 登录爆破 接口枚举 图片验证码-重复使用-某APP短信接口滥用 滑块验证码-宏命令-某Token&Sign&滑块案例 知识点&#xff1a; 1、验证码简单机制-验证码过于简单可爆破 2、验证码重复使用-验证码验证机制可绕过 3、…

TypeScript在学习(0)

1.什么是TypeScript? 答:TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。 个人浅见,我一直把ts简单理解成,其实就是javascript上多了的类型限制; 2.优势和缺点 答…

文件编码探测与原理、Java实现与构造让探测器失效文件

文章目录 构造让探测器失效的文件文件编码探测原理探测器Java实现版本测试 构造让探测器失效的文件 我们用vscode打开一个文本文件的时候&#xff0c;默认会使用UTF-8编码&#xff0c;所以当文件不是UTF-8编码的时候就会乱码。 但是&#xff0c;好像notepad–这类编辑器就似乎…

评估单细胞数据聚类指标 AvgBIO

从scGPT的报告中看到的&#xff1a; 从ChatGPT到scGPT 生成式AI助力单细胞生物学_哔哩哔哩_bilibili

深入理解Mysql索引底层原理(看这一篇文章就够了)

目录 前言 1、Mysql 索引底层数据结构选型 1.1 哈希表&#xff08;Hash&#xff09; 1.2 二叉查找树(BST) 1.3 AVL 树和红黑树 1.4 B 树 1.5 B树 2、Innodb 引擎和 Myisam 引擎的实现 2.1 MyISAM 引擎的底层实现&#xff08;非聚集索引方式&#xff09; 2.2 Innodb 引…

Kubernetes的Namespace使用

在 Kubernetes 中&#xff0c;命名空间提供了一种用于隔离单个集群中的资源组的机制。资源名称在命名空间内必须是唯一的&#xff0c;但不能跨命名空间。基于命名空间的作用域仅适用于命名空间物体 &#xff08;例如部署、服务等&#xff09;而不是集群范围的对象&#xff08;例…

ini配置文件操作方法

一、ini文件介绍 ini配置文件常用于存储项目全局变量 如&#xff1a;接口地址、输出文件路径、项目地址、用户名、密码等 二、ini文件编写格式 [节点] 选项选项值 ;表示注释 注意&#xff1a;节点名不可以重复【所以写入新节点前要判断是否存在】 三、.ini 文件读取 1…

linux内核编译详解

前言 Linux内核是Linux操作系统的核心&#xff0c;也是整个Linux功能体现的核心&#xff0c;就如同发动机在汽车中的重要性。内核主要功能包括进程管理、内存管理、文件管理、设备管理、网络管理等。Linux内核是单内核设计&#xff0c;但却采用了微内核的模块化设计&#xff0…

ffmpeg6.0如何实现解封装

前言 在播放器的播放视频、音视频媒体文件的推流等实际应用中,解封装(demux)这个操作是不可避免的,也是最基础的操作。 拿播放器播放MP4来说,如果想实现播放器视频画面的播放和音频声音的播放都需要经过这个解封装的步骤。因为MP4是一种媒体文件格式,是一种封装格式,M…