1. 首页 > 国产数据库教程 > OceanBase教程 > 正文

OceanBase教程FG174-OceanBase集群健康检查

本文档风哥主要介绍OceanBase数据库集群的健康检查方法,包括集群状态检查、节点状态检查、资源使用情况检查等。风哥教程参考OceanBase官方文档OceanBase集群管理手册、OceanBase监控管理手册等。

通过本文的学习,您将了解如何定期检查OceanBase集群的健康状态,及时发现和解决潜在问题。

目录大纲

Part01-基础概念与理论知识

1.1 集群健康检查基本概念

集群健康检查是指定期对OceanBase集群的运行状态、资源使用情况、数据一致性等进行检查,以确保集群的稳定运行。具有以下特点:

  • 全面性:覆盖集群的各个方面,包括节点状态、资源使用、数据一致性等
  • 及时性:及时发现潜在问题,避免问题扩大
  • 预防性:通过定期检查,预防问题的发生
  • 可操作性:检查结果可以指导运维人员进行相应的操作

1.2 集群健康检查内容

OceanBase集群健康检查的主要内容包括:

  • 集群状态检查:检查集群是否正常运行,是否有异常节点
  • 节点状态检查:检查每个节点的运行状态,包括CPU、内存、磁盘等
  • 资源使用情况检查:检查集群的资源使用情况,包括CPU使用率、内存使用率、磁盘使用率等
  • 数据一致性检查:检查集群中的数据是否一致
  • 性能检查:检查集群的性能指标,如响应时间、吞吐量等
  • 告警检查:检查集群的告警情况,及时处理告警

1.3 集群健康检查频率

集群健康检查的频率建议:

  • 日常检查:每天进行一次基本检查,包括集群状态、节点状态、资源使用情况等
  • 周检查:每周进行一次全面检查,包括数据一致性、性能指标等
  • 月检查:每月进行一次深度检查,包括系统参数、配置文件等
  • 特殊情况检查:在系统升级、配置变更等特殊情况下,进行额外的检查

风哥提示:集群健康检查是确保OceanBase集群稳定运行的重要手段,需要定期进行

Part02-生产环境规划与建议

2.1 健康检查规划

健康检查规划的建议:

  • 制定检查计划:根据集群的规模和重要性,制定合理的检查计划
  • 明确检查内容:明确每次检查的具体内容和标准
  • 分配检查人员:指定专人负责健康检查工作
  • 建立检查记录:建立健康检查记录,便于跟踪集群状态变化
  • 制定应急预案:针对检查中发现的问题,制定相应的应急预案

2.2 健康检查工具选择

健康检查工具的选择:

  • OceanBase内置工具:如obclient、obdiag等
  • 监控系统:如Prometheus、Grafana等
  • 自定义脚本:根据实际需求编写自定义检查脚本
  • 第三方工具:如Zabbix、Nagios等
,风哥提示:。

Part03-生产环境项目实施方案

3.1 集群状态检查

集群状态检查的方法:

# 1. 查看集群状态

obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_CLUSTERS;"
                    

+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
| CLUSTER_NAME | CREATE_TIME | MODIFY_TIME | STATUS | TENANT_MODE | PRIMARY_ZONE | ZONE_LIST | SERVER_LIST | READONLY_ZONE_LIST | LOG_LEVEL |
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
| obcluster | 2026-04-01 10:00:00.000000 | 2026-04-01 10:00:00.000000 | NORMAL | COMPATIBLE | zone1 | zone1,zone2,zone3 | 192.168.1.1:2881,192.168.1.2:2881,192.168.1.3:2881 | NULL | INFO |
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+

# 2. 查看租户状态

obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_TENANTS;"
                    

