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

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

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

相关文章

SpringBoot如何写好单元测试

&#x1f413;序言 Spring中的单元测试非常方便&#xff0c;可以很方便地对Spring Bean进行测试&#xff0c;包括Controller、Service和Repository等Spring Bean进行测试&#xff0c;确保它们的功能正常&#xff0c;并且不会因为应用的其他变化而出现问题。 &#x1f413;单元测…

CSS问题精粹1

1.关于消除<li>列表前的符号 我相信很多人在初学CSS时会遇到该问题&#xff0c;无论是创作导航&#xff0c;还是列表&#xff0c;前面都会有个黑点点或其它符号。 解决该问题其实很简单 采用list-style-type:none或list-style:none直接解决 如果你想更换前面的黑点点&a…

进程的概念 | PCB | Linux下的task_struct | 父子进程和子进程

在讲进程之前首先就是需要去回顾一下我们之前学的操作系统是干嘛的&#xff0c;首先操作系统是一个软件&#xff0c;它是对上提供一个良好高效&#xff0c;稳定的环境的&#xff0c;这是相对于用户来说的&#xff0c;对下是为了进行更好的软硬件管理的&#xff0c;所以操作系统…

MySQL之索引与事务

一 索引的概念 一种帮助系统查找信息的数据 数据库索引 是一个排序的列表&#xff0c;存储着索引值和这个值所对应的物理地址无须对整个表进行扫描&#xff0c;通过物理地 址就可以找到所需数据是表中一列或者若干列值排序的方法 需要额外的磁盘空间 索引的作用 1 数据库…

浅谈RPC的理解

浅谈RPC的理解 前言RPC体系Dubbo架构最后 前言 本文中部分知识涉及Dubbo&#xff0c;需要对Dubbo有一定的理解&#xff0c;且对源码有一定了解 如果不了解&#xff0c;可以参考学习我之前的文章&#xff1a; 浅谈Spring整合Dubbo源码&#xff08;Service和Reference注解部分&am…

数字化战略失配企业现状,可惜了!

尽管大部分的企业领导者已经意识到数字化转型对于企业革新业务模式、提升运营效率、抢占市场先机的关键作用&#xff0c;但是&#xff0c;认知上的转变并不等同于成功的实践。在实际操作中&#xff0c;往往出现战略与企业现状不符的现象&#xff0c;这无疑会使得所有的努力付诸…

windows查看局域网内所有已使用的IP IP扫描工具 扫描网段下所有的IP Windows环境下

推荐使用&#xff1a; Advanced IP Scanner 官网下载&#xff1a; https://www.advanced-ip-scanner.com/

学习vue3第九节(新加指令 v-pre/v-once/v-memo/v-cloak )

1、v-pre 作用&#xff1a;防止编译器解析某个特定的元素及其内容&#xff0c;即v-pre 会跳过当前元素以及其子元素的vue语法解析&#xff0c;并将其保持原样输出&#xff1b; 用于&#xff1a;vue 中一些没有指令和插值表达式的节点的元素&#xff0c;使用 v-pre 可以提高 Vu…

LeetCode 17 / 100

目录 普通数组最大子数组和合并区间轮转数组除自身以外数组的乘积缺失的第一个正数 LeetCode 53. 最大子数组和 LeetCode 56. 合并区间 LeetCode 189. 轮转数组 LeetCode 238. 除自身以外数组的乘积 LeetCode 41. 缺失的第一个正数 普通数组 最大子数组和 给你一个整数数组 …

十、MySQL主从架构配置

目录 一、资源配置 二、主从同步基本原理&#xff1a; 1、具体步骤&#xff1a; 2、数据库是靠什么同步的&#xff1f; 3、pos与GTID的区别&#xff1f; 三、配置一主两从 &#xff08;1&#xff09;为主库和从库创建复制账户&#xff0c; 分别在主从库上执行如下命令&a…

React Native:跨平台移动应用开发的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Python进程与线程开发

目录 multiprocessing模块 线程的开发 threading模块 setDaemon 死锁 线程间的通信 multiprocessing模块 运行python的时候&#xff0c;我们都是在创建并运行一个进程&#xff0c;(linux中一个进程可以fork一个子进程&#xff0c;并让这个子进程exec另外一个程序)。在pyt…

机器学习——压缩网络作业

文章目录 任务描述介绍知识蒸馏网络设计 Baseline实践 任务描述 网络压缩&#xff1a;使用小模型模拟大模型的预测/准确性。在这个任务中&#xff0c;需要训练一个非常小的模型来完成HW3&#xff0c;即在food-11数据集上进行分类。 介绍 有许多种网络/模型压缩的类型&#xff0…

Java并发

目录 线程 什么是线程 进程和线程的区别 线程的生命周期 什么是多线程 并发与并行 多线程的三种实现方式 继承Thread类 1.创建类继承Thread类 2.重写run&#xff08;&#xff09;方法 3.创建对象启动线程 实现Runnable接口 1.自己定义一个类实现Runnable接口 2.重…

由浅到深认识C语言(14):枚举

该文章Github地址&#xff1a;https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.csdn…

python毕业设计基于flask应急救援调度系统django

此系统设计主要采用的是python语言来进行开发&#xff0c;采用flask框架技术&#xff0c;框架分为三层&#xff0c;分别是控制层Controller&#xff0c;业务处理层Service&#xff0c;持久层dao&#xff0c;能够采用多层次管理开发&#xff0c;对于各个模块设计制作有一定的安全…

动态规划题目练习

基础知识&#xff1a; 动态规划背包问题-CSDN博客 动态规划基础概念-CSDN博客 题目练习&#xff1a; 题目1&#xff1a;过河卒 题目描述 棋盘上 A 点有一个过河卒&#xff0c;需要走到目标 B 点。卒行走的规则&#xff1a;可以向下、或者向右。同时在棋盘上 C 点有一个对方的马…

WebGIS管线在线编辑器(电力、水力、燃气、热力、热能管线)

随着GIS等信息技术的发展&#xff0c;地下管线管理也从二维平面向三维立体管理迈进。传统管线信息管理系统将管线及其附属设施抽象成二维平面内的点、要素&#xff0c;并使用各类点符号、不同颜色线段进行表达。虽能一定程度上满足城市智慧运行的需要&#xff0c;但不能很直观的…

【Linux】文件描述符 - fd

文章目录 1. open 接口介绍1.1 代码演示1.2 open 函数返回值 2. 文件描述符 fd2.1 0 / 1 / 22.2 文件描述符的分配规则 3. 重定向3.1 dup2 系统调用函数 4. FILE 与 缓冲区 1. open 接口介绍 使用 man open 指令查看手册&#xff1a; #include <sys/types.h> #include …

02. Java 中的关键字、标识符、运算符、分隔符和注释

关键字 Java 的关键字(keyword、保留字)是 Java 语言中具有特殊含义的单词&#xff0c;它们被保留供 Java 自身使用&#xff0c;不能被用作标识符。例如 public、class、void、int 等都是关键字。 关键字在 Java 语法中起着重要的作用&#xff0c;它们定义了编程的结构、控制…