白宁超 2015年7月18日10:28:41
共享存储在需要将一个 LUN (逻辑单元号)映射给多个节点、为集群提供一个共享的存储卷时,同一个存储 LUN 在各个主机端的 LUNID 必须是相同的。比如:
(一) 在为多个 ESX 节点创建一个 VMFS 卷的时候
(二) 在双机 HA 集群创建共享存储的时候
时间一致性集群模式下,各个节点要协同工作,因此,各主机的时间必须一致。因此,各主机的时间必须一致。各个节点之间的时间差不能超时,一般如果超过 30s,节点很可能会重启,所以要同步各节点的时间。例如,需要配置一个 ntp 时钟服务器,来给 RAC 的各个节点进行时间同步。或者让节点之间进行时间同步,保证各个节点的时间同步,但是无法保证 RAC 数据库的时间的准确性。
互联网络(或者私有网络、心跳线)集群必须依赖内部的互联网络实现数据通讯或者心跳功能。因此,采用普通的以太网还是其他的高速网络(比如 IB),就很有讲究,当然了,还有拿串口线实现心跳信息传递。此外,采用什么样的网络参数对集群整体的性能和健壮性都大有关系。
案例:
XX 市,4 节点 Oracle 10g RAC
操作系统采用的是 RHEL 4,按照默认的安装文档,设置网络参数为如下值:
net.core.rmem_default = 262144
net.core.rmem_max = 262144
执行一个查询语句,需要 11 分钟,修改参数:
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
再次执行仅需 16.2 秒。
固件、驱动、升级包的一致性案例:
XX 市,HPC 集群,运行 LS-DYNA(通用显示非线性有限元分析程序)。
集群存储系统的环境说明:存储系统的 3 个 I/O 节点通过 FC SAN 交换机连接到一个共享的存储。
故障现象
集群到货后发现盘阵与机器直连能通,两个设备接 200E 交换机不通。后经测试交换机 IOS 版本问题导致不能正常认出盘阵的光纤端口,与交换机的供货商联系更新了两次 IOS,盘阵的端口能正常识别,但盘阵与机器相连还是无法找到盘阵。经过今天的测试发现三台 I/O 节点采用的 HBA 卡 firmware 版本不一致。最早接光纤交换机及与盘阵直连的的 I/O1 的 firmware 为 v4.03.02,今天又拿出来的两台 I/O 节点 firmware 为 v4.06.03。用后两台测试后盘阵、机器、交换机之间可以正常通信,到今天晚上为止没有发现异常情况。从目前的情况判断是QLE2460 firmware 为 v4.03.01 的 HBA 卡与 200E IOS V5.3.1 有冲突者不兼容导致的故障。至于新的 HBA 卡 firmware为 v4.06.03 与 200E IOS V5.3.1 连接的稳定性如何还要做进一步测试。
诊断处理结果
I/O 1 节点 HBA 卡的 fimware 升级到 v4.06.03 后连接 200E 找不到盘阵的故障已经得到解决。其实是一个 FCHBA 卡的固件版本不一致引起的问题。
共享文件 OCR 及 Voting DiskOracle Cluster Registry(OCR):记录 OCR 记录节点成员的配置信息,如 database、ASM、instance、 listener、VIP 等 CRS 资源的配置信息,可存储于裸设备或者群集文件系统上。Voting disk : 即仲裁盘,保存节点的成员信息,当配置多个投票盘的时候个数必须为奇数,每个节点必须同时能够连接半数以上的投票盘才能够存活。初次之外包含哪些节点成员、节点的添加和删除信息。
安装在 Oracle RAC 中,软件不建议安装在共享文件系统上,包括 CRS_HOME 和 ORACLE_HOME,尤其是 CRS 软件,推荐安装在本地文件系统中,这样在进行软件升级,以及安装 patch 和 patchset 的时候可以使用滚动升级(rolling upgrade)的方式,减少计划当机时间。另外如果软件安装在共享文件系统也会增加单一故障点。如果使用 ASM 存储,需要为 asm 单独安装 ORACLE 软件,独立的 ORACLE_HOME,易于管理和维护,比如当遇到 asm 的 bug 需要安装补丁时,就不会影响 RDBMS 文件和软件。
脑裂症(split brain)在一个共享存储的集群中,当集群中 heartbeat 丢失时,如果各节点还是同时对共享存储去进行操作,那么在这种情况下所引发的情况是灾难的。ORACLE RAC 采用投票算法来解决这个问题,思想是这样的:每个节点都有一票,考虑有 A,B,C 三个节点的集群情形,当 A 节点由于各种原因不能与 B,C 节点通信时,那么这集群分成了两个 DOMAIN,A 节点成为一个 DOMAIN,拥有一票;B,C 节点成为一个 DOMAIN 拥有两票,那么这种情况B,C 节点拥有对集群的控制权,从而把 A 节点踢出集群,对要是通 IO FENCING 来实现。如果是两节点集群,则引入了仲裁磁盘,当两个节点不能通信时,请求最先到达仲裁磁盘的节点拥用对集群的控制权。网络问题(interconnect 断了),时间不一致;misscount 超时 等等,才发生 brain split,而此时为保护整个集群不受有问题的节点影响,而发生 brain split。oracle 采用的是 server fencing,就是重启有问题的节点,试图修复问题。当然有很多问题是不能自动修复的。比如时间不一致,而又没有 ntp;网线坏了。。这些都需要人工介入修复问题。而此时的表现就是有问题的节点反复重启。
集群软件从 Oracle10g 起,Oracle 提供了自己的集群软件,叫做 Oracle Clusterware,简称 CRS,这个软件是安装 oraclerac 的前提,而上述第三方集群则成了安装的可选项 。同时提供了另外一个新特性叫做 ASM,可以用于 RAC 下的共享磁盘设备的管理,还实现了数据文件的条带化和镜像,以提高性能和安全性 (S.A.M.E: stripe and mirroreverything ) ,不再依赖第三方存储软件来搭建 RAC 系统。尤其是 Oracle11gR2 版本不再支持裸设备,Oracle 将全力推广 ASM,彻底放弃第三方集群组件支持。
Oracle Clusterware 的心跳Oracle Clusterware 使用两种心跳设备来验证成员的状态,保证集群的完整性。
两种心跳机制都有一个对应的超时时间,分别叫做 misscount 和 disktimeout:
reboottime ,发生裂脑并且一个节点被踢出后,这个节点将在reboottime 的时间内重启;默认是 3 秒。用下面的命令查看上述参数的实际值:
在下面两种情况发生时,css 会踢出节点来保证数据的完整,:
(一) Private Network IO time > misscount,会发生 split brain 即裂脑现象,产生多个“子集群”(subcluster) ,这些子集群进行投票来选择哪个存活,踢出节点的原则按照下面的原则:节点数目不一致的,节点数多的 subcluster 存活;节点数相同的,node ID 小的节点存活。
(二) VoteDisk I/O Time > disktimeout ,踢出节点原则如下:失去半数以上 vote disk 连接的节点将在 reboottime 的时间内重启。例如有 5 个 vote disk,当由于网络或者存储原因某个节点与其中>=3 个 vote disk 连接超时时,该节点就会重启。当一个或者两个 vote disk 损坏时则不会影响集群的运行。
如何查看现有系统的配置对于一个已经有的系统,可以用下面几种方法来确认数据库实例的心跳配置,包括网卡名称、IP 地址、使用的网络协议。
? 最简单的方法,可以在数据库后台报警日志中得到。使用 oradebug
SQL> oradebug setmypid
Statement processed.
SQL> oradebug ipc
Information written to trace file.
SQL> oradebug tracefile_name
/oracle/admin/ORCL/udump/orcl2_ora_24208.trc
找到对应 trace 文件的这一行:socket no 7 IP 10.0.0.55 UDP 16878
? 从数据字典中得到:
SQL> select * from v$cluster_interconnects;
SQL> select * from x$ksxpia;
心跳调优和设置
为了避免心跳网络成为系统的单一故障点,简单地我们可以使用操作系统绑定的网卡来作为 Oracle 的心跳网络,以 AIX 为例,我们可以使用 etherchannel 技术,假设系统中有 ent0/1/2/3 四块网卡,我们绑定 2 和 3 作为心跳:在 HPUX 和 Linux 对应的技术分别叫 APA 和 bonding
UDP 私有网络的调优当使用 UDP 作为数据库实例间 cache fusion 的通信协议时,在操作系统上需要调整相关参数,以提高 UDP传输效率,并在较大数据时避免出现超出 OS 限制的错误:
(一) UDP 数据包发送缓冲区:大小通常设置要大于(db_block_size * db_multiblock_read_count )+4k,
(二) UDP 数据包接收缓冲区:大小通常设置 10 倍发送缓冲区;
(三) UDP 缓冲区最大值:设置尽量大(通常大于 2M)并一定要大于前两个值;
各个平台对应查看和修改命令如下:
Solaris 查看 ndd /dev/udp udp_xmit_hiwat udp_recv_hiwat udp_max_buf ;
修改 ndd -set /dev/udp udp_xmit_hiwat 262144
ndd -set /dev/udp udp_recv_hiwat 262144
ndd -set /dev/udp udp_max_buf 2621440
AIX 查看 no -a |egrep “udp_|tcp_|sb_max”
修改 no -p -o udp_sendspace=262144
no -p -o udp_recvspace=1310720
no -p -o tcp_sendspace=262144
no -p -o tcp_recvspace=262144
no -p -o sb_max=2621440
Linux 查看 文件/etc/sysctl.conf
修改 sysctl -w net.core.rmem_max=2621440
sysctl -w net.core.wmem_max=2621440
sysctl -w net.core.rmem_default=262144
sysctl -w net.core.wmem_default=262144
HP-UX 不需要
HP TRU64 查看 /sbin/sysconfig -q udp
修改: 编辑文件/etc/sysconfigtab
inet: udp_recvspace = 65536
udp_sendspace = 65536
Windows 不需要
参考文献
注:本文原创/整理,转载请标注原文出处。(接下来文章即对Oracle RAC真实环境下安装准备、集群安装、数据库安装、测试。为本系列重点内容)
【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 特殊问题和实战经验(五)
标签:
小编还为您整理了以下内容,可能对您也有帮助:
ORACLERAC工作原理
在一个应用环境当中 所有的服务器使用和管理同一个数据库 目的是为了分散每一台服务器的工作量 硬件上至少需要两台以上的服务器 而且还需要一个共享存储设备 同时还需要两类软件 一个是集群软件 另外一个就是Oracle数据库中的RAC组件 同时所有服务器上的OS都应该是同一类OS 根据负载均衡的配置策略 当一个客户端发送请求到某一台服务的listener后 这台服务器根据我们的负载均衡策略 会把请求发送给本机的RAC组件处理也可能会发送给另外一台服务器的RAC组件处理 处理完请求后 RAC会通过集群软件来访问我们的共享存储设备
逻辑结构上看 每一个参加集群的节点有一个的instance 这些instance访问同一个数据库 节点之间通过集群软件的通讯层(munication layer)来进行通讯 同时为了减少IO的消耗 存在了一个全局缓存服务 因此每一个数据库的instance 都保留了一份相同的数据库cache
RAC中的特点是
每一个节点的instance都有自己的SGA
每一个节点的instance都有自己的background process
每一个节点的instance都有自己的redo logs
每一个节点的instance都有自己的undo表空间
所有节点都共享一份datafiles和controlfiles
Oracle还提出了一个缓存融合的技术(Cache fusion)
目的有两个
保证缓存的一致性IXPUB技术博客
减少共享磁盘IO的消耗IXPUB技术博客
因此在RAC环境中多个节点保留了同一份的DB CACHE
缓存融合(Cache fusion)工作原理
****************************************
其中一个节点会从共享数据库中读取一个block到db cache中
这个节点会在所有的节点进行交叉db block copy
当任何一个节点缓存被修改的时候 就会在节点之间进行缓存修改
为了达到存储的一致最终修改的结果也会写到磁盘上
ClusterWare组件
*******************
有四种Service
Crsd 集群资源服务
Cssd 集群同步服务
Evmd 事件管理服务
oprocd 节点检测监控
有三类Resource
VIP 虚拟IP地址(Virtual IP)
OCR Oracle Cluster Registry(集群注册文件) 记录每个节点的相关信息
Voting Disk Establishes quorum (表决磁盘) 仲裁机制用于仲裁多个节点向共享节点同时写的行为 这样做是为了避免发生冲突
RAC的组件
************
提供过了额外的进程 用来维护数据库
LMS Gobal Cache Service Process 全局缓存服务进程
LMD Global Enqueue Service Daemon 全局查询服务守护进程
LMON Global Enqueue Service Monitor全局查询服务监视进程
lishixin/Article/program/Oracle/201311/18345Oracle] RAC 之 - 负载均衡深入解析
负载均衡是指把负载平均分配到集群中的各个节点 从而提高整体性能 Oracle RAC提供两种方式实现负载均衡 以下就为大家详细介绍一下 需要的朋友可以参考下
Oracle RAC提供两种方式实现负载均衡 第一种是纯技术手段 即在用户连接时 根据系统当前的负载情况决定由哪个节点处理用户请求 第二种是面向业务 人为的把应用切分成很多service 通过某个service过来的连接请求都由某个节点处理 下面来具体看看这两种手段
纯技术手段 (面向连接的负载均衡)
客户端负载均衡 配置方法是在客户端tnsnames ora文件中设置LOAD_BALANCE=YES 当客户端发起连接时 会从地址列表中随机选取一个 把连接请求随机分散给各个实例 这个技术的最大缺点在于不能根据各个实例的真实负载情况来分散请求 太过粗糙 因此很少使用
服务器端负载均衡 服务器端负载均衡依赖于Listener收集的负载信息 在数据库运行过程 中 pmon进程会收集系统的负载信息 定期更新至Listener中 如果你配置了Remote_listener参数 pmon进程不但能把负载信息 注册到本地Listener 也可以注册到其它实例的Listener 这样有了pmon自动注册机制后 集群的每个节点的Listener都掌握了所有 节点的负载信息 当收到客户端请求时 会把连接分配给负载最小的实例
lishixin/Article/program/Oracle/201311/19020哪位能介绍下oracle的RAC、集群、双机热备、Dataguard这些东西?
1、RAC就是集群,改变了过去一个实例连接数据库磁阵的处理模式,而是采用多个ORacle实例连接数据库磁阵,各个ORacle实例进行负载均衡,当某个实例down掉,其他实例像备份一样,依然在工作,这样不影响数据库的使用。不像传统采用双机模式,主机宕机,备机接管的模式,这个存在切换时间的问题,而针对集群来说,所有实例都是运行着的,因此不存在切换时间的问题。RAC是oracle的一项收费功能,价格不低哟。如果想用它的话,看看财务有没有这块的预算。
2、双机热备上面已经讲过了“双机模式”,这儿不再讲了。
3、dataguard这个是数据库容灾的一种模式,与前面讲的是不同的概念,是指在正常运行的生产环境之外异地运行的数据库设备(有自己的数据库磁阵),如果生产环境发生数据变动,通过dataguard将变动的数据操作从生产环境实时同步过来,保证了生产环境和容灾环境的数据的一致性,如果生产环境数据库瘫痪了,容灾环境就接管过来。 oracle里类似的容灾模块还有高级复制(物化视图)、streams和goldgate,后者是收费的。其他的都是免费提供的。
oracle rac是什么
RAC,全称real application clusters,译为“实时应用集群”, 是Oracle新版数据库中采用的一项新技术,是高可用性的一种,也是Oracle数据库支持网格计算环境的核心技术。
优点
Oracle RAC主要支持Oracle9i、10g、11g版本,可以支持24 x 7 有效的数据库应用系统,在低成本服务器上构建高可用性数据库系统,并且自由部署应用,无需修改代码。在Oracle RAC环境下,Oracle集成提供了集群软件和存储管理软件,为用户降低了应用成本。当应用规模需要扩充时,用户可以按需扩展系统,以保证系统的性能。
(1)多节点负载均衡;
(2)提供高可用:故障容错和无缝切换功能,将硬件和软件错误造成的影响最小化;
(3)通过并行执行技术提高事务响应时间----通常用于数据分析系统;
(4)通过横向扩展提高每秒交易数和连接数----通常对于联机事务系统;
(5)节约硬件成本,可以用多个廉价PC服务器代替昂贵的小型机或大型机,同时节约相应维护成本;
(6)可扩展性好,可以方便添加删除节点,扩展硬件资源。