+———–+————-+————-+————-+—————————-+—————————-+————-+———-+————–+——————-+—————-+—————+
| TENANT_ID | TENANT_NAME | TENANT_TYPE | PRIMARY_ZONE | CREATE_TIME | MODIFY_TIME | LOCALITY | STATUS | COMPATIBILITY_MODE | DISK_USAGE_PERCENT | LOG_DISK_USAGE_PERCENT | SWAP_DISK_USAGE_PERCENT |
+———–+————-+————-+————-+—————————-+—————————-+————-+———-+————–+——————-+—————-+—————+
| 1 | sys | SYS | zone1 | 2026-04-01 10:00:00.000000 | 2026-04-01 10:00:00.000000 | FULL{1}@zone1 | NORMAL | MYSQL | 0.1 | 0.1 | 0.0 |
| 1001 | fgedudb | USER | zone1 | 2026-04-01 10:00:00.000000 | 2026-04-01 10:00:00.000000 | FULL{1}@zone1,zone2,zone3 | NORMAL | MYSQL | 10.0 | 5.0 | 0.0 |,学习交流加群风哥微信: itpux-com。
+———–+————-+————-+————-+—————————-+—————————-+————-+———-+————–+——————-+—————-+—————+

3.2 节点状态检查

节点状态检查的方法:

# 1. 查看节点状态

obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_SERVERS;"
                    

+—————-+———-+—————+——–+—————————-+—————————-+——–+————————+——————-+——————-+——–+
| SVR_IP | SVR_PORT | ZONE | STATUS | START_SERVICE_TIME | STOP_TIME | SQL_PORT | WITH_ROOTSERVICE | BLOCK_MIGRATE_IN | BLOCK_MIGRATE_OUT | ROLE |
+—————-+———-+—————+——–+—————————-+—————————-+——–+————————+——————-+——————-+——–+
| 192.168.1.1 | 2882 | zone1 | ACTIVE | 2026-04-01 10:00:00.000000 | NULL | 2881 | TRUE | FALSE | FALSE | LEADER |
| 192.168.1.2 | 2882 | zone2 | ACTIVE | 2026-04-01 10:00:00.000000 | NULL | 2881 | FALSE | FALSE | FALSE | FOLLOWER |
| 192.168.1.3 | 2882 | zone3 | ACTIVE | 2026-04-01 10:00:00.000000 | NULL | 2881 | FALSE | FALSE | FALSE | FOLLOWER |
+—————-+———-+—————+——–+—————————-+—————————-+——–+————————+——————-+——————-+——–+

# 2. 查看节点资源使用情况

obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.V$OB_SERVERS;"
                    

+—————-+———-+——-+———-+————–+—————+—————+—————+—————+—————+—————+—————+—————+
| SVR_IP | SVR_PORT | ZONE | CPU_COUNT | CPU_CAPACITY | CPU_USAGE | MEM_CAPACITY | MEM_USAGE | DISK_CAPACITY | DISK_USAGE | LOG_DISK_CAPACITY | LOG_DISK_USAGE | STATUS |
+—————-+———-+——-+———-+————–+—————+—————+—————+—————+—————+—————+—————+—————+
| 192.168.1.1 | 2882 | zone1 | 8 | 8 | 25.5 | 64424509440 | 38654705664 | 1099511627776 | 109951162778 | 549755813888 | 27487790694 | ACTIVE |
| 192.168.1.2 | 2882 | zone2 | 8 | 8 | 20.3 | 64424509440 | 32212254720 | 1099511627776 | 109951162778 | 549755813888 | 27487790694 | ACTIVE |
| 192.168.1.3 | 2882 | zone3 | 8 | 8 | 18.7 | 64424509440 | 32212254720 | 1099511627776 | 109951162778 | 549755813888 | 27487790694 | ACTIVE |
+—————-+———-+——-+———-+————–+—————+—————+—————+—————+—————+—————+—————+—————+

3.3 资源使用情况检查

,学习交流加群风哥QQ113257174。

资源使用情况检查的方法:

# 1. 查看集群资源使用情况

obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.V$OB_SYSSTAT WHERE name LIKE '%usage%' ORDER BY value DESC LIMIT 10;"
                    

+——————+———-+—————-+—————-+
| NAME | VALUE | STATISTIC# | CLASS |
+——————+———-+—————-+—————-+
| cpu_usage | 25.5 | 1 | 1 |
| memory_usage | 60.2 | 2 | 1 |
| disk_usage | 10.0 | 3 | 1 |
| log_disk_usage | 5.0 | 4 | 1 |
+——————+———-+—————-+—————-+

