Skip to content

OceanBase 巡检脚本与自动化

内置巡检工具

1. obdiag 工具

obdiag 是 OceanBase 官方提供的诊断工具,包含巡检功能:

bash
# 运行集群巡检
obdiag inspect --cluster cluster_name

# 运行指定组件巡检
obdiag inspect --component observer
obdiag inspect --component obproxy

# 运行指定模块巡检
obdiag inspect --module health
obdiag inspect --module performance
obdiag inspect --module security

# 生成巡检报告
obdiag report --inspect-result result_dir

2. ob_admin 工具

ob_admin 工具提供了多种巡检命令:

bash
# 检查集群状态
ob_admin cluster check

# 检查节点状态
ob_admin server check --server server_ip:port

# 检查资源使用情况
ob_admin resource check

# 检查备份状态
ob_admin backup check

自定义巡检脚本开发

1. 脚本设计原则

  • 模块化设计:将不同巡检项拆分为独立模块
  • 可配置性:支持通过配置文件调整巡检参数
  • 日志记录:详细记录巡检过程和结果
  • 告警机制:支持多种告警方式
  • 报告生成:生成清晰的巡检报告
  • 可扩展性:便于添加新的巡检项

2. 巡检脚本框架

bash
#!/bin/bash

# 配置文件路径
CONFIG_FILE="ob_inspect.conf"

# 日志文件路径
LOG_FILE="ob_inspect.log"

# 报告文件路径
REPORT_FILE="ob_inspect_report.html"

# 加载配置
load_config() {
    # 加载配置文件逻辑
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 加载配置文件: $CONFIG_FILE" >> $LOG_FILE
    # 配置加载代码
}

# 集群状态巡检
check_cluster_status() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 开始集群状态巡检" >> $LOG_FILE
    # 集群状态检查逻辑
    # 1. 检查集群整体状态
    # 2. 检查服务可用性
    # 3. 检查副本分布
}

# 节点健康巡检
check_node_health() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 开始节点健康巡检" >> $LOG_FILE
    # 节点健康检查逻辑
    # 1. 检查节点存活状态
    # 2. 检查 CPU 使用率
    # 3. 检查内存使用情况
    # 4. 检查磁盘空间
}

# 性能指标巡检
check_performance() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 开始性能指标巡检" >> $LOG_FILE
    # 性能指标检查逻辑
    # 1. 检查响应时间
    # 2. 检查吞吐量
    # 3. 检查慢查询
    # 4. 检查锁等待
}

# 生成巡检报告
generate_report() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 生成巡检报告" >> $LOG_FILE
    # 报告生成逻辑
}

# 发送告警
send_alert() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 发送告警" >> $LOG_FILE
    # 告警发送逻辑
}

# 主函数
main() {
    # 初始化日志
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] OceanBase 巡检开始" > $LOG_FILE
    
    # 加载配置
    load_config
    
    # 执行各项巡检
    check_cluster_status
    check_node_health
    check_performance
    
    # 生成报告
    generate_report
    
    # 发送告警(如果有问题)
    send_alert
    
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] OceanBase 巡检结束" >> $LOG_FILE
}

# 执行主函数
main

3. SQL 巡检脚本示例

sql
-- 检查集群状态
SELECT * FROM oceanbase.GV$OB_CLUSTER_STATUS;

-- 检查节点状态
SELECT * FROM oceanbase.GV$OB_SERVERS;

-- 检查资源使用情况
SELECT * FROM oceanbase.GV$OB_TENANT_STAT WHERE stat_id IN ('cpu_total', 'memory_total', 'iops_total');

-- 检查慢查询
SELECT * FROM oceanbase.GV$OB_SLOW_QUERY ORDER BY query_time DESC LIMIT 10;

-- 检查锁等待
SELECT * FROM oceanbase.GV$OB_LOCK_WAITS;

-- 检查备份状态
SELECT * FROM oceanbase.GV$OB_BACKUP_JOB_STATUS;

-- 检查副本状态
SELECT * FROM oceanbase.GV$OB_REPLICA_STATUS WHERE status != 'NORMAL';

自动化巡检流程

1. 巡检频率设置

根据业务需求设置不同的巡检频率:

  • 核心业务集群:每小时一次
  • 重要业务集群:每4小时一次
  • 一般业务集群:每天一次
  • 全量深度巡检:每周一次

