一 硬件架构
1共享的存储
Oracle RAC依赖于共享磁盘体系结构。
共享的磁盘中存放的如下内容,以便各个Node访问:
(1) 数据库文件
(2) 联机重做日志
(3) 控制文件
(4) Oracle Cluster Registry
(5) Voting Disk
2专用网络
Cache Fusion技术使用专用网络将每个节点的物理内存(RAM)有效地组合成一个高速缓存。
(1) 通过在专用网络上传输某个Oracle实例高速缓存中存储的数据,允许其他任何实例访问这些数据。
(2) 在集群节点中传输锁定和其他同步信息保持数据完整性和高速缓存一致性。
专用网络通常是用千兆以太网构建的,但是对于高容量的环境,很多厂商提供了专门为Oracle RAC设计的低延迟、高带宽的专有解决方案。Linux还提供一种将多个物理NIC绑定为一个虚拟NIC的方法来增加带宽和提高可用性。
3公共网络
为维持高可用性,为每个集群节点分配了一个虚拟IP地址(VIP)。 如果主机发生故障,则可以将故障节点的IP地址重新分配给一个可用节点,从而允许应用程序通过相同的IP地址继续访问数据库。
二 软件
在软件级别上,RAC集群中的每个节点需要:
一个操作系统 (多种)
Oracle集群就绪服务 (CRS)一组用于集群环境的与平台无关的系统服务。CRS维护着两个文件:Oracle Cluster Registry (OCR)和Voting Disk。OCR和Voting Disk,这两个文件须以原始分区(RAW)或集群文件系统文件(OCFS)的形式存在于共享磁盘上。虽然CRS与第三方厂商供应的集群件协同工作,但Oracle RAC 10g所需组件只是CRS。
Oracle RAC软件,可选.在一个节点上安装RAC — OUI会自动部署到其他的节点。
一个Oracle自动存储管理实例(ASM
关于Oracle自动存储管理(ASM)的说明:
ASM是Oracle数据库10g中的一个新特性,它以一种与平台无关的方式提供文件系统服务、逻辑容量管理器和软件RAID。Oracle ASM可以条带化和镜像磁盘,从而实现了在数据库被加载的情况下添加或移除磁盘以及自动平衡I/O以删除“热点”。它还支持直接和异步的I/O。
Oracle ASM不是通用的文件系统,只能用于Oracle数据文件、重做日志、控制文件和RMAN快速恢复区。ASM中的文件既可以由数据库自动创建和命名(使用Oracle管理文件特性),也可以由DBA手动创建和命名。由于操作系统无法访问ASM中存储的文件,因此对使用ASM文件的数据库执行备份和恢复操作的唯一途径就是使用恢复管理器(RMAN)。
ASM作为单独的Oracle实例实施,只有它在运行时其他数据库才能访问它。ASM需要的内存不多:对大部分系统来说只需64MB。 在Oracle RAC环境中,ASM实例必须运行在每个集群节点上。
三 安装Llinux
1确认Red Hat Enterprise Linux 4 (RHEL4)的安装 (所有节点)
所需内核:2.6.9-5.EL或更高版本
验证内核版本:
# uname -r 2.6.9-5.ELsmp |
其他所需程序包的版本(或更高版本):
make-3.80-5 gcc-3.4.3-9.EL4 compat-db-4.1.25-9 |
验证已安装的程序包:
# rpm -q make gcc compat-db make-3.80-5 gcc-3.4.3-9.EL4 compat-db-4.1.25-9 |
如果有程序包没有安装的话,则找到需要安装的程序包,例如
#rpm –ivhmake-3.80-5 |
2为Oracle配置Linux
创建Oracle组和用户帐户(所有节点,但是第一个节点和其他节点不同)
在一个节点上如下操作。
# /usr/sbin/groupadd oinstall //建立组oinstall # /usr/sbin/groupadd dba //建立组dba # /usr/sbin/useradd -m -g oinstall -G dba oracle //建立用户oracle # id oracle //查看oracle的ID uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba) # passwd oracle //设置Oracle口令 |
用户ID和组ID在所有集群主机上必须相同,如果采用虚拟机拷贝的方式,则自动一样了。不用如下的操作。
在其余节点上如下操作
# /usr/sbin/groupadd -g 501 oinstall # /usr/sbin/groupadd -g 502 dba # /usr/sbin/useradd -m -u 501 -g oinstall -G dba oracle # id oracle uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba) # passwd oracle //设置Oracle口令,所有节点设置为相同的密码 |
创建挂载点(在所有节点上)
以root用户身份执行以下命令:
# mkdir -p /u01/app/oracle //主目录 # chown -R oracle:oinstall /u01/app/oracle //改变Owner(用户和组) # chmod -R 775 /u01/app/oracle //改变目录的权限 |
配置内核参数(在所有节点上)
以root用户身份登录配置Linux内核参数。
#cat >> /etc/sysctl.conf >>EOF kernel.shmall = 2097152 kernel.shmmax = 2147483648 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 65536 net.ipv4.ip_local_port_range = 1024 65000 net.core.rmem_default=262144 net.core.wmem_default=262144 net.core.rmem_max=262144 net.core.wmem_max=262144 EOF #/sbin/sysctl -p |
为oracle用户设置Shell限制(在所有节点上)
以root用户身份登录执行以下命令,对每个Linux帐户可以使用的进程数量和打开文件的数量设置限制
#cat >> /etc/security/limits.conf >>EOF oracle soft nproc 2047 //proc的软限制 oracle hard nproc 16384 //proc的硬限制 oracle soft nofile 1024 //文件的软限制 oracle hard nofile 65536 //文件的硬限制 EOF #cat >> /etc/pam.d/login >>EOF session required /lib/security/pam_limits.so EOF #cat >> /etc/profile >>EOF //K Shell if [ $USER = “oracle” ]; then if [ $SHELL = “/bin/ksh” ]; then ulimit -p 16384 //同proc的硬限制 ulimit -n 65536 //同文件的硬限制 else ulimit -u 16384 -n 65536 fi umask 022 fi EOF #cat >> /etc/csh.login >>EOF //C Shell if ( $USER == “oracle” ) then limit maxproc 16384 //同proc的硬限制 limit descriptors 65536 //同文件的硬限制 umask 022 endif EOF |
配置Hangcheck计时器(在所有节点上)
该模块是用来监控集群的状态情况。
以root用户登陆
#modprobe hangcheck-timer hangcheck_tick=30 hangcheck_margin=180 //配置 #cat >> /etc/rc.d/rc.local >>EOF //加载 modprobe hangcheck -timer hangcheck_tick=30 hangcheck_margin=180 EOF |
提示1:
linux as4中已经安装了此模块,使用下面的命令确认:
#find /lib/modules -name “hangcheck-timer.o” 看看有没有 #modprobe hangcheck-timer #grep Hangcheck /var/log/messages | tail -2 Jul 31 15:01:49 ha2pub kernel: Hangcheck: starting hangcheck timer 0.5.0 (tick is 30 seconds, margin is 180 seconds). |
配置/etc/hosts (在所有节点上)
以root用户登陆
有些Linux发行版本将主机名与回送地址(127.0.0.1)相关联。 如果出现这种情况,则从回送地址中删除主机名。
用于此指南的/etc/hosts文件:
127.0.0.1 localhost.localdomain localhost 192.168.100.51 ds1-priv.orademo.org ds1-priv # ds1 private 192.168.100.52 ds2-priv.orademo.org ds2-priv # ds2 private 192.168.200.51 ds1.orademo.org ds1 # ds1 public 192.168.200.52 ds2.orademo.org ds2 # ds2 public 192.168.200.61 ds1-vip.orademo.org ds1-vip # ds1 virtual 192.168.200.62 ds2-vip.orademo.org ds2-vip # ds2 virtual |
每个节点有3个IP,一个用于专用网,一个用于公共网络,一个用于虚拟地址
为用户等效性配置SSH(所有节点,第一个节点与其他节点稍有不同)
(1)第一步是生成SSH的公共密钥和专用密钥。
SSH协议有两个版本;版本1使用RSA,版本2使用DSA,因此我们将创建这两种类型的密钥,以确保SSH能够使用任一版本。生成的id_rsa.pub和id_dsa.pub文件是您的公共密钥,id_rsa和id_dsa是私有密匙文件需保密。
在每个节点,以oracle用户身份登录:
$ mkdir ~/.ssh $ chmod 755 ~/.ssh $ /usr/bin/ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/oracle/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/oracle/.ssh/id_rsa. Your public key has been saved in /home/oracle/.ssh/id_rsa.pub. The key fingerprint is: 4b:df:76:77:72:ba:31:cd:c4:e2:0c:e6:ef:30:fc:37 oracle@ds1.orademo.org $ /usr/bin/ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/oracle/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/oracle/.ssh/id_dsa. Your public key has been saved in /home/oracle/.ssh/id_dsa.pub. The key fingerprint is: af:37:ca:69:3c:a0:08:97:cb:9c:0b:b0:20:70:e3:4a oracle@ds1.orademo.org |
(2)第二步将每个主机上的公共密钥文件id_rsa.pub和id_dsa.pub的内容复制到其他每个主机的~/.ssh/authorized_keys文件中
在第一个节点,以oracle用户身份登录:
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys //本地的共享密钥 $ ssh oracle@ds2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys //另外节点的共享密钥is_rsa.pub The authenticity of host ’ds2 (192.168.200.52)’ can’t be established. RSA key fingerprint is d1:23:a7:df:c5:fc:4e:10:d2:83:60:49:25:e8:eb:11. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added ’ds2,192.168.200.52’ (RSA) to the list of known hosts. oracle@ds2’s password: $ ssh oracle@ds2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys //另外节点的共享密钥is_dsa.pub oracle@ds2’s password: $ chmod 644 ~/.ssh/authorized_keys //改变权限 |
现在对其余节点做同样的处理。请注意,这次SSH会提示您输入在创建密钥时所使用的口令短语而非oracle的口令。这是因为第一个主机(ds1)现在知道了第二个主机的公共密钥
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys $ ssh oracle@ds1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys The authenticity of host ’ds1 (192.168.200.51)’ can’t be established. RSA key fingerprint is bd:0e:39:2a:23:2d:ca:f9:ea:71:f5:3d:d3:dd:3b:65. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added ’ds1,192.168.200.51’ (RSA) to the list of known hosts. Enter passphrase for key ’/home/oracle/.ssh/id_rsa’: $ ssh oracle@ds1 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys Enter passphrase for key ’/home/oracle/.ssh/id_rsa’: $ chmod 644 ~/.ssh/authorized_keys |
(3)第三步建立用户等效性(第一个节点)
以oracle用户身份在将要安装Oracle 10g软件的节点(ds1)上:
$ exec /usr/bin/ssh-agent $SHELL $ /usr/bin/ssh-add Enter passphrase for /home/oracle/.ssh/id_rsa: Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa) Identity added: /home/oracle/.ssh/id_dsa (/home/oracle/.ssh/id_dsa) |
注意:用户等效性仅为当前会话建立。如果您切换到其他会话或注销并重新登录,则必须再次运行ssh-agent和ssh-add才能重新建立用户等效性。
(4)第四步测试联通性(所有节点之间)
您现在就可以使用ssh在其他集群主机上不必输入口令而登录、执行程序和复制文件了。
$ ssh ds2 date Sun Jun 27 19:07:19 CDT 2004 |
在远程节点上第一次执行操作时才会出现:
The authenticity of host ’ds2 (192.168.200.52)’ can’t be established. RSA key fingerprint is 8f:a3:19:76:ca:4f:71:85:42:c2:7a:da:eb:53:76:85. Are you sure you want to continue connecting (yes/no)? yes |
所以通过测试连通性(最好公共和私有两个节点名都测试),您不仅确保了远程操作的正常运行,还完成了初始的安全密钥交换。
3准备共享磁盘
三种共享磁盘的方法
(1)Oracle集群文件系统(OCFS)(2) 自动存储管理器(ASM)(3) 原始设备
[OCFS]
OCFS第1版是原始设备的一个优秀替代品。 它不仅更易于管理和维护,而且克服了255个原始设备的限制。但是,它并不是一个通用集群文件系统。 它只能用于存储以下类型的文件:
Oracle数据文件*
联机重做日志 *
归档重做日志
控制文件 *
Spfile
CRS共享文件(Oracle Cluster Registry和CRS voting disk)。*
获取ocfs安装程序
转到http://oss.oracle.com/projects/ocfs并下载适于您的Linux版本的OCFS RPM。您需要三个RPM:ocfs-support、ocfs-tools和ocfs-kernel-specific模块
安装ocfs (在每个节点上,以root身份登陆)
# rpm -Uvh ocfs-support-1.0.10-1.i386.rpm ocfs-tools-1.0.10-1.i386.rpm ocfs-2.4.21-EL-smp-1.0.12-1.i686.rpm Preparing… ########################################### [100%] 1:ocfs-support ########################################### [ 33%] 2:ocfs-tools ########################################### [67%] 3:ocfs-2.4.21-EL-smp ########################################### [100%] Linking OCFS module into the module path [ OK ] |
配置OCFS (在每个节点上,以root身份登陆)
在每个节点上,以root用户身份运行ocfstool:
# ocfstool |
选择Tasks → Generate Config
选择与RAC专用网络相对应的接口
单击OK生成/etc/ocfs.conf文件,然后退出ocfstool
对集群中的每个节点重复这些操作。
在/etc/ocfs2/目录下面将有cluster.conf文件,内容应该大致如下
node: ip_port = 7777 ip_address = 192.168.200.51 number = 0 name = ds1 cluster = ocfs2 node: ip_port = 7777 ip_address = 192.168.200.52 number = 1 name = ds2 cluster = ds cluster: node_count = 2 name = ds 所有节点配置完毕,在所有节点开始加载ocfs # /sbin/load_ocfs /sbin/insmod ocfs node_name=ds1.orademo.org ip_address=192.168.100.51 cs=1795 guid=2FB60EDD8B872FC4216C00010324C023 comm_voting=1 ip_port=7000 Using /lib/modules/2.4.21-EL-smp-ABI/ocfs/ocfs.o Warning:kernel-module version mismatch /lib/modules/2.4.21-EL-smp-ABI/ocfs/ocfs.o was compiled for kernel version 2.4.21-4.ELsmp while this kernel is version 2.4.21-15.0.2.ELsmp Warning:loading /lib/modules/2.4.21-EL-smp-ABI/ocfs/ocfs.o will taint the kernel:forced load See http://www.tux.org/lkml/#export-tainted for information about tainted modules Module ocfs loaded, with warnings |
在所有节点,为OCFS文件系统创建一个挂载点:
#mkdir /u02 |
创建OCFS文件系统(在第一个节点上):
#fdisk /dev/sdb //将共享磁盘分区 #mkfs.ocfs -b 128 -L /u02 -m /u02 -p 0775 -u root -g root /dev/sdb1 –F //-b块大小–L标签名–m加载点/dev/sdb1共享磁盘的分区1 mkfs.ocfs只完成OCFS文件系统初始化工作的一部分。其余的初始化工作在第一次挂载文件系统时进行。 因此,对于新创建的文件系统,您必须在创建它的同一主机上挂载它。 #mount -t ocfs -L /u02 /u02 |
请注意,mount命令使用了在创建文件系统期间所使用的文件系统标签(-L /u02)。 这是一种既引用文件系统又不必记住设备名的便利方法。
要验证已挂载OCFS文件系统,可执行mount命令或运行df:
#mount -t ocfs /dev/sdb1 on /u02 type ocfs (rw) #df /u02 Filesystem 1K-blocks Used Available Use% Mounted on /dev/sdb1 35557856 36064 35521792 1% /u02 |
再次执行
#umount /u02 #mount -t ocfs -L /u02 /u02 |
在所有节点上挂载OCFS文件系统
#mount -t ocfs -L /u02 /u02 |
为了系统启动时自动挂载OCFS文件系统,可以在所有节点的/etc/fstab中添加类似以下的一行:
LABEL=/u02 /u02 ocfs _netdev 0 0 |
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。
-
2017年11月数据库流行度排行榜 半数以上数据库积分减少
数据库知识网站DB-engines更新了2016年11月份的数据库流行度排行榜。TechTarget数据库网站将与您一同关注11月份的榜单排名情况。
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。