# 2. 查看租户资源使用情况

obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.GV$OB_TENANT_MEMORY WHERE tenant_id = 1001;"
                    

+———–+—————-+———-+—————+—————+—————+—————+—————+—————+—————+
| TENANT_ID | SVR_IP | SVR_PORT | TOTAL_MEMORY | USED_MEMORY | FREE_MEMORY | HOLD_MEMORY | FREEZE_TRIGGER | TOTAL_MEMORY_USED | MEMORY_LIMIT |
+———–+—————-+———-+—————+—————+—————+—————+—————+—————+—————+
| 1001 | 192.168.1.1 | 2882 | 10737418240 | 5368709120 | 5368709120 | 5368709120 | 8589934592 | 50.0 | 10737418240 |
| 1001 | 192.168.1.2 | 2882 | 10737418240 | 5368709120 | 5368709120 | 5368709120 | 8589934592 | 50.0 | 10737418240 |
| 1001 | 192.168.1.3 | 2882 | 10737418240 | 5368709120 | 5368709120 | 5368709120 | 8589934592 | 50.0 | 10737418240 |
+———–+—————-+———-+—————+—————+—————+—————+—————+—————+—————+

3.4 数据一致性检查

数据一致性检查的方法:

# 1. 查看分区状态

,更多视频教程www.fgedu.net.cn。

obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_PARTITIONS WHERE table_name = 'fgedu_order' LIMIT 10;"
                    

+———–+————+————-+————–+—————-+—————+————-+————-+—————-+—————-+
| TABLE_ID | PARTITION_ID | PARTITION_NAME | STATUS | TENANT_ID | TABLE_NAME | TABLET_ID | ZONE | SVR_IP | SVR_PORT |
+———–+————+————-+————–+—————-+—————+————-+————-+—————-+—————-+
| 1001 | 1 | p0 | NORMAL | 1001 | fgedu_order | 100101 | zone1 | 192.168.1.1 | 2882 |
| 1001 | 1 | p0 | NORMAL | 1001 | fgedu_order | 100102 | zone2 | 192.168.1.2 | 2882 |
| 1001 | 1 | p0 | NORMAL | 1001 | fgedu_order | 100103 | zone3 | 192.168.1.3 | 2882 |
+———–+————+————-+————–+—————-+—————+————-+————-+—————-+—————-+

# 2. 查看复制状态

obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.GV$OB_LOG_STAT ORDER BY svr_ip;"
                    

+—————-+———-+—————+—————+—————+—————+—————+—————+—————+—————+
| SVR_IP | SVR_PORT | TENANT_ID | LS_ID | ROLE | STATUS | START_TS | END_TS | LOG_DISK_USAGE | LOG_DISK_LIMIT |
+—————-+———-+—————+—————+—————+—————+—————+—————+—————+—————+
| 192.168.1.1 | 2882 | 1001 | 1 | LEADER | NORMAL | 1000000 | 2000000 | 27487790694 | 549755813888 |
| 192.168.1.2 | 2882 | 1001 | 1 | FOLLOWER | NORMAL | 1000000 | 2000000 | 27487790694 | 549755813888 |
| 192.168.1.3 | 2882 | 1001 | 1 | FOLLOWER | NORMAL | 1000000 | 2000000 | 27487790694 | 549755813888 |
+—————-+———-+—————+—————+—————+—————+—————+—————+—————+—————+

Part04-生产案例与实战讲解

4.1 集群健康检查实战

集群健康检查的实战案例:

场景描述

某电商系统的OceanBase集群需要进行健康检查,确保系统的稳定运行。

,更多学习教程公众号风哥教程itpux_com。

实施步骤

  1. 检查集群状态
  2. 检查节点状态
  3. 检查资源使用情况
  4. 检查数据一致性
  5. 生成健康检查报告

# 1. 检查集群状态

obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_CLUSTERS;"
                    