2. 自动化部署方案

  • 使用 Crontab 调度

    bash
    # 每小时执行一次巡检
    0 * * * * /path/to/ob_inspect.sh >> /path/to/ob_inspect_cron.log 2>&1
    
    # 每天凌晨执行一次全量巡检
    0 0 * * * /path/to/ob_full_inspect.sh >> /path/to/ob_full_inspect_cron.log 2>&1
  • 使用 Ansible 批量执行

    yaml
    - name: Run OceanBase inspection
      hosts: oceanbase_servers
      tasks:
        - name: Execute inspection script
          script: /path/to/ob_inspect.sh
          register: inspect_result
        
        - name: Fetch inspection report
          fetch:
            src: /path/to/ob_inspect_report.html
            dest: /local/reports/{{ inventory_hostname }}_inspect_report.html
            flat: yes

3. 巡检报告自动化

  • 生成 HTML 报告:使用模板引擎生成美观的 HTML 报告
  • 发送邮件通知:定期将巡检报告发送给相关人员
  • 集成到监控系统:将巡检结果推送到监控系统
  • 存储历史报告:保留历史巡检报告用于趋势分析

巡检脚本最佳实践

1. 脚本开发最佳实践

  • 使用参数化设计:支持通过命令行参数调整脚本行为
  • 添加错误处理:对可能的错误情况进行处理
  • 实现超时控制:防止单个巡检项耗时过长
  • 添加日志级别:支持不同级别的日志输出
  • 实现并行执行:提高巡检效率

2. 巡检执行最佳实践

  • 避开业务高峰:选择业务低峰期执行巡检
  • 逐步推广:先在测试环境验证,再推广到生产环境
  • 定期更新脚本:根据 OceanBase 版本更新巡检脚本
  • 培训相关人员:确保运维人员了解巡检脚本使用方法

3. 巡检结果处理

  • 及时响应告警:对巡检发现的问题及时处理
  • 分析趋势变化:关注指标的趋势变化,提前发现问题
  • 优化巡检项:根据实际情况调整巡检项和阈值
  • 持续改进:根据巡检结果优化系统配置

常见巡检场景

1. 集群健康巡检

bash
#!/bin/bash

# 检查集群状态
check_cluster() {
    echo "=== 集群状态检查 ==="
    obclient -h127.0.0.1 -P2881 -uroot -p -Doceanbase -e "SELECT * FROM GV$OB_CLUSTER_STATUS;"
    
    echo "\n=== 节点状态检查 ==="
    obclient -h127.0.0.1 -P2881 -uroot -p -Doceanbase -e "SELECT * FROM GV$OB_SERVERS;"
    
    echo "\n=== 副本状态检查 ==="
    obclient -h127.0.0.1 -P2881 -uroot -p -Doceanbase -e "SELECT * FROM GV$OB_REPLICA_STATUS WHERE status != 'NORMAL';"
}

# 执行检查
check_cluster

2. 性能巡检

bash
#!/bin/bash

# 检查性能指标
check_performance() {
    echo "=== 性能指标检查 ==="
    
    echo "\n--- CPU 使用率 ---"
    obclient -h127.0.0.1 -P2881 -uroot -p -Doceanbase -e "SELECT * FROM GV$OB_TENANT_STAT WHERE stat_id = 'cpu_total';"
    
    echo "\n--- 内存使用率 ---"
    obclient -h127.0.0.1 -P2881 -uroot -p -Doceanbase -e "SELECT * FROM GV$OB_TENANT_MEMORY;"
    
    echo "\n--- 慢查询 ---"
    obclient -h127.0.0.1 -P2881 -uroot -p -Doceanbase -e "SELECT * FROM GV$OB_SLOW_QUERY ORDER BY query_time DESC LIMIT 5;"
    
    echo "\n--- 锁等待 ---"
    obclient -h127.0.0.1 -P2881 -uroot -p -Doceanbase -e "SELECT * FROM GV$OB_LOCK_WAITS;"
}

# 执行检查
check_performance

3. 备份状态巡检

bash
#!/bin/bash

