在 RHEL 5.5 下应用 RHCS 实现 Oracle HA

具体的网络配置过程我就不在这里罗嗦了,基本跟 Oracle RAC 相同,每个节点两个网卡其中一个做心跳线。两个节点的 /etc/hosts 配置文件内容一致,内容如下:

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
10.10.6.203 testrac1
192.168.122.101 testrac1-priv

10.10.6.207 testrac2
192.168.122.102 testrac2-priv

10.10.6.208 testHA

2. 存储配置

在 MSA2312fc 控制界面下划分一个 150G 的空间给两个节点,然后解决多路径问题并进行分区和格式化操作。具体的操作请参见这篇文章。

3.安装和配置 RHCS

RHEL 5.5 的安装光盘镜像中包含了安装 RHCS 所有需要的安装包,配置 yum 安装源,然后进行安装。在每个节点上都执行如下操作:

[root@testrac1 ~]# vi /etc/yum.repos.d/aeon.repo
[Server]
name=Server
baseurl=file:///redhat/Server
enabled=1
gpgcheck=0
gpgkey=

[Cluster]
name=Cluster
baseurl=file:///redhat/Cluster
enabled=1
gpgcheck=0
gpgkey=

[ClusterStorage]
name=ClusterStorage
baseurl=file:///redhat/ClusterStorage
enabled=1
gpgcheck=0
gpgkey=

[VT]
name=VT
baseurl=file:///redhat/VT
enabled=1
gpgcheck=0
gpgkey=

[root@testrac1 ~]#

[root@testrac1 /]# cd media/
[root@testrac1 media]# mount -o loop RHEL_5.5_X86_64.iso /redhat

[root@testrac1 media]# yum clean all
Loaded plugins: rhnplugin, security
Cleaning up Everything
[root@testrac1 media]#

[root@testrac1 media]# yum groupinstall Clustering
Loaded plugins: rhnplugin, security
This system is not registered with RHN.
RHN support will be disabled.
Setting up Group Process
Resolving Dependencies

... ...

Installed:
Cluster_Administration-en-US.noarch 0:5.2-1 cluster-cim.x86_64 0:0.12.1-2.el5 cluster-snmp.x86_64 0:0.12.1-2.el5
ipvsadm.x86_64 0:1.24-10 luci.x86_64 0:0.12.2-12.el5 modcluster.x86_64 0:0.12.1-2.el5
piranha.x86_64 0:0.8.4-16.el5 rgmanager.x86_64 0:2.0.52-6.el5 ricci.x86_64 0:0.12.2-12.el5
system-config-cluster.noarch 0:1.0.57-3

Dependency Installed:
cman.x86_64 0:2.0.115-34.el5 httpd.x86_64 0:2.2.3-43.el5 net-snmp.x86_64 1:5.3.2.2-9.el5
oddjob.x86_64 0:0.27-9.el5 oddjob-libs.x86_64 0:0.27-9.el5 openais.x86_64 0:0.80.6-16.el5
perl-Net-Telnet.noarch 0:3.03-5 perl-XML-LibXML.x86_64 0:1.58-6 perl-XML-LibXML-Common.x86_64 0:0.13-8.2.2
perl-XML-NamespaceSupport.noarch 0:1.09-1.2.1 perl-XML-SAX.noarch 0:0.14-8 pexpect.noarch 0:2.3-3.el5
php.x86_64 0:5.1.6-27.el5 php-cli.x86_64 0:5.1.6-27.el5 php-common.x86_64 0:5.1.6-27.el5
python-imaging.x86_64 0:1.1.5-5.el5 tix.x86_64 1:8.4.0-11.fc6 tkinter.x86_64 0:2.4.3-27.el5
tog-pegasus.x86_64 2:2.9.1-2.el5

Complete!
[root@testrac1 media]#

[root@testrac1 media]# chkconfig --add cman
[root@testrac1 media]# chkconfig --add rgmanager

[root@testrac1 media]# chkconfig cman on
[root@testrac1 media]# chkconfig rgmanager on

