Oracle rac集群环境中的特殊问题

备注:本文摘抄于张晓明《大话Oracle RAC:集群 高可用性 备份与恢复》

因为集群环境需要多个计算机协同工作,要达到理想状态,必须要考虑在集群环境下面临的新挑战。

1.并发控制

在集群环境中,关键数据通常是并发存放的,比如放在共享磁盘上。而集群内各个成员的生身份是对等的,所有节点对数据有相同的访问权利。这时就必须有某种机制能够控制节点对数据的访问。

在Oracle rac中,是利用DLM (Distribute Look Management)机制来进行多个实例间的并发控制。

2.健忘症 (Amnesia)

这个问题发生在集群配置文件不是集中存放,而是每个节点都有一个本地副本。在集群正常运行时,用户可以在任何节点更改集群的配置,并且这种更改会自动同步到其他节点。

但考虑这样一种场景:两个节点的集群,节点1因为正常的维护需要被关闭,然后在节点2修改了某些配置,然后关闭节点2,启动节点1。因为之前在节点2做的配置修改没有同步到节点1,所以节点1启动后,它仍然是用旧的配置文件工作,这时就会造成配置丢失,也基于是所谓的"健忘症"。

解决"健忘症"最简单的办法是,整个集群使用一个集群配置文件,无论哪个节点修改了配置信息都是同一分,配置信息对每个节点都是一样的。

Oracle RAC使用OCR DISK 文件来解决这个问题。

3.脑裂 (Split Brain)

在集群里,节点间需要通过某种机制(心跳)了解彼此的健康状况,以确保各节点协调工作。假设只是"心跳"出现故障,但各个节点还在正常运行。这时,每个节点都认为其他节点宕机,自己是整个集群环境中的"唯一健在者",自己应该获得集群的"控制权"。在集群环境中,存储设备都是共享的,(都来控制独享,势必会破坏数据的完整性和一致性)这就意味着数据灾难,这样一种状况就是"脑裂"。

解决这个问题的通常办法是使用投票算法(Quorum Algorithm),这个算法的原理如下:

集群中各个节点需要心跳机制来通报彼此的"健康状况",假设每收到一个节点的"通报"代表一票。对于三个节点的集群,正常运行时,每个节点都会有3票(自己和另外两个节点的通报)。假设节点1的心跳出现故障,但是节点1还在运行:这时整个集群就会分裂为两个小的Partition。节点1自己是一个Partition,节点2和节点3是一个Partition。这时就必须剔出一个Partition,应该剔出哪个Partition呢?

这时节点2和节点3组成的Partition,每个节点有两票;节点1自己是一个partition,节点1只有一票。安装投票算法节点2和节点3组成的小集群获得了控制权,而节点1被踢出,由节点2和节点3组成的新的集群继续对外提供服务。

如果集群只有两个节点,则上面的算法就没有用了,因为每个节点只有一票,没有办法比较。这必须要引入第3个设备Quorum Device。

Quorum Device通常采用的是共享磁盘,这个磁盘也叫Quorum Disk,这个Quorum Disk也代表一票。当新跳出现故障时,两个节点同时去争取Quorum Disk这一票,最早到达的请求被最先满足,后到达的这个节点就无法获得这一票。这时,最先获得Quorum Disk的节点就获得两票,而另一个节点只有一票,就会被踢出集群。

在ORACLE RAC中Voting Disk用来记录节点间成员的状态,当出现脑裂时,仲裁哪个partition获得控制权,其他的partition被踢出。

4.IO隔离 (IO Fencing)

这个问题是脑裂问题的延伸,当集群出现"脑裂"时,必须要能够判断出哪个节点应该获得集群的控制权,哪些节点要被赶出集群,这就是"投票算法"要解决的问题,前一部分已经做了解释。

但仅仅这样做是不够的,还必须保证被赶出来的节点不能操作共享数据。因为这时该节点可能还在运行中,如果不加限制很有可能会修改共享数据。这是IO隔离(IO Fencing)要解决的问题。

IO Fencing实现有硬件和软件两种方式。对于支持SCSI Reserve/Release命令的存储设备,可以使用SG命令实现。正常节点使用SCSI Reserve命令"锁住"存储设备,故障节点发现存储设备被锁后,就知道自己被赶出集群了,也就是说知道自己出现了异常状况,就要自行重启,以恢复到正常工作状态,这个机制也叫做suicide (自杀),Sun和Veritas使用的是这种机制。

STONITH (Shoot The Other Node In The Head)是另一种实现方式,这种方式直接操作电源开关。当一个节点发生故障时,另一个节点如果能够侦测到,就会通过串行口发出命令,控制故障节点的电源开关,通过暂时断电,而后又上当的方式使得故障节点被重启动。这种方式需要硬件支持。

Oracle Rac采用的是软件方式,直接重启故障节点。无论采用哪种方式,IO Fencing目的都是相同的,为了保障故障节点不能再继续访问共享数据。

------摘抄于张晓明《大话Oracle RAC:集群 高可用性 备份与恢复》

时间: 2024-10-13 15:43:45

Oracle rac集群环境中的特殊问题的相关文章

Oracle RAC集群体系结构

