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

本文涉及的产品
日志服务 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模拟数据,通过数据加工对数据进行清洗并归档至OSS中进行存储。
相关文章
|
7月前
|
监控 安全 Linux
应急响应与系统加固(护网蓝初面试干货)
应急响应与系统加固(护网蓝初面试干货)
156 0
|
10月前
|
Java 程序员 开发者
太卷了!这份Java性能调优手册仅上线1小时,竟被恶意封杀下架
在各大厂的面试中,性能优化的问题肯定不会缺席,这足以说明其重要性。今天给大家带来的便是由资深程序员葛一鸣老师写的《Java程序性能优化实战》,同样是没有开源版本,我会将领取方式放在文末 Java程序性能优化实战 我看过几篇讲解Java程序性能优化的图书,要么是内容不够深入,要么是过于晦涩难懂,不够浅显,而这本书却让我眼前一亮,很多困扰我的问题都能在书中找到答案。它涵盖了各种程序员所需的性能优化知识点,是Java开发者提升水平的必读佳作 来看看目录内容,里面一定有你想看的 亮个相吧(狗头.jpg) 想要更进一步的Java开发者一定不能
58 0
|
前端开发 Shell 程序员
🙊整活向:定期给老板推送同事的代码量
总有领导想把公司往倒闭里整。但是每天推送每个人的代码量倒是挺有趣的,git log本身就自带这个功能,不来看看吗?
126 0
🙊整活向:定期给老板推送同事的代码量
|
域名解析 运维 网络协议
|
域名解析 运维 网络协议
|
人工智能 运维 JavaScript
网站系统告警哪家强
网站系统告警哪家强
86 0
网站系统告警哪家强
|
敏捷开发 安全 架构师
为你的“架构”安排定期体检吧!
架构治理就好比例行体检,可以及时主动发现架构上的不适,尽早介入,尽早处理,避免积累成为沉疴。同时,架构治理也是一次很好的复盘和精进之旅。最后,架构治理还是一次卓有成效的练兵运动。
115 0
为你的“架构”安排定期体检吧!
|
Web App开发 运维 前端开发
【分享】前端线上紧急排查工具
【分享】前端线上紧急排查工具
318 0
【分享】前端线上紧急排查工具
|
数据采集 移动开发 监控
两把利器,轻松做好十一期间服务器监控保障
由于服务器需要7×24 小时运行,十一期间,为了切实做好服务器的重点保障,电源监控,必不可少。基于成本的考虑,我们决定自己做。如何多快好省,实现一个这样的平台呢?思路是通过服务器自带的远程管理模块读取redfish接口中电源功耗信息,然后采集到时间序列数据库,再通过grafana基于时间和ip做条件筛选做展示。这里就要用到两把开源利器Grafana和Influxdb。
两把利器,轻松做好十一期间服务器监控保障

热门文章

最新文章