防患未然,OceanBase巡检工具应用实践——《OceanBase诊断系列》之五

1. OceanBase为什么要做巡检功能

尽管OceanBase拥有很好的MySQL兼容性,但在长期的生产环境中,部署不符合标准规范、硬件支持异常,或配置项错误等问题,这些短期不会出现的问题,仍会对数据库集群构成潜在的巨大风险。为了解决这类挑战,OceanBase诊断工具增加了巡检子功能,该功能能够结合过去解决问题的经验,对OceanBase集群进行全面的健康检查,并对存在的或潜在的问题进行提前预警。我们必须防患于未然!

2. 怎么做巡检

已经知道了为什么做,怎么去实现巡检的能力?这是个很现实的工程落地问题,考虑到诊断工具本身就是开源项目,OceanBase社区的同学们也很热情,我们也希望大家可以参与进来,因此设定了两个需求条件:

  1. 高可扩展,要给用户更高的参与自由度;
  2. 高兼容性,可以适配OceanBase的多个版本;
  3. 便捷使用,尽可能少的输入参数

设计的巡检功能架构如下:

用户首先需要完成前置的集群配置(在搭配OBD/OCP使用的时候可以更为便捷),以获取到需要进行巡检的集群信息。然后执行巡检即可,obdiag会根据预设的巡检项目对集群进行检查。从用户的角度看,在完成巡检后会输出对应的巡检报告到指定的路径,若都为pass,那就代表目前未发现存在预设隐患的问题,集群还是相对健康的。

3. 怎么使用巡检功能

使用巡检功能的前提是需要一套正在运行的OceanBase集群(单机/集群均可,也可复用obd/ocp所部署的集群)。

3.1. 独立通过obdiag进行使用

3.1.1. 下载&安装&升级obdiag

注:需确认obdiag 1.4版本以上才支持巡检功能

3.1.1.1. 官网下载安装

进入OceanBase分布式数据库-海量数据 笔笔算数 ,根据用户使用的平台选择对应的RPM包

sudo rpm -ivh oceanbase-diagnostic-tool-XXXX.rpm
source /usr/local/oceanbase-diagnostic-tool/init.sh

3.1.1.2. RPM obdiag升级

请注意:升级后配置文件将会被重置,需要重新配置/usr/local/oceanbase-diagnostic-tool/conf/config.yml

sudo rpm -Uvh oceanbase-diagnostic-tool-XXXX.rpm
source /usr/local/oceanbase-diagnostic-tool/init.sh

3.1.1.3. yum源安装
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
sudo yum install -y oceanbase-diagnostic-tool
source /usr/local/oceanbase-diagnostic-tool/init.sh

3.1.2. 配置obdiag

注:

一下配置详解以最新版本的obdiag(1.5.0)进行描述。

配置文件示例位于~/.obdiag/example/

all-components.yaml # 全量检测示例
docker_ob_cluster.yml # 安装于docker的observer示例
ob_cluster.yml # 仅检测observer的示例
obproxy.yml  # 仅检测obproxy的示例

本文选择全量检测示例作为示例

cd ~/.obdiag/
cp ./example/all-components.yaml ./config.yml
vim ~/.obdiag/config.yml

主要需要自行更改的就是OBCLUSTER和NODES,OBCLUSTER是集群的信息,NODES是部署集群所在节点的登录信息,由于需要进行远程执行信息采集(obdiag本身为离线工具,采集的信息不会进行上传)所以需要进行相关的信息配置。

