iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Oracle RAC如何避免脑裂
  • 294
分享到

Oracle RAC如何避免脑裂

2024-04-02 19:04:59 294人浏览 安东尼
摘要

bebeoracle CSSD(Cluster ServicesSynchronization Daemon)进程通过两个互相独立的心跳信号来监控集群节点的健康状况:network heart beat和d

bebeoracle CSSD(Cluster ServicesSynchronization Daemon)进程通过两个互相独立的心跳信号来监控集群节点的健康状况:network heart beat和disk heart beat

 

网络心跳:集群里每一个节点的CSSD进程的一个线程每秒会通过inteconnect发送一个tcp协议心跳信号给RAC里面的所有节点(包括自己)。如果心跳信号传输出现问题,TCP协议的自我矫正机制会重新传送数据包。这种情况下,oracle不会关注传输细节。

 

磁盘心跳:集群里每一个节点的CSSD进程会在voting磁盘的特定位置的数据块通过读写数据维持心跳信号。此外,每个节点还会监控其它节点CSSD进程维护的心跳信号数据块。如果发现某个节点在指定的时间内没有写入磁盘心跳,这个节点就被判决为死亡。如果一个节点处于未知状态,其它节点也会被通过更新它的voting disk上的kill block状态的方式把它驱逐出集群。

 

总的来说,网络心跳每秒都会发起,如果一个节点超出了参数css_miscount time设定的时间没有响应,就会被踢出集群。类似的,集群里的每个节点每秒读写voting disk特定区域,出现超时响应的节点也会被踢出集群。下面是节点面临的心跳可能出现的状况及后果:

Oracle RAC如何避免脑裂

脑裂: 在RAC环境里,所有的oracle实例都是通过高速私有网络互相通讯的。这个私有网络的链路都应该配置成冗余的,并且仅用于实例之间的oracle数据块传输。以含有运行在两台机器上的2个实例组成的RAC集群为例,当RAC集群里服务器运行正常,两个实例本身也运行正常的情况下,两个oracle实例不能够通过私有网络互相通讯时,如果不做预防,两个实例会各自独立的运行并对外提供服务。由于两个实例失去了互相之间的通讯,都会认为对方已死,从而不再使用原有的保护共享数据的机制,这会导致共享数据混乱。这就是脑裂。

 

IOfencing:如果操作系统正常但是oracle实例出现故障导致时,recovery进程可能会把之前故障实例残留的写操作执行。由于在这种情况下写操作无法保持正确的写入顺序,他们可能会导致数据混乱,所以必须阻止。所以,在集群环境里,如果一个节点故障,必须阻止它对共享存储的写操作。这种方法称之为IO fencing。

 

简单多数原则:为了维持RAC集群正常运行,配置的仲裁盘必须有一半以上数量正常运行。


下面两个实例用来理解当心跳出现问题时,仲裁盘的作用机制。

例子1,如下图,三个节点的集群,配有3个仲裁盘. node3与其它两个节点的网络通讯(network heartbeat)中断。但是,CSSD进程通过读仲裁盘状态发现所有的节点都可以写仲裁盘,这说明出现了脑裂。于是节点1和节点2就会更新仲裁盘上的节点3 kill block状态。然后节点3的CSSD进程通过读仲裁盘上对应的kill block,知道自己应该退出集群。于是执行IO fencing,然后关闭自己。


Oracle RAC如何避免脑裂

例子2,配有3个仲裁盘的双节点集群,disk heartbeat出现问题,导致节点1可以访问2个仲裁盘,节点2可以访问1个仲裁盘。这时基于简单多数原则,节点1(两个仲裁盘)会发出自杀指令给节点2。这样节点2就会退出集群。

 

例子2中更进一步的问题,如果出现一个仲裁盘故障导致两个节点都不能访问它,但是另外两个仲裁盘对两个节点都可访问。这种情况下,如何判定该退出哪个节点?此时,由于两个节点可以访问的仲裁盘满足简单多数原则,如果此时Network heartbeat正常,RAC会正常运行,不会踢出任何一个节点。如果不幸,又有一个仲裁盘故障导致它不能被两个node访问,又会发生什么?

此时,网络正常,但是仲裁盘低于简单多数,所以RAC必然重构,但是两个节点条件一致。RAC会选择保留最低节点号的节点,在这个案例中,就是node1被保留,node2被踢出。


本文大部分内容来自需要科学上网的英文网站https://nitishanandsrivastava.Wordpress.com/,我对其做了裁剪和引申。


您可能感兴趣的文档:

--结束END--

本文标题: Oracle RAC如何避免脑裂

