外观
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: password2. 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_report3. OCP(OceanBase Cloud Platform)
工具简介
- OceanBase 企业级管理平台
- 提供可视化管理界面
- 支持多集群管理
- 集成监控、告警、备份、恢复等功能
主要功能
- 集群管理:部署、扩容、缩容、升级
- 租户管理:创建、配置、监控租户
- 监控告警:实时监控和告警
- 备份恢复:自动化备份和恢复
- 性能诊断:性能分析和优化
- 安全管理:权限管理和审计
使用方式
- 登录 OCP 管理界面
- 通过 Web 界面进行操作
- 支持 REST API 集成
- 支持命令行工具
第三方常用工具
1. Prometheus + Grafana
工具简介
- 流行的开源监控解决方案
- Prometheus 负责数据采集
- Grafana 负责数据可视化
- 支持丰富的监控指标
配置方法
部署 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部署 Grafana:
- 安装 Grafana
- 添加 Prometheus 数据源
- 导入 OceanBase 监控模板
配置告警规则:
yamlgroups: - 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 refresh3. 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
fi2. 监控脚本
集群状态检查脚本
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 个节点
- 支持多租户
实施步骤
准备配置文件:
yamluser: 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部署集群:
bashobd cluster deploy obcluster -c config.yaml启动集群:
bashobd cluster start obcluster验证集群状态:
bashobd cluster status obcluster
案例二:使用自动化脚本进行备份
需求分析
- 每天自动备份 OceanBase 租户
- 保留 7 天的备份
- 备份完成后发送通知
实施步骤
编写备份脚本:
- 参考前面的自动备份脚本
- 添加通知功能
配置定时任务:
bash# 每天凌晨 2 点执行备份 0 2 * * * /home/admin/scripts/ob_backup.sh >> /home/admin/logs/ob_backup.log 2>&1测试脚本:
bash/home/admin/scripts/ob_backup.sh验证备份结果:
bashls -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 参数
- 参加官方培训
- 加入社区讨论组
