一次支付平台紧急故障处理备忘

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

一次支付平台紧急故障处理备忘

作者:田逸(sery@163.com

 

监控没报警直接收到故障电话,说业务全部挂了。时间紧迫,需要快速解决。

wKiom1OvmSPzoxWJAAE06p5cCkU221.jpg

根据拓扑结构,顺序进行如下操作:

 

◎检查负载均衡器

负载均衡器安装keepalived+ haproxy,先从监控界面检查运行状态,其输出如下图所示

wKioL1OvmTXSTmWYAAMltzop9TY107.jpg

由图可知,还有一个应用处于正常状态,因此可以大致判定负载均衡应该是正常的。

 

检查应用服务器

应用服务器由4个服务器组成2组独立的集群,每组服务器安装的软件和配置完全一样。因此,每组服务器只需要检查其中的一个服务器就可以了。登录系统,检查如下项目:

1、  检查进程,查看tomcat是否还在运行,执行指令ps auxww | grep java ,两个java进程运行得好好的呢!

2、  检查网络状态,分别执行netstat –anp | grep EST ,也看不出有什么异常。

3、  检查tomcat日志,发现一段可疑输出,片段截取如下:

Could not open JDBC Connection for  transaction; nested exception is java.sql.SQLException: An attempt by a  client to checkout a Connection has timed out.

问了其他技术人员,回答说今天没有做任何程序方面的修改,由此可以简单断定,可能是数据库出了问题。顺手在应用服务上测试一下数据库服务器的网络联通性,执行命令ping 172.16.5.40,正常;再执行 telnet 172.16.5.41 1521 有正常的输出,这可以确定数据库的监听也是启动的。注意:oracle rac监听地址是安装过程中设定的vip,而不是实际物理接口地址,这就是什么啥ping的地址是172.16.5.40,而telnet 跟的地址是172.16.5.41的原因。

4、  重启一下tomcat,故障依旧。

5、  检查系统日志,无可以信息发现。

6、  直接在浏览器输入应用服务器的可访问url,异常。

 

检查数据库服务器

 

系统方面的检查

1、检查oracle相关进程,ps aux ,其输出片段为

   wKioL1OvmWbBq8G0AAKtByrT41M880.jpg

相关进程都处于运营状态。

◆检查监听器

[oracle@db40 ~]$  lsnrctl status

 

LSNRCTL for  Linux: Version 11.2.0.1.0 - Production on 29-6 -2014 10:02:49

 

Copyright (c)  1991, 2009, Oracle.  All rights  reserved.

 

Connecting to  (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the  LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version  11.2.0.1.0 - Production

Start Date                09-5 -2014 17:42:24

Uptime                    50 days 16 hr. 20 min. 33  sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener  Parameter File    /u01/app/grid/network/admin/listener.ora

Listener Log  File          /u01/app/oracle/diag/tnslsnr/db40/listener/alert/log.xml

Listening  Endpoints Summary...

   (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))

   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.5.41)(PORT=1521)))

Services  Summary...

Service  "+ASM" has 1 instance(s).

  Instance "+ASM1", status READY,  has 1 handler(s) for this service...

Service  "zyzf" has 1 instance(s).

  Instance "zyzf1", status READY,  has 1 handler(s) for this service...

Service  "zyzfXDB" has 1 instance(s).

  Instance "zyzf1", status READY,  has 1 handler(s) for this service...

The command  completed successfully

ASM实例及服务在监听器里注册状态都是正常的。

 

检查asm

执行如下指令进行简单判断

[root@db50 ~]# su - grid

[grid@db50 ~]$ asmcmd

ASMCMD> ls

DATA/

FLASH/

OCR/

ASMCMD> cd FLASH

ASMCMD> ls

ZYZF/

ASMCMD> cd ZYZF

ASMCMD> ls

ARCHIVELOG/

BACKUPSET/

ASMCMD> cd ARC*

ASMCMD> ls

2014_06_29/

看来问题不在这里。

 

检查数据库实例

本地登录登录oracle客户端,说起来好专业,实际上就是执行sqlplus嘛。进行的操作记录如下:

[oracle@db50 ~]$  sqlplus / as sysdba

 

SQL*Plus: Release  11.2.0.1.0 Production on ??? 6? 29 12:01:47 2014

 

Copyright (c)  1982, 2009, Oracle.  All rights  reserved.

 

 

Connected to:

Oracle Database  11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the  Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and  Real Application Testing options

 

SQL> select  count(*) from v$process;

 

  COUNT(*)

----------

        41

 

SQL> select  count(*) from v$session;

 

  COUNT(*)

----------

        37

明明有连接嘛,看来问题不大。

 

