免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 729 | 回复: 0
打印 上一主题 下一主题

rac [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-23 08:08 |只看该作者 |倒序浏览

摘要:大家都知道,oracle 9i RAC(以下简称RAC)是oracle里相对比较复杂的部分,很大一部分原因是由于RAC的环境搭建相对不如单实例方便。通常典型的配置是两台主机加一台存储,但是平常我们个人如果想在家研究测试RAC的话,很少会去购买这么多设备来做测试的。幸好,我们有VMware GSX Server(以下简称VMware),通过使用这款非常好的虚拟机模拟工具,我们可以在一台PC电脑上模拟出多台主机加存储的这样一个RAC环境。
    本文首先简要介绍了RAC的原理,随后着重详细叙述了如何在一台PC电脑上,使用VMware构建两台RedHat Linux AS3(以下简称AS3),并虚拟一个共享存储,创建裸设备,最后在实现RAC的搭建。

    1.RAC简介

    简单来说,RAC就是位于多个主机(通常都称为节点)上的多个oracle实例同时管理一个数据库。数据库必须放在共享存储设备上,包括数据文件、控制文件、联机日志以及spfile都必须放在共享存储上,这样每个节点才能同时访问存储设备。每个节点之间通过高速光纤互相连接,并同步内存数据。oracle在管理不同实例里的内存里的数据结构,同时要最大程度的降低I/O,引入了全局缓冲服务(GCS:Global Cache Service),同时还引入了全局锁定服务(GES:Global Enqueue Service)用来在不同节点之间通讯时进行同步管理。这些服务都是通过一组特殊的后台进程完成的,这些后台进程主要包括:

    (1)global cache service processes(LMSn):n从0到9,具体由信息传输的数量决定。用来控制信息到其他实例的流向,同时还管理对全局数据块的访问。LMSn进程同样在不同实例的数据块缓存(buffer cache)里传递数据库镜像(block image)。该进程是Cache Fusion特性的一部分。  
    (2)global enqueue service monitor(LMON):监控全局锁定(global enqueues)及其资源,并提供global enqueues资源的恢复操作。enqueues是用来进行串行化行更新的共享的内存结构。  
    (3)global enqueue service daemon(LMD):管理对全局锁定(global enqueues)以及全局资源的访问。在每个实例中,LMD进程对传入当前实例的对其他资源的访问请求进行管理。

    (4)lock process(LCK)管理non-Cache Fusion资源的请求,比如library cache或row cache的请求。  
    (5)diagnosability daemon(DIAG):获得实例中有关进程失败的诊断信息。该daemon的操作是自动的,并且它会更新alert.log文件,以记录它所做的动作。

    注意:cache fusion表示一种在RAC里的非磁盘交互方式的内存同步机制。该机制使得获得block的实例能够将block直接从内存转移到需要该block的实例的SGA里去。这样,由于减少了磁盘交互,所以将block从一个实例转移到另一个实例的性能提高很多。而且管理也更加简便。

    RAC能够对客户端的连接请求进行负载均衡,把所有客户的连接尽可能的平均分布在不同的实例上。同时,RAC还提供failover的功能,也就是说如果其中一个节点发生意外,只要这个时候连在该损坏节点上的session没有正在进行事务运行,则该session不需要退出后重新登录,oracle会自动将该session连接到一个可用的节点上,从而保证了7×24应用的安全性和稳定性。  
    不过,RAC不提供容灾的功能,也就是说如果共享存储损坏,仍然会导致整个应用崩溃。所以,需要采用其他容灾方案结合使用,比如RAC+DataGuard等。
[email=www@bitscn@com][/email]
    2.准备工作  
    VMware GSX Server:笔者测试所使用的是3.2版本,建议使用3.2及以上的版本。
    Linux:笔者使用的是RedHat Linux AS3。请使用AS2.1以上版本的linux。因为AS2.1以下的版本如果要
    支持RAC需要进行很多额外的配置,比如watchdog之类的,到了AS2.1以后缺省都不使用了,而是使用hangcheck,如果要使用watchdog,需要进行很多不必要的配置。安装介质可以是光盘,也可以是ISO文件。笔者使用的是ISO文件。
    Oracle:笔者使用的是oracle 9204 for linux,可以直接从oracle的官方网站上下载。笔者是从oracle官方网站上下载下来的三个压缩包。  
    主要的准备工作就是这些,当然安装过程中可能还会需要其他的一些软件,比如plainmaker等。在需要的时候,笔者也会说明如何使用这些软件的。  



[/url]
3.安装虚拟节点
    3.1 创建虚拟节点

    VMware安装好以后,进入主界面,我们就可以创建两个虚拟节点。点击File->New Virtual Machine…,在打开的窗口中,在选择所安装的操作系统时,我们选择RedHat Enterprise Linux 3,其他都选择缺省值,点击next,一直到让你输入disk size时,缺省事4G,我们改成8G,最后点击finish。这样就创建好了一个虚拟节点,取名为linux1。同样的方法,我们创建第二个虚拟节点,取名为linux2。

    3.2安装linux
[email=DL@bitsCN_com][/email]
    创建完两个虚拟节点以后,我们要开始安装linux了。在窗口的左边的Inventory框里,右键节点linux1,选择virtual machine settings…,在弹出的框中,我们选中CD-ROM,然后选择Use ISO Image,并输入相应的linux安装介质的第一个ISO文件的位置,如下图所示。选择ok以后,点击Power->Power On,相当于为节点
   
  
    加电,剩下的工作与在单PC机器上安装linux过程一样。这里提一点,就是在给磁盘分区时,如果不使用LVM,那么在分区时,/boot给120M,/swap给256M,/给2900M,然后再创建一个/oracle,把剩下的空间都给/oracle。在安装过程中,当提示需要换另外一张盘时,你只要再次进入图一所示界面,更改ISO文件并确定以后,再进入虚拟机,选择提示中的ok即可。同样的方法,我们可以安装好另外一台虚拟机上的linux。

    RAC里每个节点都需要两块网卡并使用固定ip,一块作为两个节点互相内部通信用,另外一块作为外部连接用。我们同样的,选择linux1,进入图一界面,选择add按钮,然后选择Ethernet Adapter,然后都选择缺省值并点击next直到结束。这样就为linux1添加了第二块网卡。同样的方法为linux2添加第二块网卡。分别启动两个节点以后,我们在linux为网卡配置ip地址。笔者的配置是linux1的内部通信ip为:134.251.0.140,外部通信ip为:134.251.114.141。而linux2的内部通信ip为:134.251.0.141,外部通信ip为:134.251.114.140。  
    4.安装共享磁盘
[email=www@bitscn@com][/email]

    4.1 创建共享磁盘
[email=www@bitscn@com][/email]
    在VMware里,共享磁盘需要使用plainmaker.exe这个工具来创建。可以到VMware GSX Server的安装目录下找该工具是否存在。如果不存在,则可以到google上搜索。很多站点提供该工具的下载。进入命令提示符,输入下面的命令来创建共享磁盘。

    C:\>plainmaker D:\virtualos\sharedisk.pln 2048m

    该命令运行以后,就会在D:\virtualos目录下创建一个名位sharedisk.pln的共享磁盘,大小为2G。

    4.2 添加共享磁盘
[email=www@bitscn@com][/email]

    共享磁盘安装好以后,我们需要把它加入到前面安装好的两台linux虚拟机里。选择linux1,仍然进入到图一所示的界面里,选择左边的add按钮,在弹出的框中,选择Hard Disk,并点击next,选择方式如下面图二
     
    所示,并点击next,输入我们刚才创建的共享磁盘名:D:\virtualos\sharedisk.pln,然后不要点击finish,要点击advanced,选择磁盘为SCSI 1:0。如下图三所示。最后点击finish。这样,我们就为linux1节点添加了共享存储。随后,我们用同样的方法为linux2节点也添加该共享存储。
   

[email=www@bitscn@com][/email]




4.3 配置共享磁盘
    把共享存储添加到两个节点以后,还不算完,必须修改两个虚拟机的配置文件。在每个节点所在目录下都存在一个后缀名为vmx的文件,这就是虚拟机的配置文件了,用notepad打开,把下面三行记录添加进去。注意,这三行中的每一行都不能重复,所以仔细检查一下vmx文件,确保这三行记录唯一。每个节点的配置文件都必须添加这三行记录。  
    disk.locking = FALSE
    scsi1.sharedBus = "virtual"
    scsi1:0.mode = "persistent"
[email=www@bitscn@com][/email]
    到这里,我们才算是为两个节点都配置好了共享存储。分别启动两个linux节点以后,进入linux,我们可以使用如下命令来确定两个节点是否都能够找到该存储了。如果提示出有设备,则表示能够识别共享存储。
[email=www@bitscn@com][/email]
fdisk –l /dev/sdb
  
    5.设置两个节点的互相信任机制
    由于RAC的节点之间需要完全无障碍的访问,因此需要设定主机名互相访问以及互相信任机制。注意:以下所有步骤都必须在两台节点上各自完成。  
    5.1 设置主机名

    首先,RAC之间互相不能通过ip来访问,而必须使用主机名来访问,因此需要设定hosts内容。笔者设定的是节点linux1的内部访问主机名为linux1-prv,而外部访问节点名为linux1;节点linux2的内部访问主机名为linux2-prv,而外部访问节点名为linux2。需要将这些信息添加到/etc/hosts文件里去,如下所示。注意,要将127.0.0.1原来所对应的linux1改名为localhost。  
    # Do not remove the following line, or various programs
    # that require network functionality will fail.
    127.0.0.1localhostlocalhost.localdomainlocalhost
    134.251.114.140 linux1
    134.251.114.141 linux2
    134.251.0.140linux1-prv
    134.251.0.141linux2-prv  
    同样的,修改linux2的/etc/hosts文件,也要将127.0.0.1原来所对应的linux2改名为localhost。其他设置与linux1节点一样。设置好以后,在linux1上ping linux2,在linux2上也ping linux1,如果都通的话,说明设置无误。  
    5.2 设置telnet访问
[email=www@bitscn@com][/email]
    (1)通常缺省都会安装telnet-client。主要确定是否安装了telnet-server软件。


    [root@linux1 root]# rpm –qa | grep telnet

[email=DL@bitsCN_com][/email]

    (2)如果没有安装,则从AS3安装介质上找到该rpm包,并进行安装。  
    (3)安装好以后,需要启动telnet服务。输入以下命令,并从弹出的框中选中telnet后确认。


    [root@linux1 root]# ntsysv
  
    (4)激活telnet服务  
    [root@linux1 root]# service xinetd restart

    (5)设置允许root进行telnet登录  
    [root @linux1 /root]# vi /etc/pam.d/login
  
    将authrequiredpam_securetty.so这一行开头添加#,从而注释该行。
5.3 设置rlogin、rsh
    由于在第一个节点上安装oracle软件时,oracle会自动将第一个节点上安装完毕的文件拷贝到第二个节点上,因此需要配置rlogin和rsh以及rcp等。

    (1)确定是否安装了rsh-server软件。
[email=www@bitscn@com][/email]
    [root@linux1 root]# rpm –qa | grep rsh
  
    (2)如果没有安装,则从AS3安装介质上找到该rpm包,并进行安装。  
    (3)安装好以后,需要启动rsh、rlogin、rexec服务。输入以下命令,并从弹出的框中选中rsh、rlogin、rexec后确认。  
    [root@linux1 root]# ntsysv
    (4)激活rsh、rlongin服务
[email=DL@bitsCN_com][/email]

    [root@linux1 root]# service xinetd restart
  
    (5)修改/etc/securetty

    [root@linux1 root]# echo "rexec" >> /etc/securetty;echo "rlogin"
>> /etc/securetty;echo "rsh" >> /etc/securetty
  
    (6)设置允许root进行rsh、rlogin


    [root @linux1 /root]# vi /etc/pam.d/rlogin
  
    将authrequiredpam_securetty.so这一行开头添加#,从而注释该行。  
    (7)在/etc目录下建立hosts.equiv文件,表示两台linux节点互相信任。


    [root @linux1 /root]# vi /etc/hosts.equiv
  
    在该文件里添加如下内容:
[email=DL@bitsCN_com][/email]
    linux1
    linux2
    linux1-prv
    linux2-prv

    (8)在root的$HOME目录下,建立.rhosts文件。  
    [root @linux1 /root]# vi .rhosts
  
    在该文件里添加如下内容。这样,root用户就可以直接rlogin、rsh而不用输入密码。

    linux1 root
    linux2 root
    linux1-prv root
    linux2-prv root

    (9)配置完以后,我们可以测试一下是否成功。  
    [root @linux1 /root]# rlogin linux2
    [root @linux1 /root]# rsh –l root linux2 cat /etc/hosts
    [root @linux1 /root]# rcp /tmp/testlinux2:/tmp
  
   6.修改linux内核参数以及其他相应配置


    [root @linux1 /root]# vi /etc/sysctl.conf
  
    在该文件末尾添加如下内容:
    kernel.shmmax = 2147483648
    kernel.shmmni = 4096
    kernel.shmall = 2097152
    kernel.sem = 250 32000 100 128
    fs.file-max = 65536
    这里,对每个参数值做个简要的解释和说明。

    (1)shmmax:该参数定义了共享内存段的最大尺寸(以字节为单位)。缺省为32M,对于oracle来说,该缺省值太低了,通常将其设置为2G。
    (2)shmmni:这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096 。通常不需要更改。
    (3)shmall:该参数表示系统一次可以使用的共享内存总量(以页为单位)。缺省值就是2097152,通常不需要修改。
    (4)sem:该参数表示设置的信号量。
    (5)file-max:该参数表示文件句柄的最大数量。文件句柄设置表示在linux系统中可以打开的文件数量。  
    修改好内核以后,执行下面的命令使新的配置生效。  
    [root @linux1 /root]# /sbin/sysctl -p

[email=www@bitscn@com][/email]

    通常,出于性能上的考虑,还需要进行如下的设定,以便改进Oracle用户的有关 nofile(可打开的文件描述符的最大数)和nproc(单个用户可用的最大进程数量)。方法如下:  
    [root @linux1 /root]# vi /etc/security/limits.conf
  
    在该文件里添加如下内容:

    oracle soft nofile 65536
    oracle hard nofile 65536
    oracle soft nproc 16384
    oracle hard nproc 16384
[email=DL@bitsCN_com][/email]



: 7.配置 hangcheck-timer 内核模块

    Oracle9202以前,都是使用watchdog来检查系统是否挂起。从9202以后,oracle使用hangcheck-timer模块。hangcheck-timer模块被加载到内核中,能够定时检查系统是否挂起。有个可配置的参数用来表示多少时间以后系统没响应就认为是挂起。该模块在AS3中是自带的。

    使用如下命令检查该模块是否存在:
[email=www@bitscn@com][/email]

    [root @linux1 /root]# find /lib/modules -name "hangcheck-timer.o"
  

modprobe hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
    使用相应的参数加载该模块:  
    [root @linux1 /root]# /sbin/insmod hangcheck-timer hangcheck_tick=30
hangcheck_margin=180

[email=DL@bitsCN_com][/email]

    这里解释一下两个参数的含义:

    hangcheck_tick:该参数定义了模块启动的间隔时段。其默认值为 60 秒。 Oracle建议将其设置为 30 秒。
    hangcheck_margin:该参数定义了多少时间以后系统没响应就认为是挂起。以秒为单位。其默认值为 180秒。Oracle 建议将其设置为 180 秒。  
    检查该模块是否被成功加载:
[email=www@bitscn@com][/email]

    [root @linux1 /root]# grep Hangcheck /var/log/messages
  
    为了在linux重启以后,自动加载该模块,可以将加载模块的命令添加到/etc/modules.conf中  
    [root @linux1 /root]# echo "options hangcheck-timer hangcheck_tick=30
hangcheck_margin=180" >> /etc/modules.conf
  
   8.创建oracle用户和dba组
[email=www@bitscn@com][/email]

    [root @linux1 /root]# groupadd dba
    [root @linux1 /root]# useradd –g dba oracle
    [root @linux1 /root]# passwd oracle
    创建安装oracle所需要的目录。  
   [root @linux1 /root]# mkdir –p /oracle/ora9/product/9.2
    [root @linux1 /root]# chown –R oracle.dba /oracle/ora9
  
     为oracle用户配置.bashrc文件。
[email=DL@bitsCN_com][/email]

    [root @linux1 /root]# su – oracle
    [oracle@linux1 oracle]$ vi .bashrc
  



本文来自ChinaUnix博客,如果查看原文请点:[url]http://blog.chinaunix.net/u1/44757/showart_482473.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP