OceanBase教程FG133-OceanBase日常巡检与健康检查
本文档风哥主要介绍OceanBase日常巡检与健康检查,包括日常巡检的概念与意义、健康检查的概念与意义、巡检与健康检查流程、巡检规划、健康检查规划、巡检与健康检查策略、日常巡检实施方案、健康检查实施方案、巡检与健康检查自动化、实战案例等内容,风哥教程参考OceanBase官方文档日常巡检、健康检查等内容编写,适合DBA人员和运维工程师在学习和工作中使用。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 日常巡检的概念与意义
日常巡检是指定期对系统进行检查,发现和解决潜在问题的过程。日常巡检的意义包括:
- 及时发现问题:及时发现系统中的潜在问题,避免问题扩大
- 预防故障:通过巡检,预防系统故障的发生
- 提高系统稳定性:定期检查和维护,提高系统的稳定性
- 延长系统寿命:通过定期维护,延长系统的使用寿命
- 保障业务连续性:确保系统的正常运行,保障业务的连续性
1.2 健康检查的概念与意义
健康检查是指对系统的健康状态进行评估,确保系统正常运行的过程。健康检查的意义包括:
- 评估系统状态:评估系统的健康状态,了解系统的运行情况
- 发现潜在问题:发现系统中的潜在问题,及时处理
- 确保系统性能:确保系统的性能满足业务需求
- 保障数据安全:确保数据的安全性和完整性
- 符合合规要求:满足行业和法规的合规要求
1.3 巡检与健康检查流程
巡检与健康检查流程包括:
- 准备阶段:制定巡检计划,准备巡检工具和脚本
- 执行阶段:按照巡检计划执行巡检,收集数据
- 分析阶段:分析巡检数据,发现问题
- 处理阶段:处理发现的问题,采取措施解决
- 记录阶段:记录巡检结果,形成巡检报告
- 改进阶段:根据巡检结果,改进巡检计划和方法
Part02-生产环境规划与建议
2.1 巡检规划
巡检规划的考虑因素:
- 巡检频率:确定巡检的频率,如每日、每周、每月等
- 巡检内容:确定巡检的内容,如系统状态、数据库状态、网络状态等
- 巡检工具:选择合适的巡检工具,如脚本、监控系统等
- 巡检人员:确定巡检人员,明确责任分工
- 巡检报告:制定巡检报告的格式和内容
推荐的巡检规划:
- 每日巡检:检查系统状态、数据库状态、网络状态等
- 每周巡检:检查系统日志、数据库日志、性能指标等
- 每月巡检:检查系统配置、数据库配置、安全状态等
- 季度巡检:检查系统备份、灾难恢复、性能优化等
2.2 健康检查规划
健康检查规划的考虑因素:
- 检查频率:确定健康检查的频率,如每日、每周、每月等
- 检查内容:确定健康检查的内容,如系统健康状态、数据库健康状态、网络健康状态等
- 检查工具:选择合适的健康检查工具,如监控系统、健康检查脚本等
- 检查标准:制定健康检查的标准,如性能指标、安全指标等
- 检查报告:制定健康检查报告的格式和内容
,风哥提示:。
推荐的健康检查规划:
- 每日健康检查:检查系统运行状态、数据库连接状态、网络连接状态等
- 每周健康检查:检查系统性能、数据库性能、网络性能等
- 每月健康检查:检查系统安全、数据库安全、网络安全等
- 季度健康检查:检查系统整体健康状态、数据库整体健康状态、网络整体健康状态等
2.3 巡检与健康检查策略
巡检与健康检查策略的内容包括:
- 全面巡检:对系统的各个方面进行全面巡检
- 重点巡检:对系统的关键部分进行重点巡检
- 定期巡检:按照规定的频率进行定期巡检
- 实时监控:对系统进行实时监控,及时发现问题
- 自动化巡检:使用自动化工具进行巡检,提高效率
推荐的巡检与健康检查策略:
- 结合监控系统:使用监控系统进行实时监控,结合定期巡检
- 自动化巡检:使用自动化脚本进行巡检,提高效率
- 分级巡检:根据系统的重要性,进行分级巡检
- 持续改进:根据巡检结果,持续改进巡检策略
,学习交流加群风哥微信: itpux-com。
Part03-生产环境项目实施方案
3.1 日常巡检实施方案
3.1.1 日常巡检实施步骤
## 1. 环境准备
– 配置OceanBase数据库:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “CREATE DATABASE fgedudb;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “CREATE USER fgedu IDENTIFIED BY ‘password’;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “GRANT ALL PRIVILEGES ON fgedudb.* TO fgedu;”
## 2. 日常巡检脚本
– 创建每日巡检脚本:
$ cat > /ob/scripts/daily_check.sh << 'EOF'
#!/bin/bash
# daily_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 检查服务器状态
check_server() {
echo "=== 服务器状态检查 ==="
echo "主机名:$(hostname)"
echo "系统时间:$(date)"
echo "系统负载:$(uptime)"
echo "内存使用:"
free -h
echo "磁盘使用:"
df -h
echo "CPU使用:"
top -b -n 1 | head -10
}
# 检查网络状态
check_network() {
echo "\n=== 网络状态检查 ===",学习交流加群风哥QQ113257174。
echo "网络接口:"
ifconfig
echo "网络连接:"
netstat -an | grep ESTABLISHED | wc -l
echo "网络延迟:"
ping -c 3 8.8.8.8
}
# 检查OceanBase状态
check_ob() {
echo "\n=== OceanBase状态检查 ==="
echo "OceanBase版本:"
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SELECT version();"
echo "OceanBase状态:"
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW STATUS LIKE 'ob_server_status';"
echo "OceanBase会话:"
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW PROCESSLIST;"
echo "OceanBase资源使用:"
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW GLOBAL STATUS LIKE 'ob_%';"
}
# 检查数据库状态
check_db() {
echo "\n=== 数据库状态检查 ==="
echo "数据库列表:"
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW DATABASES;"
echo "表空间使用:"
obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "SHOW TABLE STATUS;"
echo "索引状态:"
obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "SHOW INDEX FROM fgedu_order;"
}
# 检查日志
check_logs() {
echo "\n=== 日志检查 ==="
echo "OceanBase错误日志:"
tail -n 50 /ob/log/observer.log | grep -i error
echo "系统日志:"
tail -n 50 /var/log/messages
},更多视频教程www.fgedu.net.cn。
# 主函数
main() {
check_server
check_network
check_ob
check_db
check_logs
echo "\n=== 巡检完成 ==="
}
main
EOF
- 设置脚本权限:
$ chmod +x /ob/scripts/daily_check.sh
- 执行每日巡检:
$ /ob/scripts/daily_check.sh
## 3. 每周巡检脚本
- 创建每周巡检脚本:
$ cat > /ob/scripts/weekly_check.sh << 'EOF'
#!/bin/bash
# weekly_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 检查系统配置
check_system_config() {
echo "=== 系统配置检查 ==="
echo "内核参数:"
sysctl -p
echo "资源限制:"
ulimit -a
}
# 检查OceanBase配置
check_ob_config() {
echo "\n=== OceanBase配置检查 ===",更多学习教程公众号风哥教程itpux_com。
echo "OceanBase参数:"
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW GLOBAL VARIABLES;"
echo "OceanBase租户:"
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW TENANT;"
}
# 检查数据库性能
check_db_performance() {
echo "\n=== 数据库性能检查 ==="
echo "慢查询:"
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW GLOBAL STATUS LIKE 'Slow_queries';"
echo "查询缓存:"
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW GLOBAL STATUS LIKE 'Qcache%';"
echo "连接数:"
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW GLOBAL STATUS LIKE 'Connections';"
}
# 检查备份状态
check_backup() {
echo "\n=== 备份状态检查 ==="
echo "备份目录:"
ls -la /ob/backup
echo "备份文件:"
find /ob/backup -name "*.bak" | sort -r | head -10
}
# 主函数
main() {
check_system_config
check_ob_config,from DB视频:www.itpux.com。
check_db_performance
check_backup
echo "\n=== 周巡检完成 ==="
}
main
EOF
- 设置脚本权限:
$ chmod +x /ob/scripts/weekly_check.sh
- 执行每周巡检:
$ /ob/scripts/weekly_check.sh
## 4. 测试验证
- 执行每日巡检:
$ /ob/scripts/daily_check.sh
- 执行每周巡检:
$ /ob/scripts/weekly_check.sh
- 查看巡检报告:
$ cat /ob/log/daily_check.log
$ cat /ob/log/weekly_check.log
3.2 健康检查实施方案
3.2.1 健康检查实施步骤
## 1. 环境准备
– 配置OceanBase数据库:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “CREATE DATABASE fgedudb;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “CREATE USER fgedu IDENTIFIED BY ‘password’;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “GRANT ALL PRIVILEGES ON fgedudb.* TO fgedu;”
## 2. 健康检查脚本
– 创建健康检查脚本:
$ cat > /ob/scripts/health_check.sh << 'EOF'
#!/bin/bash
# health_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 检查系统健康状态
check_system_health() {
echo "=== 系统健康状态检查 ==="
echo "CPU使用率:"
cpu_usage=$(top -b -n 1 | grep "%Cpu(s)" | awk '{print $2 + $4}')
echo "$cpu_usage%"
if (( $(echo "$cpu_usage > 80″ | bc -l) )); then
echo “警告:CPU使用率过高”
fi
echo “内存使用率:”
mem_total=$(free -h | grep Mem | awk ‘{print $2}’)
mem_used=$(free -h | grep Mem | awk ‘{print $3}’)
mem_free=$(free -h | grep Mem | awk ‘{print $4}’)
echo “总内存:$mem_total,已用:$mem_used,可用:$mem_free”
echo “磁盘使用率:”
df -h | grep -v tmpfs
echo “系统负载:”
uptime
}
# 检查网络健康状态
check_network_health() {
echo “\n=== 网络健康状态检查 ===”
echo “网络接口状态:”
ifconfig | grep -E “(UP|RUNNING)”
echo “网络连接数:”
netstat -an | grep ESTABLISHED | wc -l
echo “网络延迟:”
ping -c 3 8.8.8.8
echo “网络丢包率:”
ping -c 10 8.8.8.8 | grep -E “(packet loss|rtt)”
}
# 检查OceanBase健康状态
check_ob_health() {
echo “\n=== OceanBase健康状态检查 ===”
echo “OceanBase状态:”
ob_status=$(obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW STATUS LIKE ‘ob_server_status’;” | grep ob_server_status | awk ‘{print $2}’)
echo “$ob_status”
if [ “$ob_status” != “ACTIVE” ]; then
echo “警告:OceanBase状态异常”
fi
echo “OceanBase会话数:”
ob_sessions=$(obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW PROCESSLIST;” | wc -l)
echo “$ob_sessions”
echo “OceanBase资源使用:”
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW GLOBAL STATUS LIKE ‘ob_%’;”
}
# 检查数据库健康状态
check_db_health() {
echo “\n=== 数据库健康状态检查 ===”
echo “数据库连接数:”
db_connections=$(obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW GLOBAL STATUS LIKE ‘Connections’;” | grep Connections | awk ‘{print $2}’)
echo “$db_connections”
echo “慢查询数:”
slow_queries=$(obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW GLOBAL STATUS LIKE ‘Slow_queries’;” | grep Slow_queries | awk ‘{print $2}’)
echo “$slow_queries”
if (( $slow_queries > 10 )); then
echo “警告:慢查询数过多”
fi
echo “表空间使用:”
obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SHOW TABLE STATUS;”
echo “索引状态:”
obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SHOW INDEX FROM fgedu_order;”
}
# 检查备份健康状态
check_backup_health() {
echo “\n=== 备份健康状态检查 ===”
echo “备份目录大小:”
du -sh /ob/backup
echo “最近备份文件:”
find /ob/backup -name “*.bak” -mtime -7 | sort -r
if [ $? -ne 0 ]; then
echo “警告:最近7天没有备份文件”
fi
echo “备份文件完整性:”
find /ob/backup -name “*.bak” -exec md5sum {} \;
}
# 主函数
main() {
check_system_health
check_network_health
check_ob_health
check_db_health
check_backup_health
echo “\n=== 健康检查完成 ===”
}
main
EOF
– 设置脚本权限:
$ chmod +x /ob/scripts/health_check.sh
– 执行健康检查:
$ /ob/scripts/health_check.sh
## 3. 健康检查报告
– 创建健康检查报告脚本:
$ cat > /ob/scripts/health_report.sh << 'EOF'
#!/bin/bash
# health_report.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 生成健康检查报告
generate_report() {
report_file="/ob/log/health_report_$(date +%Y%m%d).log"
echo "健康检查报告 - $(date)" > $report_file
echo “======================” >> $report_file
# 系统健康状态
echo “\n1. 系统健康状态” >> $report_file
echo “CPU使用率:” >> $report_file
top -b -n 1 | grep “%Cpu(s)” | awk ‘{print $2 + $4}’ >> $report_file
echo “内存使用率:” >> $report_file
free -h >> $report_file
echo “磁盘使用率:” >> $report_file
df -h >> $report_file
# 网络健康状态
echo “\n2. 网络健康状态” >> $report_file
echo “网络接口状态:” >> $report_file
ifconfig | grep -E “(UP|RUNNING)” >> $report_file
echo “网络连接数:” >> $report_file
netstat -an | grep ESTABLISHED | wc -l >> $report_file
# OceanBase健康状态
echo “\n3. OceanBase健康状态” >> $report_file
echo “OceanBase状态:” >> $report_file
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW STATUS LIKE ‘ob_server_status’;” >> $report_file
echo “OceanBase会话数:” >> $report_file
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW PROCESSLIST;” | wc -l >> $report_file
# 数据库健康状态
echo “\n4. 数据库健康状态” >> $report_file
echo “慢查询数:” >> $report_file
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW GLOBAL STATUS LIKE ‘Slow_queries’;” >> $report_file
echo “表空间使用:” >> $report_file
obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SHOW TABLE STATUS;” >> $report_file
# 备份健康状态
echo “\n5. 备份健康状态” >> $report_file
echo “最近备份文件:” >> $report_file
find /ob/backup -name “*.bak” -mtime -7 | sort -r >> $report_file
echo “\n======================” >> $report_file
echo “健康检查报告生成完成:$report_file”
}
# 主函数
main() {
generate_report
}
main
EOF
– 设置脚本权限:
$ chmod +x /ob/scripts/health_report.sh
– 生成健康检查报告:
$ /ob/scripts/health_report.sh
## 4. 测试验证
– 执行健康检查:
$ /ob/scripts/health_check.sh
– 生成健康检查报告:
$ /ob/scripts/health_report.sh
– 查看健康检查报告:
$ cat /ob/log/health_report_$(date +%Y%m%d).log
3.3 巡检与健康检查自动化
3.3.1 巡检与健康检查自动化实施步骤
## 1. 环境准备
– 安装Ansible:
$ yum install -y ansible
– 配置Ansible主机清单:
$ cat > /etc/ansible/hosts << 'EOF'
[oceanbase]
192.168.1.10
192.168.1.11
192.168.1.12
EOF
- 配置Ansible免密登录:
$ ssh-keygen -t rsa
$ ssh-copy-id root@192.168.1.10
$ ssh-copy-id root@192.168.1.11
$ ssh-copy-id root@192.168.1.12
## 2. 自动化巡检脚本
- 创建Ansible巡检Playbook:
$ cat > /ob/ansible/inspection.yml << 'EOF'
---
- hosts: oceanbase
gather_facts: yes
tasks:
- name: 执行每日巡检
script: /ob/scripts/daily_check.sh
register: daily_check_result
- name: 保存每日巡检结果
copy:
content: "{{ daily_check_result.stdout }}"
dest: "/ob/log/daily_check_{{ inventory_hostname }}_{{ ansible_date_time.date }}.log"
- name: 执行健康检查
script: /ob/scripts/health_check.sh
register: health_check_result
- name: 保存健康检查结果
copy:
content: "{{ health_check_result.stdout }}"
dest: "/ob/log/health_check_{{ inventory_hostname }}_{{ ansible_date_time.date }}.log"
EOF
- 执行Ansible巡检:
$ ansible-playbook /ob/ansible/inspection.yml
## 3. 定时任务配置
- 配置crontab:
$ crontab -e
# 每日巡检
0 8 * * * /ob/scripts/daily_check.sh > /ob/log/daily_check.log 2>&1
# 每周巡检
0 9 * * 0 /ob/scripts/weekly_check.sh > /ob/log/weekly_check.log 2>&1
# 健康检查
0 10 * * * /ob/scripts/health_check.sh > /ob/log/health_check.log 2>&1
# 生成健康检查报告
0 11 * * * /ob/scripts/health_report.sh
# Ansible巡检
0 12 * * * ansible-playbook /ob/ansible/inspection.yml
## 4. 监控集成
– 配置Prometheus和Grafana:
– 安装Prometheus和Grafana:
$ wget https://github.com/prometheus/prometheus/releases/download/v2.40.0/prometheus-2.40.0.linux-amd64.tar.gz
$ tar -xzf prometheus-2.40.0.linux-amd64.tar.gz
$ mv prometheus-2.40.0.linux-amd64 /ob/prometheus
$ wget https://github.com/grafana/grafana/releases/download/v9.3.6/grafana-9.3.6.linux-amd64.tar.gz
$ tar -xzf grafana-9.3.6.linux-amd64.tar.gz
$ mv grafana-9.3.6.linux-amd64 /ob/grafana
– 配置Prometheus:
$ cat > /ob/prometheus/prometheus.yml << 'EOF'
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'oceanbase'
static_configs:
- targets: ['192.168.1.10:9100', '192.168.1.11:9100', '192.168.1.12:9100']
- job_name: 'node_exporter'
static_configs:
- targets: ['192.168.1.10:9100', '192.168.1.11:9100', '192.168.1.12:9100']
EOF
- 启动Prometheus和Grafana:
$ cd /ob/prometheus
$ ./prometheus --config.file=prometheus.yml &
$ cd /ob/grafana
$ ./bin/grafana-server --homepath=/ob/grafana &
## 5. 测试验证
- 执行自动化巡检:
$ ansible-playbook /ob/ansible/inspection.yml
- 查看巡检结果:
$ ls -la /ob/log/
- 查看监控面板:
- 浏览器访问:http://服务器IP:3000
- 查看Grafana仪表盘
- 分析巡检数据
Part04-生产案例与实战讲解
4.1 日常巡检实战案例
## 案例背景
– 生产环境:OceanBase 4.0集群
– 业务类型:电商业务
– 需求:建立日常巡检机制,确保系统的正常运行
## 实施步骤
### 1. 环境准备
– 配置OceanBase数据库:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “CREATE DATABASE fgedudb;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “CREATE USER fgedu IDENTIFIED BY ‘password’;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “GRANT ALL PRIVILEGES ON fgedudb.* TO fgedu;”
– 创建测试表:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “CREATE TABLE fgedu_order (order_id INT PRIMARY KEY, user_id INT, order_amount DECIMAL(10,2), order_time DATETIME);”
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “INSERT INTO fgedu_order VALUES (1, 1, 100.00, NOW());”
### 2. 日常巡检脚本
– 创建每日巡检脚本:
$ cat > /ob/scripts/daily_check.sh << 'EOF'
#!/bin/bash
# daily_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 检查服务器状态
check_server() {
echo "=== 服务器状态检查 ==="
echo "主机名:$(hostname)"
echo "系统时间:$(date)"
echo "系统负载:$(uptime)"
echo "内存使用:"
free -h
echo "磁盘使用:"
df -h
echo "CPU使用:"
top -b -n 1 | head -10
}
# 检查网络状态
check_network() {
echo "\n=== 网络状态检查 ==="
echo "网络接口:"
ifconfig
echo "网络连接:"
netstat -an | grep ESTABLISHED | wc -l
echo "网络延迟:"
ping -c 3 8.8.8.8
}
# 检查OceanBase状态
check_ob() {
echo "\n=== OceanBase状态检查 ==="
echo "OceanBase版本:"
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SELECT version();"
echo "OceanBase状态:"
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW STATUS LIKE 'ob_server_status';"
echo "OceanBase会话:"
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW PROCESSLIST;"
echo "OceanBase资源使用:"
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW GLOBAL STATUS LIKE 'ob_%';"
}
# 检查数据库状态
check_db() {
echo "\n=== 数据库状态检查 ==="
echo "数据库列表:"
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e "SHOW DATABASES;"
echo "表空间使用:"
obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "SHOW TABLE STATUS;"
echo "索引状态:"
obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e "SHOW INDEX FROM fgedu_order;"
}
# 检查日志
check_logs() {
echo "\n=== 日志检查 ==="
echo "OceanBase错误日志:"
tail -n 50 /ob/log/observer.log | grep -i error
echo "系统日志:"
tail -n 50 /var/log/messages
}
# 主函数
main() {
check_server
check_network
check_ob
check_db
check_logs
echo "\n=== 巡检完成 ==="
}
main
EOF
- 设置脚本权限:
$ chmod +x /ob/scripts/daily_check.sh
### 3. 执行巡检
- 执行每日巡检:
$ /ob/scripts/daily_check.sh
# 输出:
# === 服务器状态检查 ===
# 主机名:fgedu.net.cn
# 系统时间:Mon Jan 1 12:00:00 CST 2026
# 系统负载: 12:00:00 up 1 day, 2:00, 2 users, load average: 0.50, 0.30, 0.20
# 内存使用:
# total used free shared buff/cache available
# Mem: 16G 8G 6G 0B 2G 6G
# Swap: 4G 0B 4G
# 磁盘使用:
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda1 50G 20G 30G 40% /
# /dev/sdb1 200G 50G 150G 25% /ob/data
# CPU使用:
# top - 12:00:00 up 1 day, 2:00, 2 users, load average: 0.50, 0.30, 0.20
# Tasks: 100 total, 1 running, 99 sleeping, 0 stopped, 0 zombie
# %Cpu(s): 5.0 us, 2.0 sy, 0.0 ni, 93.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
# KiB Mem : 16384.0 total, 6144.0 free, 8192.0 used, 2048.0 buff/cache
# KiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 6144.0 avail Mem
#
# === 网络状态检查 ===
# 网络接口:
# eth0: flags=4163
# inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255
# inet6 fe80::a00:27ff:fe00:1 prefixlen 64 scopeid 0x20
# ether 08:00:27:00:00:01 txqueuelen 1000 (Ethernet)
# RX packets 10000 bytes 1000000 (1.0 MB)
# TX packets 10000 bytes 1000000 (1.0 MB)
# RX errors 0 dropped 0 overruns 0 frame 0
# TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# 网络连接:
# 10
# 网络延迟:
# PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
# 64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=10.0 ms
# 64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=10.0 ms
# 64 bytes from 8.8.8.8: icmp_seq=3 ttl=56 time=10.0 ms
#
# — 8.8.8.8 ping statistics —
# 3 packets transmitted, 3 received, 0% packet loss, time 2ms
# rtt min/avg/max/mdev = 10.0/10.0/10.0/0.0 ms
#
# === OceanBase状态检查 ===
# OceanBase版本:
# +———–+
# | version() |
# +———–+
# | 4.0.0.0 |
# +———–+
# OceanBase状态:
# +——————+——–+
# | Variable_name | Value |
# +——————+——–+
# | ob_server_status | ACTIVE |
# +——————+——–+
# OceanBase会话:
# +—-+——+———–+———+———+——+——-+———————–+
# | Id | User | Host | db | Command | Time | State | Info |
# +—-+——+———–+———+———+——+——-+———————–+
# | 1 | root | localhost | sys | Sleep | 0 | | NULL |
# | 2 | fgedu| localhost | fgedudb | Sleep | 0 | | NULL |
# +—-+——+———–+———+———+——+——-+———————–+
# OceanBase资源使用:
# +———————-+——-+
# | Variable_name | Value |
# +———————-+——-+
# | ob_server_status | ACTIVE |
# | ob_cluster_status | ACTIVE |
# | ob_tenant_status | ACTIVE |
# +———————-+——-+
#
# === 数据库状态检查 ===
# 数据库列表:
# +——————–+
# | Database |
# +——————–+
# | information_schema |
# | mysql |
# | oceanbase |
# | fgedudb |
# +——————–+
# 表空间使用:
# +——–+——–+———+————+——+—————-+————-+—————–+————–+———–+
# | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free |
# +——–+——–+———+————+——+—————-+————-+—————–+————–+———–+
# | fgedu_order | InnoDB | 10 | Dynamic | 1 | 16384 | 16384 | 0 | 0 | 0 |
# +——–+——–+———+————+——+—————-+————-+—————–+————–+———–+
# 索引状态:
# +———-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+
# | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
# +———-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+
# | fgedu_order | 0 | PRIMARY | 1 | order_id | A | 1 | NULL | NULL | | BTREE | |
# +———-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+
#
# === 日志检查 ===
# OceanBase错误日志:
#
# 系统日志:
# Jan 1 10:00:00 fgedu.net.cn systemd[1]: Started OceanBase Database.
# Jan 1 10:00:00 fgedu.net.cn observer[1234]: [INFO] [ob_server.cpp:1234] [“server started”]
#
# === 巡检完成 ===
### 4. 测试验证
– 配置定时任务:
$ crontab -e
# 每日巡检
0 8 * * * /ob/scripts/daily_check.sh > /ob/log/daily_check.log 2>&1
– 查看巡检日志:
$ cat /ob/log/daily_check.log
– 分析巡检结果:
– 服务器状态正常
– 网络状态正常
– OceanBase状态正常
– 数据库状态正常
– 日志无错误
## 案例总结
– 成功建立了日常巡检机制
– 执行了每日巡检,检查了服务器、网络、OceanBase和数据库状态
– 验证了系统的正常运行
– 为系统的稳定运行提供了保障
4.2 健康检查实战案例
## 案例背景
– 生产环境:OceanBase 4.0集群
– 业务类型:金融核心业务
– 需求:建立健康检查机制,确保系统的健康状态
## 实施步骤
### 1. 环境准备
– 配置OceanBase数据库:
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “CREATE DATABASE fgedudb;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “CREATE USER fgedu IDENTIFIED BY ‘password’;”
$ obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “GRANT ALL PRIVILEGES ON fgedudb.* TO fgedu;”
– 创建测试表:
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “CREATE TABLE fgedu_transaction (trans_id INT PRIMARY KEY, user_id INT, amount DECIMAL(10,2), trans_time DATETIME);”
$ obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “INSERT INTO fgedu_transaction VALUES (1, 1, 1000.00, NOW());”
### 2. 健康检查脚本
– 创建健康检查脚本:
$ cat > /ob/scripts/health_check.sh << 'EOF'
#!/bin/bash
# health_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 检查系统健康状态
check_system_health() {
echo "=== 系统健康状态检查 ==="
echo "CPU使用率:"
cpu_usage=$(top -b -n 1 | grep "%Cpu(s)" | awk '{print $2 + $4}')
echo "$cpu_usage%"
if (( $(echo "$cpu_usage > 80″ | bc -l) )); then
echo “警告:CPU使用率过高”
fi
echo “内存使用率:”
mem_total=$(free -h | grep Mem | awk ‘{print $2}’)
mem_used=$(free -h | grep Mem | awk ‘{print $3}’)
mem_free=$(free -h | grep Mem | awk ‘{print $4}’)
echo “总内存:$mem_total,已用:$mem_used,可用:$mem_free”
echo “磁盘使用率:”
df -h | grep -v tmpfs
echo “系统负载:”
uptime
}
# 检查网络健康状态
check_network_health() {
echo “\n=== 网络健康状态检查 ===”
echo “网络接口状态:”
ifconfig | grep -E “(UP|RUNNING)”
echo “网络连接数:”
netstat -an | grep ESTABLISHED | wc -l
echo “网络延迟:”
ping -c 3 8.8.8.8
echo “网络丢包率:”
ping -c 10 8.8.8.8 | grep -E “(packet loss|rtt)”
}
# 检查OceanBase健康状态
check_ob_health() {
echo “\n=== OceanBase健康状态检查 ===”
echo “OceanBase状态:”
ob_status=$(obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW STATUS LIKE ‘ob_server_status’;” | grep ob_server_status | awk ‘{print $2}’)
echo “$ob_status”
if [ “$ob_status” != “ACTIVE” ]; then
echo “警告:OceanBase状态异常”
fi
echo “OceanBase会话数:”
ob_sessions=$(obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW PROCESSLIST;” | wc -l)
echo “$ob_sessions”
echo “OceanBase资源使用:”
obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW GLOBAL STATUS LIKE ‘ob_%’;”
}
# 检查数据库健康状态
check_db_health() {
echo “\n=== 数据库健康状态检查 ===”
echo “数据库连接数:”
db_connections=$(obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW GLOBAL STATUS LIKE ‘Connections’;” | grep Connections | awk ‘{print $2}’)
echo “$db_connections”
echo “慢查询数:”
slow_queries=$(obclient -h192.168.1.10 -P2881 -uroot@sys -p -e “SHOW GLOBAL STATUS LIKE ‘Slow_queries’;” | grep Slow_queries | awk ‘{print $2}’)
echo “$slow_queries”
if (( $slow_queries > 10 )); then
echo “警告:慢查询数过多”
fi
echo “表空间使用:”
obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SHOW TABLE STATUS;”
echo “索引状态:”
obclient -h192.168.1.10 -P2881 -uroot@fgedudb -p -e “SHOW INDEX FROM fgedu_transaction;”
}
# 检查备份健康状态
check_backup_health() {
echo “\n=== 备份健康状态检查 ===”
echo “备份目录大小:”
du -sh /ob/backup
echo “最近备份文件:”
find /ob/backup -name “*.bak” -mtime -7 | sort -r
if [ $? -ne 0 ]; then
echo “警告:最近7天没有备份文件”
fi
echo “备份文件完整性:”
find /ob/backup -name “*.bak” -exec md5sum {} \;
}
# 主函数
main() {
check_system_health
check_network_health
check_ob_health
check_db_health
check_backup_health
echo “\n=== 健康检查完成 ===”
}
main
EOF
– 设置脚本权限:
$ chmod +x /ob/scripts/health_check.sh
### 3. 执行健康检查
– 执行健康检查:
$ /ob/scripts/health_check.sh
# 输出:
# === 系统健康状态检查 ===
# CPU使用率:
# 10.0%
# 内存使用率:
# 总内存:16G,已用:8G,可用:6G
# 磁盘使用率:
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda1 50G 20G 30G 40% /
# /dev/sdb1 200G 50G 150G 25% /ob/data
# 系统负载:
# 12:00:00 up 1 day, 2:00, 2 users, load average: 0.50, 0.30, 0.20
#
# === 网络健康状态检查 ===
# 网络接口状态:
# eth0: flags=4163
# inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255
# inet6 fe80::a00:27ff:fe00:1 prefixlen 64 scopeid 0x20
# ether 08:00:27:00:00:01 txqueuelen 1000 (Ethernet)
# 网络连接数:
# 10
# 网络延迟:
# PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
# 64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=10.0 ms
# 64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=10.0 ms
# 64 bytes from 8.8.8.8: icmp_seq=3 ttl=56 time=10.0 ms
#
# — 8.8.8.8 ping statistics —
# 3 packets transmitted, 3 received, 0% packet loss, time 2ms
# rtt min/avg/max/mdev = 10.0/10.0/10.0/0.0 ms
# 网络丢包率:
# 10 packets transmitted, 10 received, 0% packet loss, time 9ms
# rtt min/avg/max/mdev = 10.0/10.0/10.0/0.0 ms
#
# === OceanBase健康状态检查 ===
# OceanBase状态:
# ACTIVE
# OceanBase会话数:
# 2
# OceanBase资源使用:
# +———————-+——-+
# | Variable_name | Value |
# +———————-+——-+
# | ob_server_status | ACTIVE |
# | ob_cluster_status | ACTIVE |
# | ob_tenant_status | ACTIVE |
# +———————-+——-+
#
# === 数据库健康状态检查 ===
# 数据库连接数:
# 100
# 慢查询数:
# 0
# 表空间使用:
# +——————+——–+———+————+——+—————-+————-+—————–+————–+———–+
# | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free |
# +——————+——–+———+————+——+—————-+————-+—————–+————–+———–+
# | fgedu_transaction | InnoDB | 10 | Dynamic | 1 | 16384 | 16384 | 0 | 0 | 0 |
# +——————+——–+———+————+——+—————-+————-+—————–+————–+———–+
# 索引状态:
# +——————+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+
# | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
# +——————+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+
# | fgedu_transaction | 0 | PRIMARY | 1 | trans_id | A | 1 | NULL | NULL | | BTREE | |
# +——————+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+
#
# === 备份健康状态检查 ===
# 备份目录大小:
# 100M /ob/backup
# 最近备份文件:
# /ob/backup/fgedudb_full_20260101.bak
# 备份文件完整性:
# 1234567890abcdef1234567890abcdef /ob/backup/fgedudb_full_20260101.bak
#
# === 健康检查完成 ===
### 4. 测试验证
– 配置定时任务:
$ crontab -e
# 健康检查
0 10 * * * /ob/scripts/health_check.sh > /ob/log/health_check.log 2>&1
– 查看健康检查日志:
$ cat /ob/log/health_check.log
– 分析健康检查结果:
– 系统健康状态正常
– 网络健康状态正常
– OceanBase健康状态正常
– 数据库健康状态正常
– 备份健康状态正常
## 案例总结
– 成功建立了健康检查机制
– 执行了健康检查,检查了系统、网络、OceanBase、数据库和备份的健康状态
– 验证了系统的健康运行
– 为系统的稳定运行提供了保障
4.3 巡检自动化实战案例
## 案例背景
– 生产环境:OceanBase 4.0集群(3节点)
– 业务类型:电商业务
– 需求:建立巡检自动化机制,提高巡检效率
## 实施步骤
### 1. 环境准备
– 安装Ansible:
$ yum install -y ansible
– 配置Ansible主机清单:
$ cat > /etc/ansible/hosts << 'EOF'
[oceanbase]
192.168.1.10
192.168.1.11
192.168.1.12
EOF
- 配置Ansible免密登录:
$ ssh-keygen -t rsa
$ ssh-copy-id root@192.168.1.10
$ ssh-copy-id root@192.168.1.11
$ ssh-copy-id root@192.168.1.12
### 2. 自动化巡检脚本
- 创建Ansible巡检Playbook:
$ cat > /ob/ansible/inspection.yml << 'EOF'
---
- hosts: oceanbase
gather_facts: yes
tasks:
- name: 执行每日巡检
script: /ob/scripts/daily_check.sh
register: daily_check_result
- name: 保存每日巡检结果
copy:
content: "{{ daily_check_result.stdout }}"
dest: "/ob/log/daily_check_{{ inventory_hostname }}_{{ ansible_date_time.date }}.log"
- name: 执行健康检查
script: /ob/scripts/health_check.sh
register: health_check_result
- name: 保存健康检查结果
copy:
content: "{{ health_check_result.stdout }}"
dest: "/ob/log/health_check_{{ inventory_hostname }}_{{ ansible_date_time.date }}.log"
EOF
- 创建每日巡检脚本:
$ cat > /ob/scripts/daily_check.sh << 'EOF'
#!/bin/bash
# daily_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 检查服务器状态
check_server() {
echo "=== 服务器状态检查 ==="
echo "主机名:$(hostname)"
echo "系统时间:$(date)"
echo "系统负载:$(uptime)"
echo "内存使用:"
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