本文链接: https://www.lsjlt.com/news/40915.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何预防keepalived脑裂问题
    如何预防keepalived脑裂问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。(1)可以采用第三方仲裁的方法。由于keepalived体系中主备两台机器所处...
    99+
    2023-06-06
  • Zookeeper如何解决脑裂问题?
    什么是脑裂?脑裂(split-brain)就是“大脑分裂”,也就是本来一个“大脑”被拆分了两个或多个“大脑”,我们都知道,如果一个人有多个大脑,并且相互独立的话,那么会导致人体“手舞足蹈”,“不听使唤”。脑裂通常会出现在集群环境中,比如El...
    99+
    2023-06-05
  • Oracle RAC如何搭建
    这篇文章将为大家详细讲解有关Oracle RAC如何搭建,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。RAC搭建一、准备工作. 1规划. 1网络配适器准备(rac1& rac2). 2关闭防火墙和...
    99+
    2023-06-01
  • 如何避免Oracle数据库表被锁定?
    如何避免Oracle数据库表被锁定? Oracle数据库是企业级应用系统中常用的关系数据库管理系统,而数据库表被锁定是在数据库操作中一个常见的问题。当一个表被锁定后,其他用户的访问权限...
    99+
    2024-03-09
    优化查询 事务管理 锁定策略 sql语句
  • 如何避免mysql死锁
    这篇文章主要介绍了如何避免mysql死锁,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。如何尽可能避免死锁:1、以固定的顺序访问表和行。比如两个更...
    99+
    2024-04-02
  • oracle 11G RAC如何改IP
    这篇文章将为大家详细讲解有关oracle 11G RAC如何改IP,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 #host IP10.16...
    99+
    2024-04-02
  • 如何避免sql注入
    避免sql注入的方法:在发布前,进行SQL注入检测。严格限制Web应用的数据库的操作权限。使用正则表达式过滤传入的参数。对进入数据库的特殊字符进行转义处理,或编码转换。使用 PreparedStatement方法,参数化查询方式,避免SQL...
    99+
    2024-04-02
  • 如何避免CSRF攻击
    CSRF是一种让人难以防范的漏洞。不过还是要注意一下的,如果浏览器提示“链接和证书域名不匹配”的警告信息时,请不要继续浏览,应立即关闭浏览器或者返回上一页。可使用某些带有“隐私浏览”功能的浏览器,比如Safari。“隐私浏览”功能可以让用户...
    99+
    2024-04-02
  • 如何避免Oracle服务丢失的情况发生?
    如何避免Oracle服务丢失的情况发生? Oracle作为一款重要的数据库管理系统,在企业中发挥着至关重要的作用。然而,有时候由于各种原因,可能会出现Oracle服务丢失的情况,给企业...
    99+
    2024-03-09
    定期备份数据 高可用性配置 监控服务状态 自动重启 数据丢失
  • 如何避免Oracle数据库中的重复索引
    标题:如何避免Oracle数据库中的重复索引,需要具体代码示例 在数据库中,索引是一种非常重要的数据结构,用来加快数据库的查询速度。然而,有时候在设计数据库时会出现重复创建索引的情况,...
    99+
    2024-03-07
    重复索引识别 删除重复索引 优化索引配置 sql语句
  • java如何避免csrf攻击
    在java中使用spring实现避免csrf攻击通过将以下代码添加到Java项目中即可实现避免csrf攻击的功能。package com.yihaomen.intercepter;import javax.servlet.http.Cook...
    99+
    2024-04-02
  • ORACLE 11G RAC如何修改IP
    这篇文章给大家分享的是有关ORACLE 11G RAC如何修改IP的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。原IP:#Public IP192.168.42.201 rac1...
    99+
    2024-04-02
  • Oracle 12c RAC如何安装PSU
    这篇文章给大家分享的是有关Oracle 12c RAC如何安装PSU的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、准备工作1,数据库环境操作系统版本   ...
    99+
    2024-04-02
  • 云服务器如何避免别人看到电脑内容
    云服务器本身是一个虚拟环境,运行在云服务提供商的数据中心中,因此不同于传统个人电脑,其内容不会直接显示在用户的本地设备上。但是,为了...
    99+
    2023-09-12
    云服务器 电脑
  • js如何避免==的使用
    小编给大家分享一下js如何避免==的使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!避免==的使用这里你可能会有疑问了,有些人喜欢用==,有些人喜欢用===,大...
    99+
    2023-06-27
  • python如何避免SQL注入
    python避免SQL注入的方法:python中的pymysql在执行sql前,会对sql中的特殊字符进行转义,如:def escape_string(value, mapping=None):"""escape_string escape...
    99+
    2024-04-02
  • c#如何避免sql注入
    c#避免sql注入的方法:在Web.config文件中,下面增加一个标签,例如:  < appSettings>  < add key="safeParameters"&n...
    99+
    2024-04-02
  • 如何避免ApacheBeanutils属性copy
    目录引言问:如果是你来写对象间赋值的代码,你会怎么做?问:我听说工具类最近很卷,你用的哪个啊?问:为啥会出现严重警告?性能瓶颈 --> 日志太多也是病通过 jvisualvm....
    99+
    2023-01-13
    Apache Beanutils属性copy Apache Beanutils
  • 如何避免表单sql注入
    避免表单sql注入的方法:将所有独立的单引号替换成双引号。删除用户输入内容中的所有连字符。限制表单或查询字符串输入的长度。检查用户输入的合法性,确信输入的内容只包含合法的数据。将用户登录名称、密码等数据加密保存。检查提取数据查询所返回的记录...
    99+
    2024-04-02
  • python如何避免数据复制
    这篇文章主要介绍python如何避免数据复制,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!避免数据复制# 不推荐写法,代码耗时:6.5秒def main():   &...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作