防患未然,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诊断系列》之三
第四篇一键操作敏捷诊断工具obdiag分析OB集群日志设计与实践——《OceanBase诊断系列》之四
第五篇专为OceanBase打造的巡检工具已推出!给OceanBase进行一次体检吧——《OceanBase诊断系列》之五

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

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

相关文章

使用API有效率地管理Dynadot域名,进行DNS域名解析

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

51camera简述面结构光成像

首先我们来看看结构光成像,它是使用特定的光图案和2D相机来捕获物体表面的三维轮廓的一种成像方法。其原理是将特定的窄带光投影到三维形状物体的表面上会产生一条照明线,该照明线从投影器的其他角度来看存在一定的变形,利用这种被三维形状调…

十四 超级数据查看器 讲解稿 背景和颜色

十四 超级数据查看器 讲解稿 背景和颜色 点击打开新页面播放视频教程 点击访问应用宝下载 讲解稿全文: 大家好,我们讲解一下 超级数据查看器 背景和颜色设置。 首先,我们打开超级数据查看器。 这节课设置的是 列表和详情界面的背景 和顶栏颜色。 …

网络编程作业day4

广播模型&#xff1a; 发送端&#xff1a; #include <myhead.h> int main(int argc, const char *argv[]) {//创建套接字int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}//设置套接字允许广播属性int broadcast1;if(sets…

Redis基本使用和基础知识整理

Redis是做什么的&#xff1f; Redis是一个开源&#xff0c;内存存储的数据结构服务器&#xff0c;可用作数据库&#xff0c;高速缓存和消息队列。Redis将数据储存在内存当中 内存的特点 易失性&#xff08;在断电之后数据就没有了&#xff09;进行读取数据等IO操作的速度要比…

ssm核心面试题汇总

文章目录 1. Spring1.1 Spring Beans1.谈谈你对Spring的理解以及优缺点2. 什么是Spring beans3. 配置注册Bean有哪几种方式4. Spring支持的几种bean的作用域5. 单例bean的优势6. 单例bean是线程安全的吗&#xff1f;如何优化为线程安全7. 谈一谈spring bean的自动装配8. Spring…

基于华为atlas的unet分割模型探索

Unet模型使用官方基于kaggle Carvana Image Masking Challenge数据集训练的模型。 模型输入为572*572*3&#xff0c;输出为572*572*2。分割目标分别为&#xff0c;0&#xff1a;背景&#xff0c;1&#xff1a;汽车。 Pytorch的pth模型转化onnx模型&#xff1a; import torchf…

Linux笔记--make

使用上一节的 main.c、add.c、sub.c文件进行编译&#xff0c;编译的过程有很多步骤&#xff0c;如果要重新编译&#xff0c;还需要再重来一遍&#xff0c;能不能一步完成这些步骤?将这些步骤写到makefile文件中&#xff0c;通过make工具进行编译 一个工程中的源文件不计其数&a…

Vue基础入门(4)- Vuex的使用

Vue基础入门&#xff08;4&#xff09;- Vuex的使用 Vuex 主要内容&#xff1a;Store以及其中的state、mutations、actions、getters、modules属性 介绍&#xff1a;Vuex 是一个 Vue 的 状态管理工具&#xff0c;状态就是数据。 大白话&#xff1a;Vuex 是一个插件&#xff…

Ubuntu18.04运行ORB-SLAM3

ORB-SLAM3复现(ubuntu18) 文章目录 ORB-SLAM3复现(ubuntu18)1 坐标系与外参Intrinsic parameters2 内参Intrinsic parameters2.1 相机内参① 针孔模型Pinhole② KannalaBrandt8模型③ Rectified相机 2.2 IMU内参 3 VI标定—外参3.1 Visual calibration3.2 Inertial calibration…

CSS标准文档流与脱离文档流,分享一点面试小经验

大厂面试真题整理 CSS&#xff1a; 1&#xff0c;盒模型 2&#xff0c;如何让一个盒子水平垂直居中&#xff1f; 3&#xff0c;css 优先级确定 4&#xff0c;解释下浮动和它的工作原理&#xff0c;清除浮动的方法&#xff1f; 5&#xff0c;CSS隐藏元素的几种方法 6&#xff0…

CSS常用五类选择器,附面试题

学习路线 第一阶段&#xff1a;网页制作 HTML&#xff1a;常用标签&#xff0c;锚点&#xff0c;列表标签&#xff0c;表单标签&#xff0c;表格标签&#xff0c;标签分类&#xff0c;标签语义化&#xff0c;注释&#xff0c;字符实体 CSS&#xff1a;CSS介绍&#xff0c;全局…