# 检查备份状态
check_backup() {
    echo "=== 备份状态检查 ==="
    
    echo "\n--- 备份作业状态 ---"
    obclient -h127.0.0.1 -P2881 -uroot -p -Doceanbase -e "SELECT * FROM GV$OB_BACKUP_JOB_STATUS;"
    
    echo "\n--- 备份集信息 ---"
    obclient -h127.0.0.1 -P2881 -uroot -p -Doceanbase -e "SELECT * FROM GV$OB_BACKUP_SET;"
    
    echo "\n--- 备份验证状态 ---"
    obclient -h127.0.0.1 -P2881 -uroot -p -Doceanbase -e "SELECT * FROM GV$OB_BACKUP_VALIDATION;"
}

# 执行检查
check_backup

巡检报告示例

1. 报告结构

巡检报告通常包含以下部分:

  • 巡检基本信息:时间、集群名称、巡检范围
  • 巡检结果摘要:通过项、警告项、失败项
  • 详细巡检结果:各项巡检的具体结果
  • 问题分析:对发现的问题进行分析
  • 建议措施:提出解决问题的建议
  • 性能趋势:关键指标的趋势分析

2. 报告模板

html
<!DOCTYPE html>
<html>
<head>
    <title>OceanBase 巡检报告</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        .header { background-color: #f0f0f0; padding: 10px; border-radius: 5px; }
        .summary { margin: 20px 0; }
        .section { margin: 20px 0; }
        .pass { color: green; }
        .warn { color: orange; }
        .fail { color: red; }
        table { border-collapse: collapse; width: 100%; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
    </style>
</head>
<body>
    <div class="header">
        <h1>OceanBase 巡检报告</h1>
        <p>巡检时间: {{ inspection_time }}</p>
        <p>集群名称: {{ cluster_name }}</p>
    </div>
    
    <div class="summary">
        <h2>巡检结果摘要</h2>
        <p>总巡检项: {{ total_items }}</p>
        <p>通过项: <span class="pass">{{ pass_items }}</span></p>
        <p>警告项: <span class="warn">{{ warn_items }}</span></p>
        <p>失败项: <span class="fail">{{ fail_items }}</span></p>
    </div>
    
    <div class="section">
        <h2>详细巡检结果</h2>
        
        <h3>1. 集群状态检查</h3>
        <table>
            <tr><th>检查项</th><th>结果</th><th>详情</th></tr>
            {% for item in cluster_checks %}
            <tr>
                <td>{{ item.name }}</td>
                <td class="{{ item.status }}">{{ item.status }}</td>
                <td>{{ item.detail }}</td>
            </tr>
            {% endfor %}
        </table>
        
        <!-- 其他巡检项表格 -->
    </div>
    
    <div class="section">
        <h2>问题分析与建议</h2>
        {% for issue in issues %}
        <h3>{{ issue.title }}</h3>
        <p><strong>问题描述:</strong> {{ issue.description }}</p>
        <p><strong>影响范围:</strong> {{ issue.impact }}</p>
        <p><strong>建议措施:</strong> {{ issue.suggestion }}</p>
        {% endfor %}
    </div>
</body>
</html>

常见问题(FAQ)

Q1: 如何选择巡检工具?

A1: 巡检工具选择建议:

  • 简单巡检:使用内置的 obdiag 工具
  • 深度定制:开发自定义巡检脚本
  • 批量管理:结合 Ansible 等自动化工具

Q2: 如何设置合理的巡检阈值?

A2: 巡检阈值设置建议:

  • 参考 OceanBase 官方建议值
  • 根据业务实际情况调整
  • 基于历史数据设置基线
  • 逐步优化阈值参数

Q3: 如何处理巡检发现的问题?

A3: 问题处理流程:

  1. 确认问题真实性
  2. 评估问题影响范围
  3. 制定解决方案
  4. 实施修复措施
  5. 验证修复效果
  6. 更新巡检脚本

Q4: 如何实现巡检报告自动化?

A4: 报告自动化实现方法:

  • 使用模板引擎生成 HTML 报告
  • 配置邮件自动发送
  • 集成到监控系统
  • 存储历史报告

Q5: 如何优化巡检脚本性能?

A5: 巡检脚本优化建议:

  • 实现并行执行
  • 减少不必要的查询
  • 优化 SQL 查询语句
  • 实现增量巡检
  • 合理设置超时时间