暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

新炬运维避坑指南连载(十七)

IT那活儿 2024-09-09
294

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!  


  
指南1分钟速览:
  • Oceanbase 备份恢复失败分析
  • K8S单个pod在某个时间点内存突增问题分析
  • K8Setcd的master节点不断选举问题分析
  • goldendb 长时间执行sql导致cn断连处理
  • goldendb 存储过程调用失败分析
  • 国产操作系统欧拉安装Oracle19C问题分析
  • ORACLE 告警日志频繁报ORA-6550处理
  • ORACLE 已创建索引sql执行全表扫描
  • ORACLE 回收站清理报ORA-01555错误
  • teledb 某系统数据库连接数过高引起的问题



Oceanbase 备份恢复失败

1.1 现象

Oceanbase 备份恢复失败。

1.2 处置过程
通过命令查看恢复历史记录,恢复状态为失败。
发现备份环境与恢复环境的OB版本信息不一致,将恢复环境的版本升级后,再次执行恢复成功。
1.3 新炬建议
1)版本对齐
在执行备份和恢复之前,确保所有环境中的软件版本完全一致。如果必须进行版本升级,建议同时更新备份环境和恢复环境,以避免兼容性问题。
2)自动化版本检查
在备份和恢复的流程中加入自动版本检查步骤,如果发现版本不一致,自动提示或阻止操作,减少人为错误。
3)记录详细日志
确保备份和恢复操作中有详细的日志记录,包括执行的具体命令、时间、执行状态和任何错误信息。
4)错误分析
对失败的恢复尝试进行详细的错误分析,找出失败的原因,并根据日志信息进行问题定位和解决。
5)定期审查备份策略

定期审查和更新备份策略,确保其满足当前的业务需求和技术环境。


K8S单个pod在某个时间点内存突增

2.1 现象
容器服务中的单个pod在某个时间点内存突增,导致服务访问故障。需要在保证服务正常运行的前提下排查问题原因。
2.2 处置过程
业务反应部署的一个服务中的三个pod,其中一个pod内存突增,而此时访问服务已出现故障。
在后台定位定位故障pod,使用kubectl edit pod xxxxx -n xxxx 修改故障pod当前标签的值,使其与deployment的标签不匹配,此时故障pod不再受控制器托管,请求也不会落到故障pod上,那么RS会由于当前控制器实际管理pod比期望pod数量少而新增一个pod。
提醒业务方检查服务是否可用,在业务反馈服务正常之后,在故障pod中导出dump.hprof内存快照,使用mat工具分析内存快照,发现服务存在内存泄漏的情况。
告知业务系统发生内存泄漏的原因是由于其业务在容器中存放大文件照片,导致GC困难,建议业务系统的开发人员,将大对象分割成指定大小的数个小对象进行处理,更有利于GC收集器对其进行回收,避免内存泄漏,最后将从控制器孤立出来的pod手动删除。
2.3 新炬建议
1)强化监控系统,确保能够及时捕捉到内存使用异常
使用如Prometheus配合Grafana的告警规则可以自动触发警报并执行初步自动化响应措施。
2)针对Kubernetes Pod配置合理的资源请求(requests)和限制(limits)
以避免单个Pod使用过多资源影响其他Pod。
3)对业务应用进行常规的性能评估和优化
尤其是关注那些可能造成资源泄漏的部分。
4)加强代码审查
特别是对处理大文件或进行大量内存操作的代码。
确保开发人员遵循最佳实践,例如使用流处理大文件,避免一次性加载到内存中。
5)性能测试和资源使用效率的评估

在持续集成/持续部署(CI/CD)流程中加入性能测试和资源使用效率的评估,以自动识别可能的性能问题。


K8Setcd的master节点不断选举