ocp:login:url: http://192.168.1.100:8080user: adminpassword: admin
obcluster:ob_cluster_name: testdb_host: 192.168.1.1db_port: 2881 # default 2881tenant_sys:user: root@sys # default root@syspassword: ""servers:nodes:- ip: 192.168.1.1- ip: 192.168.1.2- ip: 192.168.1.3global:ssh_username: admin # your usernamessh_password: admin # password if need# ssh_port: 22 # your ssh port, default 22# ssh_key_file: "" # your ssh-key file path if need# ssh_type: remote # ssh_type choice [remote, docker, kube] default remote# container_name: xxx # container_name for ssh_type is docker# The directory for oceanbase installedhome_path: /root/observer# The directory for data storage. The default value is $home_path/store.# data_dir: /root/observer/store # The directory for clog, ilog, and slog. The default value is the same as the data_dir value.# redo_dir: /root/observer/store
obproxy:obproxy_cluster_name: obproxyservers:nodes:- ip: 192.168.1.4- ip: 192.168.1.5- ip: 192.168.1.6global:ssh_username: admin # your usernamessh_password: admin # password if need# ssh_port: 22 # your ssh port, default 22# ssh_key_file: "" # your ssh-key file path if need# ssh_type: remote # ssh_type choice [remote, docker, kube] default remote# container_name: xxx # container_name for ssh_type is docker# The directory for obproxy installedhome_path: /root/obproxy

3.1.3. 运行巡检项目

接下来可以对OceanBase集群进行巡检了

obdiag check

在某些时候,可以巡检特定的巡检项目,以避免由于查询动作对集群增加负担

obdiag check --cases=XXXX

这里的XXXX是位于配置文件中${CHECK.package_file}中的套餐名,套餐本身是一个list会维护在指定情况下执行的巡检项目集合。这个套餐支持自定义用户可以自行修改。

注:由于task的灵活性,我们将会在代码仓库中不定时更新和优化巡检项及巡检套餐,用户可以自行在仓库下载${code}/check_package.yaml和${code}/handler/checker/tasks,分别覆盖本地的~/.obdiag/check_package.yaml和~/.obdiag/tasks

# 更新脚本如下,需要有连接外网权限
# 用于更新tasks
curl https://codeload.github.com/oceanbase/oceanbase-diagnostic-tool/tar.gz/master | tar -xz -C ~/.obdiag/ --strip=3 oceanbase-diagnostic-tool-master/handler/checker/tasks
# 用于更新套餐包信息,注意这个更新会覆盖原有的套餐文件,原文件会被转移至 ~/.obdiag/check_package.yaml.old
cp ~/.obdiag/check_package.yaml ~/.obdiag/check_package.yaml.old && curl https://codeload.github.com/oceanbase/oceanbase-diagnostic-tool/tar.gz/master | tar -xz -C  ~/.obdiag/ --strip=1 oceanbase-diagnostic-tool-master/check_package.yaml

3.1.4. 获取&查看巡检报告

在完成巡检后会输出一个cat命令,复制执行即可获取对应的体检报告啦

3.2. 通过obd进行调度使用

注:

obd2.4.0版本开始支持obdiag1.4版本;

预计obd2.5.0版本开始支持obdiag1.5版本。

详见obdiag&obd的release note。

3.2.1. obd中部署obdiag插件

参考3.1.1下载obdiag,并在obd加载obdiag插件

# obd加载obdiag插件
obd mirror clone oceanbase-diagnostic-tool-XXXX.rpm
obd obdiag deploy

3.2.2. obd obdiag执行巡检

与独立通过obdiag使用不同,在obd中使用需要额外加上deploy_name作为集群指定

obd obdiag check ${deploy_cluster_name}#指定巡检集
obd obdiag check ${deploy_cluster_name}

obd obdiag巡检报告查看与独立使用时一样使用cat进行查看

3.2.3. 独立通过obdiag使用与obd obdiag使用不同点

3.2.3.1. 巡检套餐文件${package_file}文件不同

package_file(保存巡检套餐的文件)强制为obdiag插件安装路径下的/check_package.yaml。例如

~/.obd/repository/oceanbase-diagnostic-tool/1.4.0/8d4b6d8ca87d7843b5508f388206a6c41aa93834/oceanbase-diagnostic-tool/check_package.yaml
3.2.3.2. 巡检项目文件基础路径${tasks_base_path}不同