+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
| CLUSTER_NAME | CREATE_TIME | MODIFY_TIME | STATUS | TENANT_MODE | PRIMARY_ZONE | ZONE_LIST | SERVER_LIST | READONLY_ZONE_LIST | LOG_LEVEL |
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
| obcluster | 2026-04-01 10:00:00.000000 | 2026-04-01 10:00:00.000000 | NORMAL | COMPATIBLE | zone1 | zone1,zone2,zone3 | 192.168.1.1:2881,192.168.1.2:2881,192.168.1.3:2881 | NULL | INFO |
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+

# 2. 检查节点状态

obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_SERVERS;"
                    

,from DB视频:www.itpux.com。
+—————-+———-+—————+——–+—————————-+—————————-+——–+————————+——————-+——————-+——–+
| SVR_IP | SVR_PORT | ZONE | STATUS | START_SERVICE_TIME | STOP_TIME | SQL_PORT | WITH_ROOTSERVICE | BLOCK_MIGRATE_IN | BLOCK_MIGRATE_OUT | ROLE |
+—————-+———-+—————+——–+—————————-+—————————-+——–+————————+——————-+——————-+——–+
| 192.168.1.1 | 2882 | zone1 | ACTIVE | 2026-04-01 10:00:00.000000 | NULL | 2881 | TRUE | FALSE | FALSE | LEADER |
| 192.168.1.2 | 2882 | zone2 | ACTIVE | 2026-04-01 10:00:00.000000 | NULL | 2881 | FALSE | FALSE | FALSE | FOLLOWER |
| 192.168.1.3 | 2882 | zone3 | ACTIVE | 2026-04-01 10:00:00.000000 | NULL | 2881 | FALSE | FALSE | FALSE | FOLLOWER |
+—————-+———-+—————+——–+—————————-+—————————-+——–+————————+——————-+——————-+——–+

# 3. 检查资源使用情况

obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.V$OB_SYSSTAT WHERE name LIKE '%usage%' ORDER BY value DESC LIMIT 10;"
                    

+——————+———-+—————-+—————-+
| NAME | VALUE | STATISTIC# | CLASS |
+——————+———-+—————-+—————-+
| cpu_usage | 25.5 | 1 | 1 |
| memory_usage | 60.2 | 2 | 1 |
| disk_usage | 10.0 | 3 | 1 |
| log_disk_usage | 5.0 | 4 | 1 |
+——————+———-+—————-+—————-+

# 4. 检查数据一致性

obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_PARTITIONS WHERE table_name = 'fgedu_order' LIMIT 10;"
                    

+———–+————+————-+————–+—————-+—————+————-+————-+—————-+—————-+
| TABLE_ID | PARTITION_ID | PARTITION_NAME | STATUS | TENANT_ID | TABLE_NAME | TABLET_ID | ZONE | SVR_IP | SVR_PORT |
+———–+————+————-+————–+—————-+—————+————-+————-+—————-+—————-+
| 1001 | 1 | p0 | NORMAL | 1001 | fgedu_order | 100101 | zone1 | 192.168.1.1 | 2882 |
| 1001 | 1 | p0 | NORMAL | 1001 | fgedu_order | 100102 | zone2 | 192.168.1.2 | 2882 |
| 1001 | 1 | p0 | NORMAL | 1001 | fgedu_order | 100103 | zone3 | 192.168.1.3 | 2882 |
+———–+————+————-+————–+—————-+—————+————-+————-+—————-+—————-+

# 5. 生成健康检查报告

#!/bin/bash
# health_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

echo "OceanBase集群健康检查报告"
echo "检查时间: $(date)"
echo "===================================="
echo "1. 集群状态"
obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_CLUSTERS;"
echo "===================================="
echo "2. 节点状态"
obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_SERVERS;"
echo "===================================="
echo "3. 资源使用情况"
obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.V$OB_SYSSTAT WHERE name LIKE '%usage%' ORDER BY value DESC LIMIT 10;"
echo "===================================="
echo "4. 数据一致性"
obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_PARTITIONS WHERE table_name = 'fgedu_order' LIMIT 10;"
echo "===================================="
                    