3.1 现象
etcd的master节点不断选举,由于apiserver通常会使用etcd作为存储后端,存储集群状态信息,所以会导致apiserver的leader也不断选举。
因为应用节点要与apiserver进行交互,来管理和调度应用程序,上述故障会导致应用节点与apiserver及时的或者正确的通信,影响业务应用的使用。
3.2 处置过程
1)检查相关的master节点上的etcd服务运行的状态以及相关events
发现etcd集群不断的在选举,从而导致apiserver也不断在选举,因为apiserver配置的环路地址,并且etcd又在不同的主机上面,那么etcd无法通过apiserver的环路地址进行通信。
2)检查3个节点的服务器的系统状态及日志
发现某台主机(双网卡绑定)的网卡有发生过切换。
怀疑etcd选举与网卡发生切换有关,所以首先从控制台将有发生网卡切换的节点驱逐。
观察k8s集群以及应用,后续逐渐恢复正常。
3)将发生过网卡切换的节点提报给硬件厂商,检查相关的网卡硬件
硬件厂商更换网卡硬件后,重新纳入该节点到集群,并将该节点设为不可调度状态。
持续观察一段时间,集群运行状态正常。
3.3 新炬建议
1)增加网络监控
使用网络监控工具(如Nagios、Zabbix等)来实时监控网络状态,特别是跨主机通信的稳定性,以便及时发现并解决网络问题。
2)定期进行网络压力测试
定期对网络进行压力测试和性能评估,以确保网络配置能够承受高负载情况。
3)定期执行 etcdctl 检查
使用 etcdctl 工具定期检查 etcd 集群的健康状态和性能指标。
4)优化 etcd 配置
根据集群运行情况和业务需求调整 etcd 的配置参数,如心跳间隔、选举超时等。
5)部署多个 etcd 节点
确保 etcd 集群具有足够的节点数,以支持故障转移和高可用性。
6)网络冗余设计

确保关键组件,如 etcd 和 apiserver,都有足够的网络冗余和备份连接。


goldendb 长时间执行sql导致cn断连

4.1 现象
cn节点重启,dbproxy.log发现Out of memory。
4.2 处置过程
登录主机查看cn节点状态,已被agent拉起。
查看dbproxy.log发现ErrMsg:Out of memory(need xxx bytes),结合主机部署的osw日志,发现dbproxy进程内存使用率达到10%,触发oom,查看cn节点部署的长事务采集脚本,发现有一条执行时间超10分的抽取数据,初步判断由该语句导致。
在和原厂沟通后确认为版本问题,内存清理存在缺陷。在抽取数据时,对于大结果集语句,cn会将各dn查询结果汇总,再返回客户端,在此过程中可能会导致cn重启。
4.3 新炬建议
1)优化SQL查询
针对导致OOM的长时间运行的SQL,进行详细的性能分析和优化。使用EXPLAIN PLAN或类似工具分析查询执行计划,识别并优化耗时的操作,比如添加合适的索引,调整查询逻辑等。
2)限制查询结果集大小
对于可能产生大量结果集的查询,考虑实施分页或者限制返回结果集的大小。
3)调整内存配置
根据应用需求和服务器能力,适当增加CN节点的内存配额或优化内存使用方式,以避免因资源不足而触发OOM。
4)监控内存使用
实施实时内存使用监控,及时发现和响应内存异常使用情况。工具如Prometheus和Grafana可以用来设置内存使用警报。
5)优化数据库参数
根据数据库的具体负载调整数据库配置参数,如工作内存(work_mem)、缓冲区大小(buffer pool size)等,以提高查询效率和系统稳定性。
6)长事务管理

监控并管理长时间事务,设定超时时间或警告阈值,避免单一事务占用过多资源。


goldendb 存储过程调用失败