tasks_base_path(保存巡检项的基础路径)强制为obdiag插件安装路径下的/handler/checker/tasks/。例如

~/.obd/repository/oceanbase-diagnostic-tool/1.4.0/8d4b6d8ca87d7843b5508f388206a6c41aa93834/oceanbase-diagnostic-tool//handler/checker/tasks/

4. 怎么自定义巡检项

在实际生成过程中,用户可能需要有自定义巡检的需求,比如运行下部署observer所在节点某个运维工具,采集些节点网络信息等等。巡检功能为了满足用户的不同程度的自定义开放了巡检项目自定义扩展和step_type扩展。

4.1. 巡检项目自定义(编写task)

巡检项目自定义指用户可以自定义需要巡检的流程、验证、验证后需要执行的措施。这个扩展不需要修改obdiag的代码,仅需要编写一个yaml文件即可实现。

4.1.1. 开始编写前

编写前需要确定我们的这个yaml需要放在哪

可以先进入conf.yml文件中设置CHECK.tasks_base_path所标识的目录里(使用obd进行操作时,此路径为~.obdiag/task),看下分析下编写的巡检场景是否属于已有的大类,若没有就创建一个文件夹用于声明这个大类

例:

#先进入${CHECK.tasks_base_path} ,然后创建一个文件夹test,并创建我们的示例文件test.yaml
cd ./handler/check/tasks/
mkdir test
cd test
touch test.yaml

以上便完成了编写前的步骤

4.1.2. 开始编写

开始编写就是开始编辑我们的test.yaml

# 首先需要声明下这个场景的作用,为了让大家看得懂info: "for test"

简单的内容已经结束,开始复杂的编写,注意细节

4.1.2.1. task编写

task的作用是声明巡检执行的步骤,其基础结构是一个list

为什么task是一个list?

  • 是为了兼容不同版本可能导致的步骤的出入、或者压根这个巡检项目没法有

task的一个元素的结构如下

参数名是否必填
version表示适用的版本,使用方式见下示例用str的形式表示范围,需要完整的数字的版本号,3.x版本为三位,4.x版本为四位如:[3.1.1,3.2.0]
steps所执行步骤为list结构

如下就是一个示例

info: testinfo
task:- version: "[3.1.0,3.2.4]"steps:{steps_object}- version: [4.2.0.0,4.3.0.0]steps:{steps_object}

steps又是一个list,用来表示具体的多个执行流程

steps的一个元素的结构即单个流程,如下

参数名是否必填
type表示适用的执行类型,目前支持get_system_parameter/ssh/sql,后续会持续增加支持的类型
{ssh/sql}根据所选的类型提供的参数,这块比较依赖代码里的对执行类型的逻辑说明,本章节后续会对支持的进行类型进行详细的使用说明
result结构为一个单独的对象,用于对这个步骤结束后需要进行的操作进行解析,如校验结果逻辑,逻辑不通过时需要报错的文本信息进行说明等等。具体本章节后续会进行详细说明

各种类型示例如下,"step:" 仅为一个标记,无实际作用

4.1.2.1.1. get_system_parameter

step:type: get_system_parameterparameter_name: parameterresult:set_value: servervm.max_map_count

4.1.2.1.2. ssh

远程执行指令并获取对应的返回值

step:type: sshssh: wc -l /proc/${task_OBServer_pid}/maps | awk '{print $1}'result:set_value: observerMaps

4.1.2.1.3. sql

执行sql并获取对应的值

step:type: sqlsql: select tenant_name from oceanbase.__all_tenant from where tenant_id=${taskTenantId};result:set_value: tenant_name

4.1.3. result&verify编写

result是对step结果的处理,同时这个字段也是verify功能的主要依赖字段,用于对task获取结果的验证

