记2017-03-16 9:20将一台数据库节点关机进行硬件升级造成公司核心业务不能访问的事故
2017-03-16 11:03
267 查看
公司数据库使用sql server 2014 AlwaysOn+硬件LB做读写分离,有好几个AlwaysOn集群,此次事故由多个条件共同发生造成的。事故相关有两个集群,这两个集群节点结构如下:
主集群A(核心集群)结点结构如下:
写:DB-01
读:DB-02(同步)
DB-06(异步)
DB-09(异步)
DB-03(异步)
DB-10(异步)
集群A的只读负载均衡节点为DB-02 DB-06 DB-09
集群B(日志、BI分析结果数据)结点结构如下:
写:DB-05
读:DB-03(同步)
DB-10(异步)(事故前在节点在事故中,但不在只读列表中)
注:DB-03和DB-10是所有集群共同的读节点,为的是备份和必不可少的跨集群JOIN以及数据分析(BI),但尽量不做单集群的读操作(除非集群没有多余的读节点,如集群B)
每个AlwaysOn集群本来都做到了≧3个节点的备份,由于DB-10是后来加的,集群B的读就少了一个节点。而开发环境只有一个数据库实例,所有库都在这一个实例上,这是不能在开发时就将问题发现的主要原因。
由于所有集群的帐户都一致,造成可以在集群共同的节点(DB-03和DB-10)可以访问所有数据库,而出事故的Sql竟然是一个跨集群的JOIN,数据库字符串连接的是集群B的只读节点(DB-03)。由于集群B的只读节点包含所有数据库且能访问,因此在正常的情况下SQL不会有任何问题。当DB-03不能服务时这段SQL就会出错(当时DB-10不在集群B的只读列表中,alwayson自动将读节点切换到写节点上)——xxx对象不存在,从而造成核心业务不能访问。
此次事故问题出现在开发环境所有数据库在一个实例上,在生产环境时代码连接的实例也包含所有数据库造成的,当出现问题时就会出错
此次事故的后续解决方案如下:
1.将开发环境的数据库做实例上的隔离
2.每个应用在每个集群有不同的帐户名,在共同节点上对应集群帐户只能访问对应集群的数据库,防止意外的跨集群查询
主集群A(核心集群)结点结构如下:
写:DB-01
读:DB-02(同步)
DB-06(异步)
DB-09(异步)
DB-03(异步)
DB-10(异步)
集群A的只读负载均衡节点为DB-02 DB-06 DB-09
集群B(日志、BI分析结果数据)结点结构如下:
写:DB-05
读:DB-03(同步)
DB-10(异步)(事故前在节点在事故中,但不在只读列表中)
注:DB-03和DB-10是所有集群共同的读节点,为的是备份和必不可少的跨集群JOIN以及数据分析(BI),但尽量不做单集群的读操作(除非集群没有多余的读节点,如集群B)
每个AlwaysOn集群本来都做到了≧3个节点的备份,由于DB-10是后来加的,集群B的读就少了一个节点。而开发环境只有一个数据库实例,所有库都在这一个实例上,这是不能在开发时就将问题发现的主要原因。
由于所有集群的帐户都一致,造成可以在集群共同的节点(DB-03和DB-10)可以访问所有数据库,而出事故的Sql竟然是一个跨集群的JOIN,数据库字符串连接的是集群B的只读节点(DB-03)。由于集群B的只读节点包含所有数据库且能访问,因此在正常的情况下SQL不会有任何问题。当DB-03不能服务时这段SQL就会出错(当时DB-10不在集群B的只读列表中,alwayson自动将读节点切换到写节点上)——xxx对象不存在,从而造成核心业务不能访问。
此次事故问题出现在开发环境所有数据库在一个实例上,在生产环境时代码连接的实例也包含所有数据库造成的,当出现问题时就会出错
此次事故的后续解决方案如下:
1.将开发环境的数据库做实例上的隔离
2.每个应用在每个集群有不同的帐户名,在共同节点上对应集群帐户只能访问对应集群的数据库,防止意外的跨集群查询
相关文章推荐
- RAC数据库当归档文件两个节点都能访问时,就能在一个节点上进行备份及删除
- 我想要求主管给我们升级电脑,但是主管不肯,大家报一报公司电脑的配置,我看我的电脑是不是最差的,顺便谈谈你们公司电脑硬件升级策略
- 用OLE DB进行数据库访问的封装类
- 两台路由器连接,实现一台客户端不能访问指定网站
- 由于db_create_online_log_dest_1参数造成数据库不能启动
- SQL2005系统升级手记之三-设置维护计划进行数据库备份
- IIS出现不能访问数据库故障的解决
- swap导致的数据库不能访问
- 用扩展ACL防止一台主机通过telnet进行访问
- Sqlserver 在查询分析器里如何访问远程的的数据库,进行数据查询更新等操作。
- 关于部署完asp.net程序后不能访问页面也不能连接数据库的问题
- [致歉]DNS服务器的问题造成网站不能正常访问
- 如何恢复一个非用户sa创建的数据库,且使用原用户创建者进行访问
- 用户不能访问数据库,iis服务器
- SQL2005系统升级手记之三-设置维护计划进行数据库备份[转载]
- 创新谈-开发基础框架进行应用与数据库访问的封装-王作敬
- 配置好oms不能搜索到数据库节点的解决办法
- 数据库不能访问
- MFC中ADO访问数据库时引起内存错误0X0000000不能为read
- 安装Oracle9I出现"加载数据库时出错:areasQueries错误",提示停止该组件或所有组件安装,之后安装不能进行