Skip to content

OceanBase 工具与脚本库

官方核心工具

1. OBD(OceanBase Deployer)

工具简介

  • OceanBase 官方部署和管理工具
  • 支持集群部署、扩容、缩容、升级等操作
  • 自动化部署流程,减少手动操作
  • 支持多版本管理

主要功能

  • 集群部署:自动化部署 OceanBase 集群
  • 集群管理:启动、停止、重启集群
  • 集群扩容:添加节点和资源池
  • 集群缩容:删除节点和资源池
  • 版本管理:升级和回滚集群版本

常用命令

bash
# 部署集群
obd cluster deploy <cluster_name> -c <config_file>

# 启动集群
obd cluster start <cluster_name>

# 停止集群
obd cluster stop <cluster_name>

# 查看集群状态
obd cluster status <cluster_name>

# 查看集群日志
obd cluster display <cluster_name> --role observer

# 升级集群
obd cluster upgrade <cluster_name> -V <new_version>

配置示例

yaml
# 集群配置示例
user: admin
oceanbase-ce:
  servers:
    - name: server1
      ip: 10.0.0.1
    - name: server2
      ip: 10.0.0.2
    - name: server3
      ip: 10.0.0.3
  global:
    home_path: /home/admin/oceanbase
    cluster_id: 1
    zone_list: zone1,zone2,zone3
    observer_port: 2881
    rpc_port: 2882
    mysql_port: 2883
    devname: eth0
    cluster_name: obcluster
    root_password: password
    proxyro_password: password

2. obdiag(OceanBase 诊断工具)

工具简介

  • OceanBase 官方诊断工具
  • 用于收集集群诊断信息
  • 支持自动分析和生成报告
  • 帮助定位和解决问题

主要功能

  • 信息收集:收集集群配置、日志、监控数据等
  • 自动分析:分析收集的数据,识别问题
  • 报告生成:生成诊断报告
  • 问题定位:帮助定位性能问题和故障

常用命令

bash
# 收集集群诊断信息
obdiag gather -c <cluster_name> -t <target_dir>

# 分析诊断信息
obdiag analyze -i <input_dir> -o <output_dir>

# 生成诊断报告
obdiag report -i <input_dir> -o <output_dir>

# 检查集群健康状态
obdiag check -c <cluster_name>

# 收集特定节点信息
obdiag gather -c <cluster_name> -N 10.0.0.1 -t <target_dir>

使用示例

bash
# 收集集群诊断信息
obdiag gather -c obcluster -t /tmp/obdiag_output

# 分析并生成报告
obdiag analyze -i /tmp/obdiag_output -o /tmp/obdiag_report
obdiag report -i /tmp/obdiag_output -o /tmp/obdiag_report

3. OCP(OceanBase Cloud Platform)

工具简介

  • OceanBase 企业级管理平台
  • 提供可视化管理界面
  • 支持多集群管理
  • 集成监控、告警、备份、恢复等功能

主要功能

  • 集群管理:部署、扩容、缩容、升级
  • 租户管理:创建、配置、监控租户
  • 监控告警:实时监控和告警
  • 备份恢复:自动化备份和恢复
  • 性能诊断:性能分析和优化
  • 安全管理:权限管理和审计

使用方式

  • 登录 OCP 管理界面
  • 通过 Web 界面进行操作
  • 支持 REST API 集成
  • 支持命令行工具

第三方常用工具

1. Prometheus + Grafana

工具简介

  • 流行的开源监控解决方案
  • Prometheus 负责数据采集
  • Grafana 负责数据可视化
  • 支持丰富的监控指标