OceanBase集群健康检查报告
检查时间: 2026年04月09日 10:00:00
====================================
1. 集群状态
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
| CLUSTER_NAME | CREATE_TIME | MODIFY_TIME | STATUS | TENANT_MODE | PRIMARY_ZONE | ZONE_LIST | SERVER_LIST | READONLY_ZONE_LIST | LOG_LEVEL |
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
| obcluster | 2026-04-01 10:00:00.000000 | 2026-04-01 10:00:00.000000 | NORMAL | COMPATIBLE | zone1 | zone1,zone2,zone3 | 192.168.1.1:2881,192.168.1.2:2881,192.168.1.3:2881 | NULL | INFO |
+——————-+—————————-+—————————-+——————-+—————–+———-+——————-+—————+——————+—————+
====================================
2. 节点状态
+—————-+———-+—————+——–+—————————-+—————————-+——–+————————+——————-+——————-+——–+
| SVR_IP | SVR_PORT | ZONE | STATUS | START_SERVICE_TIME | STOP_TIME | SQL_PORT | WITH_ROOTSERVICE | BLOCK_MIGRATE_IN | BLOCK_MIGRATE_OUT | ROLE |
+—————-+———-+—————+——–+—————————-+—————————-+——–+————————+——————-+——————-+——–+
| 192.168.1.1 | 2882 | zone1 | ACTIVE | 2026-04-01 10:00:00.000000 | NULL | 2881 | TRUE | FALSE | FALSE | LEADER |
| 192.168.1.2 | 2882 | zone2 | ACTIVE | 2026-04-01 10:00:00.000000 | NULL | 2881 | FALSE | FALSE | FALSE | FOLLOWER |
| 192.168.1.3 | 2882 | zone3 | ACTIVE | 2026-04-01 10:00:00.000000 | NULL | 2881 | FALSE | FALSE | FALSE | FOLLOWER |
+—————-+———-+—————+——–+—————————-+—————————-+——–+————————+——————-+——————-+——–+
====================================
3. 资源使用情况
+——————+———-+—————-+—————-+
| NAME | VALUE | STATISTIC# | CLASS |
+——————+———-+—————-+—————-+
| cpu_usage | 25.5 | 1 | 1 |
| memory_usage | 60.2 | 2 | 1 |
| disk_usage | 10.0 | 3 | 1 |
| log_disk_usage | 5.0 | 4 | 1 |
+——————+———-+—————-+—————-+
====================================
4. 数据一致性
+———–+————+————-+————–+—————-+—————+————-+————-+—————-+—————-+
| TABLE_ID | PARTITION_ID | PARTITION_NAME | STATUS | TENANT_ID | TABLE_NAME | TABLET_ID | ZONE | SVR_IP | SVR_PORT |
+———–+————+————-+————–+—————-+—————+————-+————-+—————-+—————-+
| 1001 | 1 | p0 | NORMAL | 1001 | fgedu_order | 100101 | zone1 | 192.168.1.1 | 2882 |
| 1001 | 1 | p0 | NORMAL | 1001 | fgedu_order | 100102 | zone2 | 192.168.1.2 | 2882 |
| 1001 | 1 | p0 | NORMAL | 1001 | fgedu_order | 100103 | zone3 | 192.168.1.3 | 2882 |
+———–+————+————-+————–+—————-+—————+————-+————-+—————-+—————-+
====================================

4.2 健康检查自动化

健康检查自动化的实战案例:

场景描述

某电商系统的OceanBase集群需要实现健康检查的自动化,定期执行检查并生成报告。

实施步骤

  1. 编写健康检查脚本
  2. 设置定时任务
  3. 配置告警机制
  4. 查看检查结果

# 1. 编写健康检查脚本

#!/bin/bash
# auto_health_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# 检查时间
CHECK_TIME=$(date +"%Y-%m-%d %H:%M:%S")

# 检查结果存储目录
RESULT_DIR="/ob/app/health_check"
mkdir -p $RESULT_DIR

# 检查结果文件
RESULT_FILE="$RESULT_DIR/health_check_$(date +"%Y%m%d_%H%M%S").log"