参数名是否必填
set_value将执行后的值赋值,作为一个适用于整个task的变量例如set_value: max_map_count
verify_type默认为base,一般需要和verify联动用于设置验证的方式,base即为通过verify的表达式进行验证,true或false,同时提供了以下常见的判断类型,减少编写量
verify服务于verify_type用于验证执行结果是否符合预期,若不符合,会输出errMsg部分的信息。
report_type用于设置本步骤若出现verify为false需要执行的告警级别默认告警级别为critical。另外还有其他告警级别如下:warning:会进行报警,但是不会中断本task;execution: 等效warning,但是若执行通过将不会再执行后续步骤
err_msg用于非正常执行时答应的日志,支持配置全局变量在verify为false的时候所输出的msg建议配置了verify,就一定要配上err_msg

目前verify_type支持的类型,除了base外的类型仅适用于int类型。

between:判断set_value的值是否在verify提供的范围内;cd usr/local/oceanbase-diagnostic-tool && sh init.sh && source ~/.bashrc

max:是否小于verify提供的值

min:是否大于min提供的值

equal:是否等于verify(兼容字符串或int,但是${set_value}和verify必须是同类型)

base:verify表达式会用于替换如下shell式子中的new_expr内进行执行验证,在编写verify时可以手动在本地进行逻辑验证

if ${new_expr}; thenecho "true"
elseecho "false"
fi

以上编写的教程基本就结束了,具体的示例可以看下${obdiag源码路径}/handler/check/tasks/里的示例

4.2. step_type扩展(未完待续)

step_type扩展指当前的step_type无法满足巡检流程操作的时候可以由用户自定义实现一个全新的step_type来实现一个自定义的功能。这个扩展涉及obdiag源码的修改,参与度较高,后续将单独出一个博客进行讲解

第一篇如何修炼成“神医”——《OceanBase诊断系列》之一
第二篇走进SQL审计视图——《OceanBase诊断系列》之二
第三篇​​​​​​​快速收集诊断信息,敏捷诊断工具obdiag应用实践——《OceanBase诊断系列》之三
第四篇如何快速分析OB集群日志,敏捷诊断工具obdiag分析能力实践——《OceanBase诊断系列》之四​​​​​​​
第五篇专为OceanBase打造的巡检工具已推出!给OceanBase进行一次体检吧——《OceanBase诊断系列》之五

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

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

相关文章

血泪教训双非计算机考研避坑指南

记住,考研不是要考多少分,而是要上岸,上岸,上岸!!😡 一、坏、渣、难、险,一律打咩 坏: 歧视本科院校‼️ 这个就不用多说了,你明明付出了大于等于别人的努力,…

猫头虎分享已解决Bug || 数据中心断电:PowerLoss, DataCenterBlackout

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

运维打工人,兼职跑外卖的第二个周末

北京,晴,西南风1级。 前序 今天天气还行,赶紧起来,把衣服都洗洗,准备准备,去田老师吃饭早饭了。 一个甜饼、一个茶叶蛋、3元自助粥花费7.5。5个5挺吉利的。 跑外卖的意义 两个字减肥,记录刚入…

JavaWeb03-HTTP协议,Tomcat,Servlet

目录 一、HTTP协议 1.概述 2.特点 3.请求数据格式 (1)请求行 (2)请求头 (3)请求体 (4)常见请求头 (5)GET和POST请求区别 4.响应数据格式 &#xf…

分销商城微信小程序:用户粘性增强,促进复购率提升

在数字化浪潮的推动下,微信小程序作为一种轻便、高效的移动应用形式,正成为越来越多企业开展电商业务的重要平台。而分销商城微信小程序的出现,更是为企业带来了前所未有的机遇。通过分销商城微信小程序,企业不仅能够拓宽销售渠道…

PyQt5实现远程更新exe可执行文件