检查oracle报警日志

在数据实例报警文件,发现如下有用信息:

<msg  time='2014-06-29T10:13:37.204+08:00' org_id='oracle' comp_id='rdbms'

 client_id='' type='UNKNOWN' level='16'

 host_id='db50' host_addr='127.0.0.1'  module=''

 pid='5671'>

 <txt>************************************************************************

 </txt>

</msg>

<msg  time='2014-06-29T10:13:37.204+08:00' org_id='oracle' comp_id='rdbms'

 client_id='' type='UNKNOWN' level='16'

 host_id='db50' host_addr='127.0.0.1'  module=''

 pid='5671'>

 <txt>Errors in file  /u01/app/oracle/diag/rdbms/zyzf/zyzf2/trace/zyzf2_arc2_5671.trc:

ORA-19809: limit exceeded for recovery  files

ORA-19804: cannot reclaim 50331648 bytes  disk space from 42967498752 limit

 </txt>

</msg>

<msg  time='2014-06-29T10:13:37.204+08:00' org_id='oracle' comp_id='rdbms'

 client_id='' type='UNKNOWN' level='16'

 host_id='db50' host_addr='127.0.0.1'  module=''

 pid='5671'>

 <txt>ARC2: Error 19809 Creating archive log file to  &apos;+FLASH&apos;

 </txt>

</msg>

 

既然你说问题记录在文件/u01/app/oracle/diag/rdbms/zyzf/zyzf2/trace/zyzf2_arc2_5671.trc咱就乖乖听你的,打开文件看一下也无妨,打开一看,确实有用哟,其部分输出如下:

*** 2014-06-27  21:45:03.674 2046 krse.c

Archived Log  entry 770 added for thread 2 sequence 250 ID 0x1bcb54de dest 1:  +FLASH/zyzf/archivelog/2014_06_27/thread_2_seq_250.443.

851377503

*** 2014-06-28  10:05:32.844 2046 krse.c

 

*** 2014-06-28  10:05:32.844

Archived Log  entry 782 added for thread 2 sequence 253 ID 0x1bcb54de dest 1:  +FLASH/zyzf/archivelog/2014_06_28/thread_2_seq_253.546.

851421933

*** 2014-06-28  13:18:07.129 2046 krse.c

 

*** 2014-06-28  13:18:07.129

Archived Log  entry 795 added for thread 2 sequence 256 ID 0x1bcb54de dest 1: +FLASH/zyzf/archivelog/2014_06_28/thread_2_seq_256.654.

851433487

*** 2014-06-28  14:41:21.362 2046 krse.c

原来是归档日志轮转的时候,没空间可以创建文件了。

 

故障处理

 

查明原因,因时间紧迫,需立即处理。过程记录如下:

检查闪回恢复区(为啥查它?因为归档日志在这里啊!)

 

SQL>  show parameter  db_recovery_file_dest

 

NAME                                 TYPE        VALUE

------------------------------------  ----------- ------------------------------

db_recovery_file_dest                string      +FLASH

db_recovery_file_dest_size           big integer   40977M

总共40G,看一下实际用了多少?

SQL> select FILE_TYPE,PERCENT_SPACE_USED from  v$flash_recovery_area_usage;

 

FILE_TYPE             PERCENT_SPACE_USED

-------------------- ------------------

CONTROL FILE                          0

REDO LOG                              0

ARCHIVED LOG                      97.75

BACKUP PIECE                       1.16

IMAGE COPY                            0

FLASHBACK LOG                         0

FOREIGN ARCHIVED LOG                  0

 

7 rows selected.

 

删除归档日志

Rman target /

Delete archivelog all;

全部干掉。

 

再查看报警日志,开始有新的归档生成的记录:

<msg  time='2014-06-29T10:14:44.726+08:00' org_id='oracle' comp_id='rdbms'

 client_id='' type='UNKNOWN' level='16'

 host_id='db50' host_addr='127.0.0.1'  module=''

 pid='5538'>

 <txt>   Current log# 4 seq# 274 mem# 0: +DATA/zyzf/redo04.log

 </txt>

</msg>

<msg  time='2014-06-29T10:14:47.254+08:00' org_id='oracle' comp_id='rdbms'

 client_id='' type='UNKNOWN' level='16'

 host_id='db50' host_addr='127.0.0.1'  module=''

 pid='5671'>

 <txt>Archived  Log entry 833 added for thread 2 sequence 273 ID 0x1bcb54de dest 1:

 </txt>

</msg>

 

从应用层面进行访问,一切都正常了。

wKioL1OvmZ2xNxWRAAIUaoBZx5M358.jpg

 

