数据库|实操硬核干货之监控告警处理


本期摘要
监控面板中tidb_server_critical_error_total不为0,存在其它数值,表明binlog写入失败,会影响下游系统同步,需要修正。
本文从笔者自身实践的角度出发,为大家分享一下监控告警处理。
作者
soy sauce | 高级数据库运维工程师
在DBA道路上学习成长的一份子
01
原理分析
官方文档binlog.ignor-error介绍
实际使用中,在使用pump、drainer组件往下游同步数据的时候,我们为保护主库运行,把binlog.ignore-error参数开启,避免因binlog写入失败导致tidb主集群处于不可用状态。
题外话:不要拉踩,Oracle DataGuard是通过archive模式进行同步的,存在一个归档空间满,主库hang住的情况。相较于Oracle,tidb多了一个选择,可以丢弃归档日志保障主库业务的连续性,不保证下游数据和上游数据一致性。
02
现象
//2.1 监控位置:Tidb---->server---->skip binlog count
//2.2 curl http://127.0.0.1:10080/info/all
//2.3查看binlog_status 状态,此时一般为 skipping
03
处理方式
考虑下游同步的三种情况,分别处理
//情况一:同步任务取消
不再需要将数据同步到某个下游,所以下线对应的 Pump\Drainer。
1.编辑集群配置文件
tiup cluster edit-config {cluster_name}
2.打开集群配置文件,在server_config下,tidb下添加或修改配置
binlog.enable: false
3.滚动重启tidb-server
tiup cluster reload {cluster\_name} -R tidb
4.执行命令
mysql -uroot -h {host} -P {port} -p {passwd} -e "SHOW CONFIG WHERE type ='tidb' and name like 'binlog%'"
验证两指标binlog.enable和binlog.ignore-error的状态为true
//情况二:文件同步任务异常
drainer同步方式为file文件,下游读取文件异常。
修复过程(二选一):
1.使用 tidb-server 的 API,然后尽快安排重新全备。
在tidb服务器上对binlog进行recover,
curl http://{TiDBIP}:10080/binlog/recover
2.重启 tidb-server,然后尽快安排重新全备。
//情况三:灾备同步任务异常,官方文档
drainer同步方式为binlog文件,灾备中备库数据异常。
恢复后查看监控checkpoint是否变化,若变化则正常。
04
skip binlog出现的常见情况
//pump磁盘空间满了
导数时需要注意日志空间,同时需要关注pump中stop-write-at-available-space参数,默认为10G。有可能不是空间满,而是pump参数设置不合理导致。
//大事务超过grpc限制
引用官档
05
延伸问题
skip的binlog如果存在ddl,会导致drainer异常重启,报错 not found table id
社区案例: https://asktug.com/t/topic/575578/1
本次分享就到这啦,有问题的小伙伴欢迎进群讨论交流呀~
“
Hello~
这里是神州数码云基地
编程大法,技术前沿,尽在其中
Odoo、数据库、云原生、DevOps等
超多原创技术干货持续输出ing~