# 写入检查时间
echo "OceanBase集群健康检查报告" > $RESULT_FILE
echo "检查时间: $CHECK_TIME" >> $RESULT_FILE
echo "====================================" >> $RESULT_FILE

# 检查集群状态
echo "1. 集群状态" >> $RESULT_FILE
obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_CLUSTERS;" >> $RESULT_FILE
echo "====================================" >> $RESULT_FILE

# 检查节点状态
echo "2. 节点状态" >> $RESULT_FILE
obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_SERVERS;" >> $RESULT_FILE
echo "====================================" >> $RESULT_FILE

# 检查资源使用情况
echo "3. 资源使用情况" >> $RESULT_FILE
obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.V$OB_SYSSTAT WHERE name LIKE '%usage%' ORDER BY value DESC LIMIT 10;" >> $RESULT_FILE
echo "====================================" >> $RESULT_FILE

# 检查数据一致性
echo "4. 数据一致性" >> $RESULT_FILE
obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.DBA_OB_PARTITIONS WHERE table_name = 'fgedu_order' LIMIT 10;" >> $RESULT_FILE
echo "====================================" >> $RESULT_FILE

# 检查告警
echo "5. 告警情况" >> $RESULT_FILE
obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.V$OB_ALERT_HISTORY ORDER BY timestamp DESC LIMIT 10;" >> $RESULT_FILE
echo "====================================" >> $RESULT_FILE

# 检查完成
echo "健康检查完成,结果已保存至: $RESULT_FILE" >> $RESULT_FILE

# 发送邮件通知(可选)
# mail -s "OceanBase集群健康检查报告" admin@fgedu.net.cn < $RESULT_FILE
                    

# 2. 设置定时任务

# 编辑crontab
crontab -e

# 添加定时任务,每天凌晨2点执行
0 2 * * * /ob/app/health_check/auto_health_check.sh
                    

# 3. 配置告警机制

#!/bin/bash
# check_alert.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# 检查告警
ALERTS=$(obclient -h192.168.1.1 -P2881 -ufgedu -pfgedu123 -Doceanbase -e "SELECT * FROM oceanbase.V$OB_ALERT_HISTORY WHERE severity = 'ERROR' AND timestamp > NOW() - INTERVAL 1 HOUR;")

# 如果有错误告警,则发送通知
if [ -n "$ALERTS" ]; then
    echo "发现错误告警:" > /tmp/alert_notice.txt
    echo "$ALERTS" >> /tmp/alert_notice.txt
    # 发送邮件通知
    # mail -s "OceanBase集群错误告警" admin@fgedu.net.cn < /tmp/alert_notice.txt
    echo "已发送错误告警通知" 
fi
                    

# 4. 查看检查结果

# 查看最新的健康检查报告
ls -l /ob/app/health_check/
cat /ob/app/health_check/health_check_$(date +"%Y%m%d")_*.log
                    

-rw-r--r-- 1 root root 2048 Apr 9 02:00 health_check_20260409_020000.log