在节点1的图形界面下打开 system-config-cluster 工具进行相应的 RHCS 配置,依次执行如下操作:创建 cluster ,添加节点,配置 fence 设备(如果没有可以不设置),创建故障域,田间节点到故障域,添加三种资源,创建服务(通过服务把故障域和资源整合在一起),请注意添加资源顺序,首先是文件系统,然后是 IP 资源,最后是脚本资源。保存配置文件,并把该配置文件复制到节点2的相同目录下。具体的 /etc/cluster/cluster.conf 配置内容如下:

<?xml version="1.0"?>
<cluster alias="OracleHA" config_version="15" name="OracleHA">
<fence_daemon post_fail_delay="0" post_join_delay="3"/>
<clusternodes>
<clusternode name="testrac1-priv" nodeid="1" votes="1">
<fence/>
</clusternode>
<clusternode name="testrac2-priv" nodeid="2" votes="1">
<fence/>
</clusternode>
</clusternodes>
<cman expected_votes="1" two_node="1"/>
<fencedevices/>
<rm>
<failoverdomains>
<failoverdomain name="Failover_Oracle" ordered="0" restricted="1">
<failoverdomainnode name="testrac2-priv" priority="1"/>
<failoverdomainnode name="testrac1-priv" priority="1"/>
</failoverdomain>
</failoverdomains>
<resources>
<fs device="/dev/mapper/mpath0p1" force_fsck="0" force_unmount="1" fsid="15674" fstype="ext3" mountpoint="/oradata" name="oradata" options="" self_fence="0"/>
<ip address="10.10.6.208" monitor_link="1"/>
<script file="/etc/init.d/dbora" name="ora_script"/>
</resources>
<service autostart="1" domain="Failover_Oracle" name="OracleHA_Service" recovery="relocate">
<ip ref="10.10.6.208"/>
<fs ref="oradata"/>
<script ref="ora_script"/>
</service>
</rm>
</cluster>

4.安装 Oracle (无实例)

在两个节点上分别安装 Oracle 软件,具体的安装过程我请参考这篇文章。

两个节点上的 oracle 用户的 ORACLE 相关环境变量设置如下:

ORACLE_BASE=/oracle
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
ORACLE_SID=hatest

5.启动 RHCS 集群

首先我们需要启动 RHCS 集群,需要说明的是,RHCS 集群的启动顺序是在各个节点上依次启动 cman 和 rgmanager 服务,如果想关闭 RHCS 集群,那么请在各个节点上依次关闭 rgmanager 和 cman 服务,顺序是相反的。集群启动成功后,需要把资源转移到节点1上去。具体操作如下:

[root@testrac1 media]# service cman start
Starting cluster:
Loading modules... done
Mounting configfs... done
Starting ccsd... done
Starting cman... done
Starting daemons... done
Starting fencing... done
[ OK ]
[root@testrac1 media]# service rgmanager start
Starting Cluster Service Manager: [ OK ]
[root@testrac1 media]#

[root@testrac2 ~]# service cman start
Starting cluster:
Loading modules... done
Mounting configfs... done
Starting ccsd... done
Starting cman... done
Starting daemons... done
Starting fencing... done
[ OK ]
[root@testrac2 ~]# service rgmanager start
Starting Cluster Service Manager: [ OK ]
[root@testrac1 media]#

[root@testrac1 media]# clustat
Cluster Status for OracleHA @ Mon Oct 10 17:31:24 2011
Member Status: Quorate

Member Name ID Status
------ ---- ---- ------
testrac1-priv 1 Online, Local, rgmanager
testrac2-priv 2 Online, rgmanager

Service Name Owner (Last) State
------- ---- ----- ------ -----
service:OracleHA_Service testrac2-priv started
[root@testrac1 media]#
[root@testrac1 media]# clusvcadm -r OracleHA_Service -m testrac1-priv
Trying to relocate service:OracleHA_Service to testrac1-priv...Success
service:OracleHA_Service is now running on testrac1-priv
[root@testrac1 media]#
[root@testrac1 media]# clustat
Cluster Status for OracleHA @ Mon Oct 10 17:32:05 2011
Member Status: Quorate

Member Name ID Status
------ ---- ---- ------
testrac1-priv 1 Online, Local, rgmanager
testrac2-priv 2 Online, rgmanager

Service Name Owner (Last) State
------- ---- ----- ------ -----
service:OracleHA_Service testrac1-priv started
[root@testrac1 media]#