配置方法

  1. 部署 Prometheus

    yaml
    # prometheus.yml
    global:
      scrape_interval: 15s
    
    scrape_configs:
      - job_name: 'oceanbase'
        static_configs:
          - targets: ['10.0.0.1:2881', '10.0.0.2:2881', '10.0.0.3:2881']
        metrics_path: /metrics
  2. 部署 Grafana

    • 安装 Grafana
    • 添加 Prometheus 数据源
    • 导入 OceanBase 监控模板
  3. 配置告警规则

    yaml
    groups:
    - name: oceanbase-alerts
      rules:
      - alert: HighCPUUsage
        expr: oceanbase_cpu_usage > 85
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "High CPU usage on {{ $labels.instance }}"
          description: "CPU usage is above 85% for 10 minutes"

2. obproxy-routes

工具简介

  • OBProxy 路由管理工具
  • 用于管理 OBProxy 路由规则
  • 支持动态调整路由
  • 帮助优化 OBProxy 性能

主要功能

  • 查看路由规则
  • 添加/删除路由规则
  • 动态调整路由
  • 监控路由状态

常用命令

bash
# 查看路由规则
obproxy-routes show

# 添加路由规则
obproxy-routes add --cluster <cluster_name> --tenant <tenant_name> --table <table_name> --route <route_info>

# 删除路由规则
obproxy-routes delete --cluster <cluster_name> --tenant <tenant_name> --table <table_name>

# 刷新路由规则
obproxy-routes refresh

3. ob-slow-query-analyzer

工具简介

  • 慢查询分析工具
  • 用于分析 OceanBase 慢查询日志
  • 支持多种分析维度
  • 生成可视化报告

主要功能

  • 慢查询统计:统计慢查询数量和分布
  • 慢查询分析:分析慢查询原因
  • 索引建议:提供索引优化建议
  • 报告生成:生成分析报告

常用命令

bash
# 分析慢查询日志
ob-slow-query-analyzer analyze -f <slow_query_file> -o <output_dir>

# 统计慢查询
ob-slow-query-analyzer stats -f <slow_query_file>

# 生成索引建议
ob-slow-query-analyzer index -f <slow_query_file>

# 生成可视化报告
ob-slow-query-analyzer report -f <slow_query_file> -o <output_dir>

常用运维脚本

1. 备份恢复脚本

自动备份脚本

bash
#!/bin/bash
# 自动备份 OceanBase 集群

# 配置信息
CLUSTER_NAME="obcluster"
TENANT_NAME="tenant1"
BACKUP_DIR="/backup/oceanbase"
DATE=$(date +"%Y%m%d_%H%M%S")
BACKUP_SET="backup_set_$DATE"

# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE

# 执行全量备份
echo "开始执行全量备份..."
obclient -h127.0.0.1 -P2883 -uroot -ppassword -c -A oceanbase << EOF
BACKUP TENANT $TENANT_NAME FULL TO '$BACKUP_DIR/$DATE' WITH BACKUPSET '$BACKUP_SET';
EOF

# 检查备份结果
if [ $? -eq 0 ]; then
    echo "备份成功:$BACKUP_DIR/$DATE/$BACKUP_SET"
    # 清理 7 天前的备份
    find $BACKUP_DIR -name "*" -type d -mtime +7 -exec rm -rf {} \;
else
    echo "备份失败"
    exit 1
fi

备份验证脚本

bash
#!/bin/bash
# 验证 OceanBase 备份完整性

# 配置信息
BACKUP_DIR="/backup/oceanbase"
BACKUP_SET="backup_set_20240118_100000"

# 检查备份集是否存在
if [ ! -d "$BACKUP_DIR/$BACKUP_SET" ]; then
    echo "备份集不存在:$BACKUP_DIR/$BACKUP_SET"
    exit 1
fi

# 验证备份集完整性
echo "开始验证备份集完整性..."
obclient -h127.0.0.1 -P2883 -uroot -ppassword -c -A oceanbase << EOF
SELECT * FROM oceanbase.DBA_OB_BACKUP_VALIDATION WHERE backup_set_id = '$BACKUP_SET';
EOF

# 检查验证结果
if [ $? -eq 0 ]; then
    echo "备份验证成功"