一. Oracle集群体系结构 Oracle RAC,全称是Oracle Real Application Cluster,即真正的应用集群,是oracle提供的一个并行集群系统,整个集群系统由Oracle Clusterware (集群就绪软件)和 Real Application Clusters(RAC)两大部分组成. oracle RAC的实质是位于不同操作系统的Oracle实例节点同时访问同一个Oracle数据库,每个节点间通过私有网络进行通信,互相监控节点的运行状态,oracle数据

Oracle RAC集群安装之:Grid软件安装过程蓝屏

前几天在安装一套RAC服务器的过程中,遇到了蓝屏事件,折腾了蛮久(在排查是否存在硬件问题上花费了相当多一部分时间),整个过程大概说明如下: 1.两台华为的PC SERVER,操作系统为WIN SERVER 2008 R2,装11.2.0.3的Oracle集群. 2.第一次安装到准备在第二节点进行GRID安装的步骤时,安装操作所在的节点1蓝屏自动重启了. 3.重启节点1每次都会在出现登陆界面前一刻发生蓝屏. 4.集成部门的同事查看两台服务器的面板,发现蓝屏的服务器在面板上有些指示灯不亮,怀疑是服务

【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)

Oracle 11G RAC数据库安装(八) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体系的总结,一则进行回顾复习,另则便于查询使用.本图文文档亦源于此.阅读Oracle RAC安装与使用教程前,笔者先对这篇文章整体构思和形成进行梳理.由于阅读者知识储备层次不同,我将从Oracle RAC安装前的准备与规划开始进行整体介绍安装部署Oracle RAC.始于唐博士指导,对数据库集群进行

EhCache缓存在集群环境中同步问题

由于 EhCache 是进程中的缓存系统,一旦将应用部署在集群环境中,当每一个节点维护各自的缓存数据,某个节点对缓存数据进行更新,这些更新的数据无法在其它节点中共享,这不仅会降低节点运行的效率,而且会导致数据不同步的情况发生.例如某个网站采用 A.B 两个节点作为集群部署,当 A 节点的缓存更新后,而 B 节点缓存尚未更新就可能出现用户在浏览页面的时候,一会是更新后的数据,一会是尚未更新的数据,尽管我们也可以通过 Session Sticky 技术来将用户锁定在某个节点上,但对于一些交互性比较强

深入探讨在集群环境中使用 EhCache 缓存系统

EhCache 缓存系统简介 EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点,是 Hibernate 中默认的 CacheProvider. 下图是 EhCache 在应用程序中的位置: 图 1. EhCache 应用架构图 EhCache 的主要特性有: 快速: 简单: 多种缓存策略: 缓存数据有两级:内存和磁盘,因此无需担心容量问题: 缓存数据会在虚拟机重启的过程中写入磁盘: 可以通过 RMI.可插入 API 等方式进行分布式缓存: 具有缓存和缓存管理器的侦听接口

集群环境中使用 EhCache 缓存系统

EhCache 缓存系统 : 本章节将要介绍EhCache及EhCache实现分布式的一些解决方案.并针对于这些解决性方案做一个实现,后续将出一个提供项目模块化.服务化.插件化的VieMall快速开发平台,同时集成Dubbo服务化.Zookeeper(分布式调度/分布式配置管理服务).Redis分布式缓存技术及Memcache/Ehcache 二级缓存切换.FastDFS分布式文件系统.ActiveMQ异步消息中间件.Solr搜索.Nginx负载均衡等分布式及读写分离.如果有时间可以深入分表分库

Oracle RAC 集群 SCAN 说明

1   SCAN 概述 之前有网友在我Blog 留言说我的RAC 搭建中没有写SCAN 配置,这个之前应该是有写过,但刚搜了一下,没找到,正好重新整理一下,并做下实验,实验就用Oracle 12c 进行测试. 在Oracle 11g 之前,我们去连接RAC 集群,都是配置如下的内容: dave_rac= (DESCRIPTION = (ADDRESS_LIST = (LOAD_BALANCE = yes) (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP)(HOS

Oracle RAC集群本地时间和远程时间不一致?

事因: 征信数据库数据事件不一致导致数据(RAC集群)混乱,PLSQL查询时间和数据库时间不一致,严重影响业务.因为之前只是偶遇一次,再加上有过MySQL时区解决经验,感觉应该可以很快解决,然而,并非我想的那么简单.如下是整个事件的经过,算是经验分享吧.(有vsp,因此只能截图) 1.查看两台服务器的本地时间,以及时区. 可以看到,Asia/Shanghai CST 北京时间东八区.(GMT代表格林尼治标准时间) 2.用sysdba查看本地时间: AM表示上午,PM表示下午.没有什么异常. 2.

Oracle RAC集群安装

安装企业版Oracle数据库需要安装两部分:Oracle RAC, Oracle Database. Oracle RAC原理请参考这篇文章.本篇原创介绍的是RAC 安装的实操部分,数据库的安装部分请参考这篇文章. 以Oracle 12C为例. Oracle官方网站下载grid 安装包: http://www.oracle.com/technetwork/database/enterprise-edition/downloads/oracle12c-linux-12201-3608234.htm