6.安装 Oracle 实例

由于我们把 Oracle HA 环境的实例安装到共享存储上,所以我们只需要在节点1上安装实例到共享存储上即可。首先,查看共享存储是否通过 RHCS 集群挂载到 /oradata 目录下:

[root@testrac1 ~]# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/cciss/c0d0p1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
/media/RHEL_5.5_X86_64.iso on /redhat type iso9660 (rw,loop=/dev/loop0)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
none on /sys/kernel/config type configfs (rw)
/dev/mapper/mpath0p1 on /oradata type ext3 (rw)

修改目录 /oradata 的权限:

[root@testrac1 ~]# chown oracle:oinstall /oradata

在节点1的图形界面下使用 dbca 安装实例到 /oradata 目录下,其中需要说明的是在 Step 8 中,请勾选 “Enable Archiving” 选项,并把归档日志的默认目录设置为共享存储下,比如 “/oradata/archs” 目录。在Step 11和12中请把 Controlfile,Datafiles 和 Redolog 的默认路径都设置到共享存储的 /oradata 的相关目录下。

7.创建监听器

在两个节点上的图形界面下分别运行 netca 创建监听器,如下内容是节点1上的监听器配置文件 listener.ora 的文件内容:

[root@testrac1 oracle]# cat /oracle/product/10.2.0/db_1/network/admin/listener.ora
# listener.ora Network Configuration File: /oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = testrac1)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)

[root@testrac1 oracle]#

8.同步相关配置文件

首先,复制密码文件和参数文件到节点2,过程如下:

[oracle@testrac1 ~]$ cd /oracle/product/10.2.0/db_1/dbs/
[oracle@testrac1 dbs]$ ls
hc_hatest.dat initdw.ora init.ora lkHATEST orapwhatest spfilehatest.ora
[oracle@testrac1 dbs]$ scp orapwhatest [email protected]:/oracle/product/10.2.0/db_1/dbs/
[email protected]'s password:
orapwhatest 100% 1536 1.5KB/s 00:00
[oracle@testrac1 dbs]$ scp spfilehatest.ora [email protected]:/oracle/product/10.2.0/db_1/dbs/
[email protected]'s password:
spfilehatest.ora 100% 2560 2.5KB/s 00:00
[oracle@testrac1 dbs]$

其次,创建 Oracle 在节点2启动需要的目录,过程如下:

[oracle@testrac2 ~]$ mkdir -p /oracle/admin/hatest/{adump,bdump,cdump,dpdump,pfile,udump}
[oracle@testrac2 ~]$

最后,确保相关目录的权限是正确的,过程如下:

[root@testrac2 ~]# chown -R oracle:oinstall /oracle

9.编写 Oracle 相关的 RHCS 脚本

这里需要说明一下,之前在 system-config-cluter 里配置添加的脚本资源,请先不要添加到 OracleHA_Service 服务中,因为该脚本资源我们还没有编写和安装。也就是说刚安装 Oracle 实例时启动的 RHCS 集群提供服务中的不包括脚本脚本。现在,我们编写 RHCS 脚本,由于具体的内容,请参考这篇文章。编写完成后,拷贝该脚本文件 dbora 到两个节点的 /etc/init.d/ 目录中去。最后,我们需要添加该脚本资源到 OracleHA_Service 服务中,保存配置文件 cluster.conf ,并发送到 RHCS 集群的所有节点中去,重启 RHCS 集群。至此,配置完毕。

10.测试

由于篇幅的问题,我就不在这里把详细的测试过程贴出来了,说说测试思路吧,主要是针对 RHCS 集群提供三种资源进行测试,IP 资源你在其他机器上 ping 一下就好,文件系统资源需要在各个节点上运行 mount 命令看看是否挂载成功,而 Oracle 数据库则需要用 sqlplus 连接看是否正常访问。如果这些都成功的话,则进行节点服务的切换,再进行测试。注意:文件系统资源只能在生效的节点上挂载,而 Oracle 实例和监听器也只能在生效的节点上运行。如果对 RHCS 集群的管理不是很熟悉,请参考这篇文章。

你可能感兴趣的:(oracle,集群,File,service,脚本,plugins)