else
    echo "备份验证失败"
    exit 1
fi

2. 监控脚本

集群状态检查脚本

bash
#!/bin/bash
# 检查 OceanBase 集群状态

# 配置信息
OB_CLIENT="obclient -h127.0.0.1 -P2883 -uroot -ppassword -c -A oceanbase"

# 检查集群状态
echo "检查集群状态..."
CLUSTER_STATUS=$($OB_CLIENT -e "SELECT status FROM oceanbase.GV$OB_CLUSTER_STATUS LIMIT 1" | grep -v "status")

if [ "$CLUSTER_STATUS" = "ACTIVE" ]; then
    echo "集群状态正常:$CLUSTER_STATUS"
else
    echo "集群状态异常:$CLUSTER_STATUS"
    exit 1
fi

# 检查节点状态
echo "检查节点状态..."
NODE_COUNT=$($OB_CLIENT -e "SELECT COUNT(*) FROM oceanbase.GV$OB_SERVER WHERE status = 'ACTIVE'" | grep -v "COUNT")
TOTAL_NODE=$($OB_CLIENT -e "SELECT COUNT(*) FROM oceanbase.GV$OB_SERVER" | grep -v "COUNT")

echo "活跃节点数:$NODE_COUNT/$TOTAL_NODE"

# 检查副本状态
echo "检查副本状态..."
REPLICA_COUNT=$($OB_CLIENT -e "SELECT COUNT(*) FROM oceanbase.GV$OB_REPLICA WHERE status = 'ACTIVE'" | grep -v "COUNT")
TOTAL_REPLICA=$($OB_CLIENT -e "SELECT COUNT(*) FROM oceanbase.GV$OB_REPLICA" | grep -v "COUNT")

echo "活跃副本数:$REPLICA_COUNT/$TOTAL_REPLICA"

# 检查慢查询数
echo "检查慢查询数..."
SLOW_QUERY_COUNT=$($OB_CLIENT -e "SELECT COUNT(*) FROM oceanbase.GV$OB_SLOW_QUERY WHERE request_time > NOW() - INTERVAL 5 MINUTE" | grep -v "COUNT")

echo "最近 5 分钟慢查询数:$SLOW_QUERY_COUNT"

性能监控脚本

bash
#!/bin/bash
# 监控 OceanBase 性能指标

# 配置信息
OB_CLIENT="obclient -h127.0.0.1 -P2883 -uroot -ppassword -c -A oceanbase"
METRICS_FILE="/tmp/ob_metrics_$(date +"%Y%m%d_%H%M%S").log"

# 收集性能指标
echo "收集性能指标..."
echo "$(date +"%Y-%m-%d %H:%M:%S")" > $METRICS_FILE

# QPS/TPS
$OB_CLIENT -e "SELECT stat_id, value FROM oceanbase.GV$OB_TENANT_STAT WHERE tenant_id = 1001 AND stat_id IN ('qps', 'tps')" >> $METRICS_FILE

# 响应时间
$OB_CLIENT -e "SELECT stat_id, value FROM oceanbase.GV$OB_TENANT_STAT WHERE tenant_id = 1001 AND stat_id = 'avg_exec_time'" >> $METRICS_FILE

# CPU/内存使用率
$OB_CLIENT -e "SELECT stat_id, value FROM oceanbase.GV$OB_SERVER_STAT WHERE stat_id IN ('cpu_total', 'mem_total')" >> $METRICS_FILE

# 连接数
$OB_CLIENT -e "SELECT count(*) FROM oceanbase.GV$OB_SESSIONS WHERE tenant_id = 1001" >> $METRICS_FILE

echo "性能指标已保存到:$METRICS_FILE"

3. 维护脚本

自动合并脚本

bash
#!/bin/bash
# 自动执行 OceanBase 集群合并

# 配置信息
OB_CLIENT="obclient -h127.0.0.1 -P2883 -uroot -ppassword -c -A oceanbase"