OceanBase集群健康检查报告
检查时间: 2026-04-09 02:00:00
====================================
1. 集群状态
+-------------------+----------------------------+----------------------------+-------------------+-----------------+----------+-------------------+---------------+------------------+---------------+
| CLUSTER_NAME | CREATE_TIME | MODIFY_TIME | STATUS | TENANT_MODE | PRIMARY_ZONE | ZONE_LIST | SERVER_LIST | READONLY_ZONE_LIST | LOG_LEVEL |
+-------------------+----------------------------+----------------------------+-------------------+-----------------+----------+-------------------+---------------+------------------+---------------+
| obcluster | 2026-04-01 10:00:00.000000 | 2026-04-01 10:00:00.000000 | NORMAL | COMPATIBLE | zone1 | zone1,zone2,zone3 | 192.168.1.1:2881,192.168.1.2:2881,192.168.1.3:2881 | NULL | INFO |
+-------------------+----------------------------+----------------------------+-------------------+-----------------+----------+-------------------+---------------+------------------+---------------+
====================================
2. 节点状态
+----------------+----------+---------------+--------+----------------------------+----------------------------+--------+------------------------+-------------------+-------------------+--------+
| SVR_IP | SVR_PORT | ZONE | STATUS | START_SERVICE_TIME | STOP_TIME | SQL_PORT | WITH_ROOTSERVICE | BLOCK_MIGRATE_IN | BLOCK_MIGRATE_OUT | ROLE |
+----------------+----------+---------------+--------+----------------------------+----------------------------+--------+------------------------+-------------------+-------------------+--------+
| 192.168.1.1 | 2882 | zone1 | ACTIVE | 2026-04-01 10:00:00.000000 | NULL | 2881 | TRUE | FALSE | FALSE | LEADER |
| 192.168.1.2 | 2882 | zone2 | ACTIVE | 2026-04-01 10:00:00.000000 | NULL | 2881 | FALSE | FALSE | FALSE | FOLLOWER |
| 192.168.1.3 | 2882 | zone3 | ACTIVE | 2026-04-01 10:00:00.000000 | NULL | 2881 | FALSE | FALSE | FALSE | FOLLOWER |
+----------------+----------+---------------+--------+----------------------------+----------------------------+--------+------------------------+-------------------+-------------------+--------+
====================================
3. 资源使用情况
+------------------+----------+----------------+----------------+
| NAME | VALUE | STATISTIC# | CLASS |
+------------------+----------+----------------+----------------+
| cpu_usage | 25.5 | 1 | 1 |
| memory_usage | 60.2 | 2 | 1 |
| disk_usage | 10.0 | 3 | 1 |
| log_disk_usage | 5.0 | 4 | 1 |
+------------------+----------+----------------+----------------+
====================================
4. 数据一致性
+-----------+------------+-------------+--------------+----------------+---------------+-------------+-------------+----------------+----------------+
| TABLE_ID | PARTITION_ID | PARTITION_NAME | STATUS | TENANT_ID | TABLE_NAME | TABLET_ID | ZONE | SVR_IP | SVR_PORT |
+-----------+------------+-------------+--------------+----------------+---------------+-------------+-------------+----------------+----------------+
| 1001 | 1 | p0 | NORMAL | 1001 | fgedu_order | 100101 | zone1 | 192.168.1.1 | 2882 |
| 1001 | 1 | p0 | NORMAL | 1001 | fgedu_order | 100102 | zone2 | 192.168.1.2 | 2882 |
| 1001 | 1 | p0 | NORMAL | 1001 | fgedu_order | 100103 | zone3 | 192.168.1.3 | 2882 |
+-----------+------------+-------------+--------------+----------------+---------------+-------------+-------------+----------------+----------------+
====================================
5. 告警情况
Empty set (0.00 sec)
====================================
健康检查完成,结果已保存至: /ob/app/health_check/health_check_20260409_020000.log

Part05-风哥经验总结与分享

5.1 集群健康检查最佳实践

OceanBase集群健康检查的最佳实践:

  • 定期检查:制定定期检查计划,确保集群的稳定运行
  • 全面检查:覆盖集群的各个方面,包括节点状态、资源使用、数据一致性等
  • 自动化检查:使用脚本自动化健康检查过程,提高效率
  • 及时处理:对检查中发现的问题,及时进行处理
  • 建立基线:建立集群的性能基线,便于对比分析
  • 文档记录:记录健康检查结果,便于跟踪集群状态变化

5.2 常见问题与解决方案

集群健康检查中常见的问题与解决方案:

# 1. 节点状态异常
- 症状:节点状态不是ACTIVE
- 解决方案:检查节点日志,重启节点

# 2. 资源使用率过高
- 症状:CPU、内存或磁盘使用率超过阈值
- 解决方案:优化查询,增加资源配置

# 3. 数据不一致
- 症状:分区状态异常
- 解决方案:检查复制状态,修复数据一致性

# 4. 告警过多
- 症状:系统产生过多的告警
- 解决方案:调整告警阈值,减少误报

# 5. 检查脚本执行失败
- 症状:健康检查脚本执行失败
- 解决方案:检查脚本语法,确保权限正确
                

风哥提示:集群健康检查是确保OceanBase集群稳定运行的重要手段,需要定期进行并及时处理发现的问题

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息