5.1 现象
业务侧反馈存储过程调用失败。
5.2 处置过程
和业务确认该存储过程在哪个节点执行,登录该节点查看gener日志,发现报错:ORA-06575:Package or function xxxx is in an invalid state。
和业务沟通,提供测试案例,开启事务测试存储过程,并监控spe日志发现存储过程在执行insert xx select 时报错,后手动执行select语句发现该语句涉及表不存在。找到原因后反馈业务侧,重建表后,存储过程调用正常。
5.3 新炬建议
1)确保所有数据库对象(如表、存储过程等)的定义都存档在版本控制系统中
不仅有助于追踪变更历史,也方便在出现问题时快速还原或重建丢失的对象。
2)为重要的数据库操作制定详细的文档
包括存储过程的使用说明、预期效果及其依赖关系。
3)在存储过程中增加更详细的错误和异常处理逻辑
例如,在执行关键操作前进行存在性检查(如检查表或视图是否存在)
4)实施定期的数据库健康检查

包括检查所有存储过程的状态是否有效,以及它们依赖的数据库对象是否完整。


国产操作系统欧拉安装Oracle19C问题

6.1 现象
国产操作系统欧拉安装Oracle19C碰到报错问题。
6.2 处置过程
问题1:
PRVG-0282 : failed to retrieve the operating system distribution ID报错异常退出。
解决办法:
cat $ORACLE_HOME/cv/admin/cvu_config找到CV_ASSUME_DISTID取消注释。
问题2:
root.sh执行报错ins_rdbms.mk:840。
解决办法:
上传libpthread_nonshared.a包,修改libpthread_nonshared.a权限后,在/usr/lib64下创建过软连接了:ln -s libpthread.a libpthread_nonshared.a
问题3:
Please check your installation, HotSpot does not work correctly
when installed in the JDK 1.2 Linux Production Release, or
with any JDK 1.1.x release.
Could not create the Java virtual machine.
解决办法:
将/usr/lib64/libnsl-2.17.so 复制到目录下:
cd /usr/lib64/
ln -s libnsl-2.17.so libnsl.so.1
ln -s libnsl.so.1 libnsl.so