# 执行合并
echo "开始执行合并..."
$OB_CLIENT -e "ALTER SYSTEM MAJOR FREEZE;"

# 等待合并完成
echo "等待合并完成..."
sleep 300

# 检查合并状态
MERGE_STATUS=$($OB_CLIENT -e "SELECT status FROM oceanbase.GV$OB_MERGE_STATUS LIMIT 1" | grep -v "status")

if [ "$MERGE_STATUS" = "IDLE" ]; then
    echo "合并完成"
else
    echo "合并未完成,当前状态:$MERGE_STATUS"
    exit 1
fi

日志清理脚本

bash
#!/bin/bash
# 清理 OceanBase 日志文件

# 配置信息
LOG_DIR="/home/admin/oceanbase/log"
KEEP_DAYS=7

# 清理 OBServer 日志
echo "清理 OBServer 日志..."
find $LOG_DIR -name "observer.log.*" -mtime +$KEEP_DAYS -exec rm -f {} \;

# 清理审计日志
echo "清理审计日志..."
find $LOG_DIR -name "audit.log.*" -mtime +$KEEP_DAYS -exec rm -f {} \;

# 清理 trace 日志
echo "清理 trace 日志..."
find $LOG_DIR -name "trace.log.*" -mtime +$KEEP_DAYS -exec rm -f {} \;

# 清理 Paxos 日志
echo "清理 Paxos 日志..."
find $LOG_DIR -name "paxos.log.*" -mtime +$KEEP_DAYS -exec rm -f {} \;

echo "日志清理完成"

工具与脚本最佳实践

1. 工具选择原则

根据需求选择工具

  • 部署场景:选择 OBD 或 OCP
  • 监控需求:选择 OCP 或 Prometheus + Grafana
  • 诊断需求:选择 obdiag
  • 备份恢复:选择内置命令或自动化脚本

考虑工具成熟度

  • 优先选择官方工具
  • 评估社区工具的稳定性和活跃度
  • 测试工具的兼容性

2. 脚本开发最佳实践

脚本设计原则

  • 模块化设计:将功能拆分为多个模块
  • 参数化配置:使用配置文件或命令行参数
  • 错误处理:添加错误检查和处理
  • 日志记录:记录脚本执行过程
  • 注释完善:添加详细的注释

脚本测试

  • 在测试环境中测试脚本
  • 模拟各种场景
  • 验证脚本的可靠性
  • 测试边界条件

脚本维护

  • 定期更新脚本
  • 修复已知问题
  • 添加新功能
  • 文档更新

3. 工具与脚本管理

版本管理

  • 使用版本控制系统管理脚本
  • 记录脚本变更历史
  • 支持回滚到之前的版本

权限管理

  • 设置合理的文件权限
  • 限制脚本的执行权限
  • 敏感信息加密存储

执行管理

  • 使用定时任务执行脚本
  • 监控脚本执行状态
  • 配置脚本执行告警

工具与脚本案例

案例一:使用 OBD 快速部署集群

需求分析

  • 快速部署一个 OceanBase 测试集群
  • 包含 3 个节点
  • 支持多租户

实施步骤

  1. 准备配置文件

    yaml
    user: admin
    oceanbase-ce:
      servers:
        - name: server1
          ip: 10.0.0.1
        - name: server2
          ip: 10.0.0.2
        - name: server3
          ip: 10.0.0.3
      global:
        home_path: /home/admin/oceanbase
        cluster_id: 1
        zone_list: zone1,zone2,zone3
        observer_port: 2881
        rpc_port: 2882
        mysql_port: 2883
        devname: eth0
        cluster_name: obcluster
        root_password: password
        proxyro_password: password
  2. 部署集群

    bash
    obd cluster deploy obcluster -c config.yaml
  3. 启动集群

    bash
    obd cluster start obcluster
  4. 验证集群状态

    bash
    obd cluster status obcluster