PyQt5实现远程下载更新exe可执行文件 1、实现流程 1、获取远程http地址 2、获取需要更新的exe文件 3、点击更新 4、把exe强关闭 5、下载文件 6、更新2、效果图 3、示例代码 conf.ini配置文件: {"http_address_edit_value": "http://xxx.com/xxx/xxx.exe&qu…

数据结构从入门到精通——队列

队列 前言一、队列1.1队列的概念及结构1.2队列的实现1.3队列的实现1.4扩展 二、队列面试题三、队列的具体实现代码Queue.hQueue.ctest.c队列的初始化队列的销毁入队列出队列返回队头元素返回队尾元素检测队列是否为空检测元素个数 前言 队列是一种特殊的线性数据结构&#xff…

【蓝桥杯-单片机】基础模块LED和按键

文章目录 【蓝桥杯-单片机】Led、按键等基础模块01 前置准备(1)新建工程(4)编写程序 02 基础模块:LED(0)LED原理图(1)对P1整体赋值,控制所有的LED灯&#xff…

three.js如何实现简易3D机房?(一)基础准备-下

接上一篇&#xff1a; three.js如何实现简易3D机房&#xff1f;&#xff08;一&#xff09;基础准备-上&#xff1a;http://t.csdnimg.cn/MCrFZ 目录 四、按需引入 五、导入模型 四、按需引入 index.vue文件中 <template><div class"three-area">&l…

算法第二十五天-寻找排序数组中的最小值

寻找排序数组中的最小值 题目要求 解题思路 二分法 代码 class Solution:def findMin(self, nums: List[int]) -> int:low, high 0, len(nums) - 1while low < high:pivot low (high - low) // 2if nums[pivot] < nums[high]:high pivot else:low pivot 1re…

计算两帧雷达数据之间的变换矩阵

文章目录 package.xmlCMakeLists.txtpoint_cloud_registration.cc运行结果 package.xml <?xml version"1.0"?> <package format"2"><name>point_cloud_registration</name><version>0.0.0</version><descriptio…

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的按键扫描、数码管显示按键值、显示按键LED应用

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的按键扫描、数码管显示按键值、显示按键LED应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍TM1638键盘…

Spring Boot中实现图片上传功能的两种策略

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

js 清空数组的方法

1、直接赋值空数组 let array [1, 2, 3, 4, 5]; array []; 这种方法并不推荐&#xff0c;如下图所示&#xff1a; 虽然a数组确实变为了空数组&#xff0c;但这种方法只是修改了a的指向&#xff0c;把a指向一个新的空数组&#xff0c;然而[1,2,3,4,5]这个数组并没有被清除&a…

Matlab偏微分方程拟合 | 完整源码 | 视频教程

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法&#xff0c;并提供所有案例完整源码&#xff1b;2.…

Python——与Matlab对应的Python版本

参考资料&#xff1a; Python——与Matlab对应的Python版本

基于java+springboot+vue实现的学生信息管理系统(文末源码+Lw+ppt)23-54

摘 要 人类现已进入21世纪&#xff0c;科技日新月异&#xff0c;经济、信息等方面都取得了长足的进步&#xff0c;特别是信息网络技术的飞速发展&#xff0c;对政治、经济、军事、文化等方面都产生了很大的影响。 利用计算机网络的便利&#xff0c;开发一套基于java的大学生…

第十篇 - 如何利用人工智能技术做好营销流量整形管理?(Traffic Shaping)- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市​​​​​​​。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先…

【蓝桥杯】蓝桥杯算法复习(一)

&#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…

UnityShader——09数学知识3

方阵 行与列数量相等的矩阵,n*n阶矩阵 对角矩阵 当对角线以外的矩阵内元素全为0&#xff0c;则称之为对角矩阵&#xff0c;对角矩阵的前提是必须是方阵 单位矩阵 对角线元素全为1&#xff0c;其余元素全为0&#xff0c;属于对角矩阵的一部分 矩阵和向量 把1 * n阶矩阵称…