问题4:
ins_precomp.mk错误:
  • log里:/usr/lib64/libaio.so.1: undefined reference to `__stack_chk_fail@GLIBC_2.4'
解决办法:
把libaio.so.1替换为新的,注意替换libaio.so.1.0.1 ,查看软连接libaio.so.1要链接到新的so文件上。
6.3 新炬建议
1)建立记录文档
对于每一个问题和其解决方案,进行详细的文档记录,这不仅帮助未来遇到相同问题的快速解决,还有助于知识的传承。
2)备份原始文件
确保在修改系统文件或配置时保留原始文件的备份,以便在新的配置不起作用时可以快速回滚。
3)充分测试
在实际生产部署前,对修改后的环境进行充分的测试,确保所有的Oracle功能正常,性能符合预期。
4)兼容性评估
在项目初期,评估软件与操作系统之间的兼容性,包括支持的库文件、依赖的系统工具和预期的系统配置。
5)确认是否因系统问题致so包无法解析

国产操作系统默认包与红帽操作系统是不同的,安装报错多数为so包无法解析,需要从红帽操作系统把对应包拿来替换,并重新更新软连接。


ORACLE 告警日志频繁报ORA-6550

7.1 现象
数据库告警日志频繁报ORA-6550处理。
7.2 处置过程
查看alert日志,频繁报****Encountered error ORA-6550.****
根据日志提示信息为某物化视图刷新失败,查询DBA_MVIEWS视图发现MASTER_LINK为到已下线数据库的dblink。
发邮件通知业务核实该mview情况并及时处理。
7.3 新炬建议
1)深入分析物化视图的刷新策略和频率,以确定是否需要调整以避免未来的失败
使用DBMS_MVIEW.EXPLAIN_MVIEW来分析物化视图的能力和限制,这有助于确定物化视图是否配置正确。
2)实施针对物化视图和数据库链接的专门监控
确保在链接失败或物化视图刷新出现问题时能够及时通知管理员。
3)建立数据库对象健康检查巡检

定期检查所有数据库链接的有效性和物化视图的状态。


ORACLE 已创建索引sql执行全表扫描

8.1 现象
select xx from xx from id=? 全表扫描。
8.2 处置过程
原因是ID字段创建索引时,写成了xx(‘id’),导致创建索引时创建的不是单字段索引,而是成了普通函数索引。
8.3 新炬建议
1)使用 EXPLAIN PLAN 命令来验证查询是否真正使用了索引
如果没有,重新审视索引的创建语句。
2)正确重建索引
例如,如果意图是创建单字段索引,则应确保使用正确的语法,如 CREATE INDEX idx_name ON table_name (id); 而非 xx(‘id’)。
3)除了修正索引外,还可以检查查询条件本身是否有优化空间
例如,确保查询条件中的数据类型与索引字段类型一致,避免隐式类型转换,这也可能导致索引失效。
4)建立和维护一套数据库设计和编码标准
确保所有数据库操作,包括索引创建,都遵循最佳实践。
5)定期对数据库模式和索引设计进行审查
确保它们符合业务需求和性能优化原则。
6)定期对开发者和数据库管理员进行SQL优化和索引设计方面的培训
增强开发者和数据库管理员对索引如何影响查询性能的理解。
7)实施索引管理策略
包括定期评估现有索引的效果和必要性,以及定期清理未使用或重复的索引。
8)检查并优化索引

在进行任何大规模数据更新(如批量导入)之前和之后,检查并优化索引,确保索引的维护不会影响系统性能。


ORACLE 回收站清理报ORA-01555错误

9.1 现象
回收站清理报ORA-01555错误。
9.2 处置过程
一个一个地清理回收站中的表对象,而不是通过purge dba_recyclebin命令。找到回收站为何急剧增长的原因。
9.3 新炬建议
1)如果频繁出现ORA-01555错误,考虑增加撤销表空间的大小
可以通过调整撤销表空间来提供更多的撤销记录容量,从而支持更长时间的查询和更大的事务。
2)将大规模的删除操作分批进行
减少每批次的数据量,以降低对UNDO的需求。
3)在进行大规模数据删除操作前,评估并优化撤销参数
如undo_retention,以保留足够的撤销信息。
4)制定UNDO管理策略
定期监控撤销使用情况并根据数据库的实际运行情况调整策略。
5)使用自动化工具来管理撤销配置
确保在数据库负载增加时自动调整相关参数。
6)实施监控系统以跟踪UNDO的使用情况,及时发现潜在问题
7)设置预警
当UNDO使用接近阈值时自动通知数据库管理员,以便及时采取措施。
8)制定数据库维护计划
包括定期清理回收站和不再需要的数据,以优化数据库性能并防止空间浪费。
9)开发自动化脚本来处理回收站对象的清理

确保在不影响数据库性能的前提下进行。


teledb 某系统数据库连接数过高引起的问题

10.1 现象
某日收到数据库连接数过高的告警,业务也反应查询变慢。
10.2 处置过程
检查teledb相关的组件的可用性,发现多个底层库连接数过高,数据库压力大;停止业务和dbproxy后,底层库的连接数任然没有释放;
查询到底层库存在大量otter用户的连接,怀疑跟同步有关系;
经排查,同步工具有部分表在进行全量同步。
停止所有全量同步后,启动dbproxy业务逐步恢复正常。
10.3 新炬建议
1)在业务高峰期避免进行全量同步的工作
2)建立有效的监控系统
监控Teledb数据库连接数、负载、性能等指标,并设置相应的预警阈值。当数据库连接数异常升高时,及时发出警报,以便进行调查和处理。
3)对数据库同步工具进行审查
确保其配置和同步策略符合业务需求,并不会对数据库性能产生不良影响。
特别是针对全量同步操作,需要谨慎设置同步时间和频率,以避免对数据库造成过大压力。
4)持续监测数据库性能和负载情况,并根据监测结果进行相应的优化和调整
定期评估数据库的性能瓶颈和瓶颈原因,并采取相应的措施进行优化。

新炬运维避坑指南连载合集链接:

https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzUxNTYzMjA5Mg==&action=getalbum&album_id=2846038717288693763#wechat_redirect


END


本文作者:秘而不宣(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论