补充:后边得把监控完善,再弄个计划任务,做好备份或者直接定期清理陈旧的归档日志。

















本文转自sery51CTO博客,原文链接:http://blog.51cto.com/sery/1432066 ,如需转载请自行联系原作者


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
运维 监控 数据库
线上服务故障处理原则
墨菲定律 任何事情都没有表面看起来那么简单 所有事情的发展都会比你预计的时间长 会出错的事情总会出错 如果担心某个事情发生,那么它更有可能发生 墨菲定律暗示我们,如果担心某种情况会发生,那么它更有可能发生,久而久之就一定会发生。
2280 0
|
5月前
|
Prometheus 监控 Cloud Native
关于告警,要想做好,从这些方面着手
监控告警最应该关注的是哪些方面?告警收敛、告警聚合、告警降噪、排班、认领、升级、协同
75 1
|
2月前
|
消息中间件 数据采集 运维
一份运维监控的终极秘籍!监控不到位,宕机两行泪
【10月更文挑战第25天】监控指标的采集分为基础监控和业务监控。基础监控涉及CPU、内存、磁盘等硬件和网络信息,而业务监控则关注服务运行状态。常见的监控数据采集方法包括日志、JMX、REST、OpenMetrics等。Google SRE提出的四个黄金指标——错误、延迟、流量和饱和度,为监控提供了重要指导。错误监控关注系统和业务错误;延迟监控关注服务响应时间;流量监控关注系统和服务的访问量;饱和度监控关注服务利用率。这些指标有助于及时发现和定位故障。
205 1
|
5月前
|
监控 Linux Shell
"揭秘!一键掌控Linux服务器健康的秘密武器——超实用系统检查脚本,让你的服务器稳如老狗,告别宕机烦恼!"
【8月更文挑战第14天】服务器宕机或资源耗尽会严重影响业务。为此,你需要一个Linux系统检查脚本来守护服务器健康。它可以自动检测潜在问题如磁盘满载、内存泄漏等,避免服务中断。脚本应包括磁盘空间、内存/CPU使用、系统时间准确性、关键服务状态及系统日志分析等检查项。通过编写并定期运行这样的脚本,可以显著提高服务器的稳定性和可靠性。
68 1
|
8月前
|
运维 物联网 Linux
售后打电话说现场设备出问题了,嵌入式工程师最想干什么?
售后打电话说现场设备出问题了,嵌入式工程师最想干什么?
56 1
|
Java 程序员 开发者
太卷了!这份Java性能调优手册仅上线1小时,竟被恶意封杀下架
在各大厂的面试中,性能优化的问题肯定不会缺席,这足以说明其重要性。今天给大家带来的便是由资深程序员葛一鸣老师写的《Java程序性能优化实战》,同样是没有开源版本,我会将领取方式放在文末 Java程序性能优化实战 我看过几篇讲解Java程序性能优化的图书,要么是内容不够深入,要么是过于晦涩难懂,不够浅显,而这本书却让我眼前一亮,很多困扰我的问题都能在书中找到答案。它涵盖了各种程序员所需的性能优化知识点,是Java开发者提升水平的必读佳作 来看看目录内容,里面一定有你想看的 亮个相吧(狗头.jpg) 想要更进一步的Java开发者一定不能
94 0
|
前端开发 Shell 程序员
🙊整活向:定期给老板推送同事的代码量
总有领导想把公司往倒闭里整。但是每天推送每个人的代码量倒是挺有趣的,git log本身就自带这个功能,不来看看吗?
182 0
🙊整活向:定期给老板推送同事的代码量
|
人工智能 运维 JavaScript
网站系统告警哪家强
网站系统告警哪家强
115 0
网站系统告警哪家强
|
敏捷开发 安全 架构师
为你的“架构”安排定期体检吧!
架构治理就好比例行体检,可以及时主动发现架构上的不适,尽早介入,尽早处理,避免积累成为沉疴。同时,架构治理也是一次很好的复盘和精进之旅。最后,架构治理还是一次卓有成效的练兵运动。
151 0
为你的“架构”安排定期体检吧!
|
数据采集 移动开发 监控
两把利器,轻松做好十一期间服务器监控保障
由于服务器需要7×24 小时运行,十一期间,为了切实做好服务器的重点保障,电源监控,必不可少。基于成本的考虑,我们决定自己做。如何多快好省,实现一个这样的平台呢?思路是通过服务器自带的远程管理模块读取redfish接口中电源功耗信息,然后采集到时间序列数据库,再通过grafana基于时间和ip做条件筛选做展示。这里就要用到两把开源利器Grafana和Influxdb。
两把利器,轻松做好十一期间服务器监控保障

热门文章

最新文章

相关实验场景

更多