案例二:使用自动化脚本进行备份

需求分析

  • 每天自动备份 OceanBase 租户
  • 保留 7 天的备份
  • 备份完成后发送通知

实施步骤

  1. 编写备份脚本

    • 参考前面的自动备份脚本
    • 添加通知功能
  2. 配置定时任务

    bash
    # 每天凌晨 2 点执行备份
    0 2 * * * /home/admin/scripts/ob_backup.sh >> /home/admin/logs/ob_backup.log 2>&1
  3. 测试脚本

    bash
    /home/admin/scripts/ob_backup.sh
  4. 验证备份结果

    bash
    ls -la /backup/oceanbase/

常见问题及解决方案

1. 工具版本兼容性问题

问题描述

  • 工具版本与 OceanBase 版本不兼容
  • 导致工具无法正常使用

解决方案

  • 查看工具的版本兼容性说明
  • 选择与 OceanBase 版本兼容的工具版本
  • 升级或降级工具版本

2. 脚本执行权限问题

问题描述

  • 脚本没有执行权限
  • 导致脚本无法执行

解决方案

  • 为脚本添加执行权限:chmod +x script.sh
  • 检查脚本的所有者和所属组
  • 确保用户有执行脚本的权限

3. 配置文件错误

问题描述

  • 工具配置文件格式错误
  • 导致工具无法正常启动

解决方案

  • 检查配置文件的格式
  • 验证配置文件的语法
  • 参考官方文档的配置示例

4. 工具执行超时

问题描述

  • 工具执行时间过长
  • 导致工具超时退出

解决方案

  • 调整工具的超时参数
  • 优化工具的执行效率
  • 增加系统资源

常见问题(FAQ)

Q1: OceanBase 有哪些官方工具?

A1: OceanBase 官方工具包括:

  • OBD(OceanBase Deployer):部署和管理工具
  • OCP(OceanBase Cloud Platform):企业级管理平台
  • obdiag:诊断工具
  • 内置 SQL 命令行工具

Q2: 如何选择合适的 OceanBase 工具?

A2: 选择 OceanBase 工具的原则:

  • 根据需求选择工具类型(部署、监控、诊断等)
  • 考虑工具的成熟度和稳定性
  • 评估工具的兼容性
  • 考虑团队的使用习惯

Q3: 如何编写可靠的 OceanBase 运维脚本?

A3: 编写可靠的 OceanBase 运维脚本的建议:

  • 遵循模块化设计原则
  • 添加完善的错误处理
  • 记录详细的日志
  • 参数化配置
  • 充分测试

Q4: 如何管理 OceanBase 工具与脚本?

A4: 管理 OceanBase 工具与脚本的方法:

  • 使用版本控制系统管理脚本
  • 建立工具与脚本的文档
  • 定期更新和维护
  • 配置合理的权限

Q5: 如何解决工具与 OceanBase 版本不兼容问题?

A5: 解决工具与 OceanBase 版本不兼容问题的方法:

  • 查看工具的版本兼容性说明
  • 选择兼容的工具版本
  • 升级或降级工具
  • 联系官方支持

Q6: 如何自动化 OceanBase 运维任务?

A6: 自动化 OceanBase 运维任务的方法:

  • 使用官方工具的自动化功能
  • 编写自定义脚本
  • 结合调度工具(如 crontab)
  • 使用自动化运维平台

Q7: 如何监控 OceanBase 工具的执行状态?

A7: 监控 OceanBase 工具执行状态的方法:

  • 配置工具的日志记录
  • 使用监控工具监控工具进程
  • 配置执行结果告警
  • 定期检查工具执行日志

Q8: 如何获取 OceanBase 工具的帮助?

A8: 获取 OceanBase 工具帮助的方法:

  • 查看工具的官方文档
  • 使用工具的 --help 参数
  • 参加官方培训
  • 加入社区讨论组