贵州万福福特官方网站:RHEL4 U5 + CLUSTER4.5 + GFS4.5 + Oracle10g HA...

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 22:33:15
RHEL4 U5 + CLUSTER4.5 + GFS4.5 + Oracle10g HA调试文档 2009-04-16 16:37:31标签:Oracle,HA

一、客户需求
客户的数据库跑的业务是营收帐Boss系统,对数据安全要求较高,需要做oracle的HA(主备),客户属于经济不发达地区,希望项目费用精简.

二、项目分析
经过分析,本例项目解决方案,采用RedHat EL4 U5配合Cluster Suite4.5套件,实现一主一备的Oracle10g的HA高可用集群.使用GFS文件系统来格式化磁盘阵列柜.
采用RedHat Linux系统的优点在于,成本经济,系统稳定,技术支持较多,且包含Cluster集群套件,更有gfs全局文件系统对数据库等使用共享存储空间的支持优势.
RHCS: Red Hat Cluster Suite 是一款能够提供高性能、高可靠性、负载均衡、高可用性且经济廉价的集群工具集,本项目使用其组件之一:高可用集群(HA). 高可用集群通过消除单一故障点和节点故障转移功能(当一个集群节点失败后将服务转移到其他节点上)来提供高可用性.节点故障转移功能对客户端是透明的,当节点失败后客户端并不会看到节点之间的服务转移.Red Hat Cluster Suite通过高可用服务管理组件来提供一个高可用集群.
    GFS: Global File System为Red Hat Cluster Suite提供一个集群文件系统,CFS允许多个节点在块级别上共享存储.

三、软硬件归档
(1)、硬件平台:
HP DL380服务器2台
CPU:2个Intel(R) Xeon(TM) CPU 2.80GHz;
MEM :4G ;
HardDisk: 72.8 GB
HP Modular Smart Array 500G2磁盘阵列柜1套

(2)、软件平台:
RHEL 4 U5、Cluster Suite4.5、GFS Suite4.5、Oracle10g、SSH客户端、VNC客户端、Oracle10g客户端、PL/SQL、Oracle10g for RedHat 脚本

四、软件获取
(1)、RHEL 4 U5:5张CD光盘
Cluster Suite4.5 :1张CD光盘
GFS Suite4.5:1张CD光盘
以上7张光盘可向RedHa代理商索取.

(2)、以下软件可网上下载:
Oracle10g:oracle网站下载,文件名10201_database_linux32.zip
SSH客户端:SSHSecureShellClient-3.2.9
VNC客户端:HA-vnc-4.0-x86_win32-KC
Oracle10g客户端:10g_win32_db.zip
PL/SQL(oracle工具):PL/SQL Developer 7.0
Oracle10g for RedHat 脚本:内容见附件

五、IP地址、主机名规划
服务器1: 公网:192.168.16.201/24   私网(心跳):10.10.10.201/24 主机名smsdb01.scn.com
服务器2: 公网:192.168.16.202/24   私网(心跳):10.10.10.202/24主机名smsdb02.scn.com
Cluster虚IP:192.168.16.203


六、安装调试步骤一览
Ⅰ、服务器、磁盘柜的硬件安装
Ⅱ、RedHat操作系统安装
Ⅲ、上传软件
Ⅳ、Cluster Suite安装与GFS Suite安装,自启动服务设置,测试Cluster
Ⅴ、给磁盘柜分区、建立逻辑卷,并以GFS文件系统格式化磁盘柜的逻辑卷,挂载GFS分区等
Ⅵ、Oracle10g For Linux安装
Ⅶ、Oracle10g For Linux建数据库
Ⅷ、Oracle10g手工测试
Ⅸ、Cluster配置、虚IP测试
Ⅹ、Cluster + Oracle10g联合测试

七、实际操作步骤

Ⅰ、服务器、磁盘柜的硬件安装
服务器上架:客户与厂商负责
磁盘阵列上架及连接服务器:客户与厂商负责

Ⅱ、RedHat操作系统安装
两台服务器要完全一致,除IP地址、主机名等;
选择中文与英文2种语言支持,默认英文;
硬盘72G,划分三个区 / 根分区25G,SWAP分区2G,剩余空间给/home分区;
把识别出来的HP Modular Smart Array 500G2磁盘柜,全部都划分为LVM逻辑卷,或者不划分,等操作系统装好之后再用fdisk划分;
2块网卡分别设置静态IP地址,具体见“第五节”;
默认时区:亚洲/上海
不装防火墙;使用SELINUX;
软件安装要求:xwindows 、Gnome、开发包、administartor tools 、system tools(加装vnc服务)等;

Ⅲ、上传软件
在本地笔记本电脑中安装SSHSecureShellClient-3.2.9
(顺便安装VNC客户端HA-vnc-4.0-x86_win32-KC、Oracle10g客户端10g_win32_db.zip、PL/SQL(oracle工具):PL/SQL Developer 7.0)
打开SSHSecureShell,以root用户分别SSH连接到服务器1与服务器2,在每台服务器的root根目录下建立如下目录:
/root/ cluster4.5
/root/GFS4.5
/root/oracle10g
利用SSHSecureShell的FTP工具
将cluster4.5光盘中的全部文件,分别上传到服务器1与服务器2的/root/ cluster4.5目录;
将GFS4.5光盘中的全部文件,分别上传到服务器1与服务器2的/root/ GFS4.5目录;
将10g_win32_db.zip,分别上传到服务器1与服务器2的/root/ oracle10g目录;

Ⅳ、Cluster Suite安装与GFS Suite安装
(1)、启动远程桌面服务连接(本项目远程连接桌面使用vnc,未使用xmanger)
在服务器1与服务器2上,分别以root用户执行以下命令,目的是启动vnc服务器端,使得可以远程打开redhat的gnome桌面
[root@smsdb01 /]#vncserver :1
[root@smsdb02 /]#vncserver :1
提示配置vnc服务的密码,本项目中密码为******
说明:此举将在当前用户root的目录下创建了.vnc目录,以及xstartup配置文件.在这里要说明一下,第一次执行vncserver命令启动vnc服务器端,用vnc客户端连接远程桌面时,因一些vnc服务器端的配置参数未配置,登陆远程桌面色彩等达不到使用要求,因此:
[root@smsdb01 /]#vi ~/.vnc/xstartup
把下列2句前的#号的注释去掉
#unset SESSION_MANAGER
#exec /etc/X11/xinit/xinitrc

twm &
句前加上#号注释掉,并加上以下一句
startx &
保存退出
查询vnc进程号,杀掉当前vncsever进程,重新启动vnc服务
[root@smsdb01 /]#ps –ef |grep vnc
[root@smsdb01 /]#vncserver -kill :1
[root@smsdb01 /]# vncserver :1
说明:因linux属于多进程服务的操作系统,因此linux下的vnc服务进程,后面有一个进程号.
现在可以用vnc客户端远程连接两台服务器了.

(2)、:安装Cluster Suite与GFS Suite

A、安装Cluster Suite
Vnc连接到服务器1与服务器2,打开终端,进入Cluster的目录,
[root@smsdb01 /]#cd /root/cluster4.5
执行以下命令,给当前的目录下及子目录下所有文件可执行权限
[root@smsdb01 cluster4.5]#chmod +x –R *
或者
[root@smsdb01 cluster4.5]#chmod 755 –R *
执行安装
[root@smsdb01 cluster4.5]#./autorun
将弹出cluster安装的对话窗口,一步一步按提示往下走,把所有cluster套件(32个包)全部装上.
注:安装过程中,将提示分别插入redhat linuxAS4 U5的第4张和第2张盘(各2次).

B、安装GFS Suite
Vnc连接到服务器1与服务器2,打开终端,进入Cluster的目录,
[root@smsdb01 /]#cd /root/GFS4.5
执行以下命令,给当前的目录下及子目录下所有文件可执行权限
[[root@smsdb01 GFS4.5]#chmod +x –R *
或者
[root@smsdb01 GFS4.5]#chmod 755 –R *
执行安装
[root@smsdb01 GFS4.5]#./autorun
将弹出GFS安装的对话窗口,一步一步按提示往下走,把所有GFS套件(16个包)全部装上.

(3)、将cluster与GFS的各项服务设置开机自启动
在两台服务器上分别执行以下命令
[root@smsdb01 /]#chkconfig --add cman
[root@smsdb01 /]#chkconfig --add ccsd
[root@smsdb01 /]#chkconfig --add clvmd
[root@smsdb01 /]#chkconfig --add rgmanager
[root@smsdb01 /]#chkconfig --add gfs
[root@smsdb01 /]#chkconfig --add fenced

[root@smsdb01 /]#chkconfig ccsd on
[root@smsdb01 /]#chkconfig cman on
[root@smsdb01 /]#chkconfig clvmd on
[root@smsdb01 /]#chkconfig rgmanager on
[root@smsdb01 /]#chkconfig gfs on
[root@smsdb01 /]#chkconfig fenced on

Ⅴ、给磁盘阵列柜LVM分区、建立逻辑卷

(1)、检查当前服务器的硬盘与磁盘阵列挂接(在服务器1上执行)
[root@smsdb01 /]# fdisk -l
Disk /dev/cciss/c0d0: 72.8 GB, 72833679360 bytes
255 heads, 32 sectors/track, 17433 cylinders
Units = cylinders of 8160 * 512 = 4177920 bytes
Device Boot      Start         End      Blocks   Id  System
/dev/cciss/c0d0p1   *           1        6275    25601984   83  Linux
/dev/cciss/c0d0p2            6276        6776     2044080   82  Linux swap
/dev/cciss/c0d0p3            6777       17433    43480560   83  Linux

Disk /dev/cciss/c1d0: 599.9 GB, 599998871552 bytes
255 heads, 63 sectors/track, 72945 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot      Start         End      Blocks   Id  System

(2)、发现/dev/cciss/c1d0(容量600G)磁盘阵列,给/dev/cciss/c1d0分区
[root@smsdb01 /]# fdisk /dev/cciss/c1d0

The number of cylinders for this disk is set to 72945.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):

输入m查看当前可用命令,输入p可查看当前磁盘分区情况,输入n可建立新的分区,等等
我们输入p
Command (m for help): p

Disk /dev/cciss/c1d0: 599.9 GB, 599998871552 bytes
255 heads, 63 sectors/track, 72945 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

           Device Boot      Start         End      Blocks   Id  System
可以看到,当前没有分区,我们输入n,建立一个新的分区

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
输入e建立扩展分区,输入p建立主分区,由于我们要把oracle的数据库建立在共享磁盘上,没有其他用途,所以,我们只建立一个主分区即可,输入p
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4):
输入主分区号,值为1-4,我们输入1
Partition number (1-4): 1   
Partition 1 is already defined.  Delete it before re-adding it.
注意:主分区我已经事先建立好了,这里只是演示一下
输入p,查看一下
Command (m for help): p

Disk /dev/cciss/c1d0: 599.9 GB, 599998871552 bytes
255 heads, 63 sectors/track, 72945 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

           Device Boot      Start         End      Blocks   Id  System
/dev/cciss/c1d0p1   *           1       72945   585930681   83  Linux

注意:因为要建立动态磁盘系统,以使GFS格式化磁盘阵列柜后可以动态调整分区大小,因此需要将刚建立的主分区类型更改为8e,即lvm类型的动态磁盘分区.
输入t
Command (m for help): t
Selected partition 1
Hex code (type L to list codes):
输入8e
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
检查一下,输入p,见下面的红色字体
Disk /dev/cciss/c1d0: 599.9 GB, 599998871552 bytes
255 heads, 63 sectors/track, 72945 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

           Device Boot      Start         End      Blocks   Id  System
/dev/cciss/c1d0p1   *           1       72945   585930681   8e  Linux LVM
输入w,保存一下,OK
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

激活刚创建好的分区
[root@smsdb01 /]#partprobe

(3)、在服务器2上检查自动识别的LVM分区(服务器1上的分区操作,服务器2应可以自动识别)
[root@smsdb02 ~]#service clvmd status
[root@smsdb02 ~]#service clvmd start
说明:因为我们已经安装了cluster与GFS服务,所以,服务器1的分区操作,在服务器2检查时,建议重新启动一下clvmd服务.
[root@smsdb02 ~]# fdisk -l

Disk /dev/cciss/c0d0: 72.8 GB, 72833679360 bytes
255 heads, 32 sectors/track, 17433 cylinders
Units = cylinders of 8160 * 512 = 4177920 bytes

           Device Boot      Start         End      Blocks   Id  System
/dev/cciss/c0d0p1   *           1        6275    25601984   83  Linux
/dev/cciss/c0d0p2            6276        6777     2048160   82  Linux swap
/dev/cciss/c0d0p3            6778       17433    43476480   83  Linux

Disk /dev/cciss/c1d0: 599.9 GB, 599998871552 bytes
255 heads, 63 sectors/track, 72945 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

           Device Boot      Start         End      Blocks   Id  System
/dev/cciss/c1d0p1   *           1       72945   585930681   8e  Linux LVM

注:应该也可以看到磁盘阵列柜,以及分区类型.

(4)、动态磁盘的建立
提醒:以下A、B、C、D步骤只在服务器1上操作,步骤E需要在服务器1与2上都做.

A:建立物理卷
[root@smsdb01 /]# pvcreate /dev/cciss/c1d0p1
查看一下建立的物理卷,注意PV Name以及PV size
[root@smsdb01 /]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/cciss/c1d0p1
  VG Name               oracle10g
  PV Size               558.79 GB / not usable 1.93 MB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              143049
  Free PE               21
  Allocated PE          143028
  PV UUID               v1Ff6t-BCYh-hoeb-Jij7-Yujg-uklx-taTUk3

B:建立逻辑卷组,组名为oracle10g
[root@smsdb01 /]#vgcreate oracle10g /dev/cciss/c1d0p1
检查一下建立的逻辑卷组
[root@smsdb01 /]# vgdisplay

C:建立逻辑卷
注意,逻辑卷大小要小于物理卷的大小(下面有说明),名字是oracle,逻辑卷组名是刚才建立的oracle10g
[root@smsdb01 /]#lvcreate -L  558.7G  -noracle oracle10g
检查一下建立的逻辑卷
[root@smsdb01 /]# lvdisplay

说明:
1、建立逻辑卷时,大小要小于上面建立物理卷的大小,我是这么理解的,至于小多少可以建立成功,要试验一下,如果建立不成功,就将容量减小一点.物理卷与逻辑卷大小的关系,因为时间问题,没完全弄清楚.
2、在服务器1建立的物理卷、逻辑卷组以及逻辑卷,在服务器2上都应该自动识别.因为我们已经安装了cluster与GFS服务,所以,服务器1的分区操作,在服务器2检查时,建议先重新启动一下clvm服务.在服务器1与服务器2上,pvdisplay、vgdisplay、lvdisplay看到的应该一致,如果服务器2上无法看到与服务器1上相同的信息,或者报错,那么大多是因为clvmd服务没有启动,关于clvmd服务,实际上就是基于cluster(集群)的lvm服务,lvm是什么,大致意思是动态磁盘管理吧!使用命令 service clvmd status检查clvm状态,使用service clvmd restart重新启动clvmd服务.

D:用GFS协议格式化刚才建立的逻辑卷oracle
[root@smsdb01 /]#mkfs.gfs -p lock_dlm -t SCN:oracle -j 2 /dev/oracle10g/oracle
说明:
-p lock_dlm 定义为DLM锁方式,如果不加此参数,当在两个系统中同时挂载此分区时就会像ext3格式一样,两个系统的信息不能同步;
-t SCN:oracle :DLM锁所在的表名字,SCN应与cluster.conf中Cluster的name相同;oracle,按Redhat售前工程师的说法,GFS格式化的要是静态磁盘,可以是任意名字,而要是lvm的动态磁盘,则必须是逻辑卷名,我个人经过实验,觉得可以随便写,一个标志而已;
-j 2 :GFS分区中最多支持多少个节点同时挂载,本例就2个oracle数据库,所以值为2.
/dev/oracle10g/oracle :准备要格式化的逻辑卷分区

E:将逻辑卷分区/dev/oracle10g/oracle mount到某个目录
本项目的oracle安装在/usr/local/oracle10g/,而库建在/usr/local/oracle10g/oracle10g_db上,所以,建立相关目录(此步骤需要在服务器1与服务器2上都做)
[root@smsdb01 /]#mkdir –p  /usr/local/oracle10g/oracle10g_db
[root@smsdb01 /]#mount -t gfs /dev/oracle10g/oracle /usr/local/oracle10g/oracle10g_db
查看挂载的分区
[root@smsdb01 /]#df –h

注意:如果出现下面的错误,无法mount
mount: permission denied
检查/etc/cluster/cluster.conf文件,尤其是cluster configure工具里的service management里的Faildomain Domain是不是选择了定义的Faildomain Domain的名字,如smsdbHP.
另外,可以用demsg命令以及tail –f /var/log/messages检查系统错误消息与监控日志,帮助查错.Ⅵ、Oracle10g For Linux安装

(1)、安装前准备
A:检查oracle安装所需要的包,应该全部通过,没有通过的,安装该rpm包,redhat光盘里有.
[root@smsdb01 /]#rpm -q gcc make glibc binutils openmotif setarch compat-db compat-gcc-32 compat-gcc-32-c++ compat-libstdc++-33 compat-libstdc++-296

B:创建Oracle组和用户帐户
创建用于安装和维护 Oracle 10g 软件的 Linux 组和用户帐户.用户帐户将称为 oracle,而组将称为 oinstall 和 dba.以 root 用户身份执行以下命令:
[root@smsdb01 /]#/usr/sbin/groupadd oinstall
[root@smsdb01 /]#/usr/sbin/groupadd dba
[root@smsdb01 /]#/usr/sbin/useradd -m -g oinstall -G dba oracle
查看一下oracle用户与组的设置情况
[root@smsdb01 /]#id oracle

设置 oracle 帐户的口令:
[root@smsdb01 /]#passwd oracle
Changing password for user oracle.
New password: oracle (不回显)
Retype new password: oracle(不回显)
passwd:all authentication tokens updated successfully.

C:创建存储 Oracle 10g 软件和数据库文件的目录
本项目中:
oracle根目录:/usr/local/oracle10g
oracl程序安装目录:/usr/local/oracle10g/db
oracle建库目录是:/usr/local/oracle10g/oracle10g_db
注:此目录是磁盘阵列库格式化后mount的目录,见上一章

建立oracle安装相关目录:
[root@smsdb01 /]#mkdir -p /usr/local/oracle10g
注:此命令可以不打,因上一章mount磁盘阵列库的mount目录时,已经递归建立该目录
[root@smsdb01 /]#mkdir –p /usr/local/oracle10g/db
[root@smsdb01 /]#mkdir –p /usr/local/oracle10g/oracle10g_db
[root@smsdb01 /]#mkdir –p /usr/local/oracle10g/source
注:为了将来用oracle用户安装oracle方便,将源文件从/root/oracle10g目录移动到/usr/local/oracle10g/source
[root@smsdb01 /]#cd /root/oracle10g
[root@smsdb01 oracle10g /]#mv 10g_win32_db.zip /usr/local/oracle10g/source
解压源文件
[root@smsdb01 /]#cd /usr/local/oracle10g/source
[root@smsdb01 source/]#unzip 10201_database_linux32.zip
给oracle10源程序(安装文件)可执行权限
[root@smsdb01 source/]#chmod a+x  -R *
将/usr/local/oracle10g以及以下所有目录、文件权限修改为oracle:oinstall
[root@smsdb01 /]#chown -R oracle:oinstall /usr/local/oracle10g

D:配置 Linux 内核参数
Linux 内核非常出色.与大多数其他 *NIX 系统不同,Linux 允许在系统启动和运行时修改大多数内核参数.完成内核参数更改后不必重新启动系统.Oracle 数据库 10g 需要以下所示的内核参数设置,其中给出的是最小值,因此如果您的系统使用的值较大,则不要更改它.
编辑 /etc/sysctl.conf 文件,添加或更改这些参数.
[root@smsdb01 ~]#vi /etc/sysctl.conf
修改内容如下:
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
完成后,运行以下命令激活更改:/sbin/sysctl -p
[root@smsdb01 ~]#/sbin/sysctl –p

E:设置oracle环境变量
[root@smsdb01 /]#su - oracle
[oracle@smsdb01 ~]$vi .bash_profile
增加以下内容
export ORACLE_BASE=/usr/local/oracle10g
export ORACLE_HOME=$ORACLE_BASE/db
export ORACLE_SID=moss
export PATH=$PATH:$ORACLE_HOME/bin
保存退出,source一下.bash_profile文件,使之立即更新
[oracle@smsdb01 ~]$source .bash_profile
检查一下oracle的环境变量是不是有了oracle以上设置的变量
[oracle@smsdb01 ~]$env

F:启动oracle用户的vnc服务
检查一下之前是不是有root用户开启了vnc服务,因安装oracle需要在图形界面,且是oracle用户下安装,所以必须启动oracle用户的vnc服务.
[oracle@smsdb01 ~]$ps –ef |grep vnc
[oracle@smsdb01 ~]$vncserver :1
New 'smsdb01.scn.com:1 (oracle)' desktop is smsdb01.scn.com:1

Starting applications specified in /home/oracle/.vnc/xstartup
Log file is /home/oracle/.vnc/smsdb01.scn.com:1.log
提示配置vnc服务的密码,本项目中密码为sctvnet

说明:此举将在当前用户oracle的目录下创建了.vnc目录,以及xstartup配置文件.第一次执行vncserver命令启动vnc服务器端,用vnc客户端连接远程桌面时,因一些vnc服务器端的配置参数未配置,登陆远程桌面色彩等达不到使用要求,因此需要修改vnc配置文件:
[oracle@smsdb01 ~]$vi ~/.vnc/xstartup
把下列2句前的#号的注释去掉
#unset SESSION_MANAGER
#exec /etc/X11/xinit/xinitrc

twm &
句前加上#号注释掉,并加上以下一句
startx &
保存退出

(2)、开始安装oracle10g

在笔记本电脑上执行vnc客户端

vnc密码,此处设置的是:oracle

打开桌面的终端后,进入oracle的解压后目录
[oracle@smsdb01 ~]$cd /usr/local/oracle10g/database
[oracle@smsdb01 database]$./runInstaller
弹出oracle10g的图形安装界面,开始安装oracle10g,如下

弹出窗口,将create starter Database (additional 720MB)的勾去掉,暂不建数据库,只安装oracle,见下图

系统要检测一下


系统检测一下环境


限于篇幅,oracle的安装图例就先写到这里,按照提示,一步一步安装好oracle10g即可(安装过程中需要以root用户身份,按照安装提示去执行2个脚本)

(3)、同样的步骤,在服务器2上,做同样的操作,包括用户名、组、目录建立、oracle环境变量、内核参数等要完全一致.


Ⅶ、Oracle10g For Linux建数据库
(1)、建立数据库前的准备
检查共享的磁盘阵列柜的GFS分区是否正常挂载
[oracle@smsdb01 ~]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/cciss/c0d0p1      25G  5.2G   18G  23% /
none                  1.9G     0  1.9G   0% /dev/shm
/dev/cciss/c0d0p3      41G   81M   39G   1% /home
/dev/mapper/oracle10g-oracle
                      559G  933M  558G   1% /usr/local/oracle10g/oracle10g_db

(2)、开始在服务器1上的oracle10g建立moss数据库
在笔记本电脑上执行vnc客户端,以oracle身份,登陆服务器1的linux远程桌面,打开终端,执行dbca建库命令,如下图


弹出图形界面的欢迎窗口,如下:


建立数据库


选择General Purpose,点next


建立一个名字为moss的数据库


把Configure the Database with Enterprise Manger的勾去掉,点Next


输入moss数据库的密码,这里设置的是****


选择数据库安装的文件系统,选择默认File system,点Next继续


选择数据库安装的位置,这里很重要,我们要把数据库建立在共享的磁盘阵列柜的GFS存储空间上,之前我们曾把以/dev/mapper/oracle10g-oracle (/dev/oracle10g/oracle逻辑卷设备的软链接,系统自动建立的)以GFS文件系统挂载到/usr/local/oracle10g/oracle10g_db目录,这里,我们建立数据库的位置就选择/usr/local/oracle10g/oracle10g_db目录.
因此,我们在这里选择Use Common Location For All Database File,找到我们的gfs文件系统挂载的目录:/usr/local/oracle10g/oracle10g_db后,点OK,然后点Next继续

将Specify Flash Recovery Area的勾去掉,然后点Next继续

点Next继续


定义数据库的字符集.选择Character Sets,在Database Character Set中选择Choose from the list of Character Sets,下拉框中选择UTF8 – Unicode 3.0 UTF-8 Universal Character Set,在National Character Set中选择”UTF8 – Unicode 3.0 UTF-8 Universal Character Set,CESU-8 compliant”,其他不变,点Next继续


点Next继续


点Next继续


点Finish结束,开始创建数据库


确认一下,点OK开始建库


数据库建立完成,点Exit退出


(3)、在数据库2上建moss数据库
以上在服务器1上建立了moss数据库,之后,我们要以oracle用户身份用vnc登陆服务器2,在其上面建立同样的moss数据库,注意建库的存储文件夹,同样是/usr/local/oracle10g/oracle10g_db;

服务器2建库,要注意2点:
A、        在服务器2建立数据库前,建议把服务器1的数据库以及监听程序关闭
命令如下
[oracle@smsdb01 ~]$ lsnrctl stop
[oracle@smsdb01 ~]$sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jul 17 11:35:11 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL>connect / as sysdba
Connected.
SQL> shutdown immediate

B、服务器1建立oss数据库时,在/usr/local/oracle10g/oracle10g_db目录下生成了如下文件,建议全部删除(服务器2建库时,会在该目录下再次生成这些文件)
[oracle@smsdb01 ~]$ cd /usr/local/oracle10g/oracle10g_db/moss/
[oracle@smsdb01 moss]$ ll
total 955084
-rw-r-----  1 oracle oinstall   7061504 Jul 17 11:38 control01.ctl
-rw-r-----  1 oracle oinstall   7061504 Jul 17 11:38 control02.ctl
-rw-r-----  1 oracle oinstall   7061504 Jul 17 11:38 control03.ctl
-rw-r-----  1 oracle oinstall  52429312 Jul 17 11:35 redo01.log
-rw-r-----  1 oracle oinstall  52429312 Jul 16 14:46 redo02.log
-rw-r-----  1 oracle oinstall  52429312 Jul 16 14:46 redo03.log
-rw-r-----  1 oracle oinstall 262152192 Jul 17 11:34 sysaux01.dbf
-rw-r-----  1 oracle oinstall 503324672 Jul 17 11:34 system01.dbf
-rw-r-----  1 oracle oinstall  20979712 Jul 16 22:00 temp01.dbf
-rw-r-----  1 oracle oinstall  26222592 Jul 17 11:35 undotbs01.dbf
-rw-r-----  1 oracle oinstall   5251072 Jul 16 14:46 users01.dbf
[oracle@smsdb01 moss]$ rm –rf *

Ⅷ、Oracle10g手工测试

服务器1和2建立数据库之后,我们要手工分别测试一下服务器1和服务器2的数据库.
(1)、测试准备
分别在两台服务器上以oracle身份执行以下命令,关闭服务器1和2上的oracle的数据库及监听程序
[oracle@smsdb01 ~]$ lsnrctl stop
[oracle@smsdb01 ~]$ lsnrctl start
[oracle@smsdb01 ~]$sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jul 17 11:35:11 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL>connect / as sysdba
Connected.
SQL> shartup
SQL> shutdown immediate
(2)、手工在终端上用上述命令测试关闭及启动oracle服务和监听;
(3)、在笔记本电脑上,使用pl/sql工具连接测试,测试步骤(略);

说明:测试之后,请保持2台服务器的oracle均为关闭状态,目的是为之后的cluster的虚IP测试,减少出错可能.

Ⅸ、Cluster配置、虚IP测试
(1)、修改hosts文件
保证两台服务器的hosts文件为如下显示
[root@smsdb01 ~]# more /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.10.201   smsdb01.scn.com
10.10.10.202    smsdb02.scn.com

(2)、检测磁盘阵列柜是否被服务器1和2正常挂载
root用户身份,分别在两台服务器上检查,磁盘阵列柜上建立的逻辑卷,是否被正确mount挂载
[root@smsdb01 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/cciss/c0d0p1      25G  5.2G   18G  23% /
none                  1.9G     0  1.9G   0% /dev/shm
/dev/cciss/c0d0p3      41G  133M   39G   1% /home
/dev/mapper/oracle10g-oracle
                      559G  1.5G  557G   1% /usr/local/oracle10g/oracle10g_db

(3)、检测cluster、GFS相关服务的状态
root用户身份,分别检查两台服务器的cluster各个服务状态
[root@smsdb01 ~]# service ccsd status
ccsd (pid 2824) is running...
[root@smsdb01 ~]#service cman status
Protocol version: 5.0.1
Config version: 30
Cluster name: SCN
Cluster ID: 544
Cluster Member: Yes
Membership state: Cluster-Member
Nodes: 2
Expected_votes: 1
Total_votes: 2
Quorum: 1   
Active subsystems: 8
Node name: smsdb01.scn.com
Node ID: 1
Node addresses: 10.10.10.201
[root@smsdb01 ~]#service rgmanager status
clurgmgrd (pid 3305 3304) is running...
[root@smsdb01 ~]#service fenced status
fenced (pid 2908) is running...
[root@smsdb01 ~]#service clvmd status
clvmd (pid 2920) is running...
active volumes: oracle
[root@smsdb01 ~]#service gfs status
Active GFS mountpoints:
/usr/local/oracle10g/oracle10g_db

(4)、用cluster的gui工具Cluster Management配置cluster
A、        启动root用户的vnc服务,远程桌面连接服务器1
[root@smsdb01 ~]# ps -ef |grep vnc
root     26603 26047  0 12:50 pts/1    00:00:00 grep vnc
[root@smsdb01 ~]# vncserver :1
New 'smsdb01.scn.com:1 (root)' desktop is smsdb01.scn.com:1
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/smsdb01.scn.com:1.log

B、        打开Appications – system settings – Server settings – Cluster Management


建立一个集群,名字SCN
添加2个cluster node ,名字分别为smsdb01.scn.com和smsdb02.scn.com;
添加1个Failover Domains,名字是smsdbHP,将smsdb01.scn.com和smsdb02.scn.com两个node加到smsdbHP域中,并设置smsdb01.scn.com优先级为1,smsdb02.scn.com优先级为2(数字越小优先级别越高);
Resource:增加1个resource资源:
         IP Address:192.168.16.203
添加一个Service,名字是oracle,在Service Management中,选择Failover Domains是smsdbHP,并点击Add a Shared Resource to this Service,将Resource资源记录IP添加进来.

回到主界面,点击File ¬– Save,将配置保存为/etc/cluster/cluster.conf,然后点Send to cluster把配置文件同步到第2台服务器

(5)、重新启动与cluster、GFS、clvmd相关的服务
在两台服务器上分别执行
[root@smsdb01 ~]# service ccsd restart
[root@smsdb01 ~]# service cman restart
[root@smsdb01 ~]# service rgmanager start
[root@smsdb01 ~]# service fenced restart
[root@smsdb01 ~]# service clvmd restart
[root@smsdb01 ~]# service gfs restart

(6)、Cluster的虚IP测试
根据cluster的配置,正常状态下,服务器1,即192.168.16.201是活跃状态,服务器2,即192.168.16.202是备用状态,这在Cluster Management的GUI的工具中是可以看到的;
ssh以root用户登陆192.168.16.201,将服务器1执行init 6重新启动,在这个过程中,观察Cluster Management里的State,会发现服务器2成为活跃主机,而服务器1显示dead;随着服务器1启动完毕,服务器1将接替服务器2成为活跃状态,服务器2又将成为备用状态;
在整个测试过程中,在笔记本上cmd命令行,连续ping虚IP地址192.168.16.203,应该是一直成功的.2


Ⅹ、Cluster + Oracle10g联合测试
(1)、将oracle的三个脚本oracle、dbstart、dbshut通过ssh客户端的FTP功能,分别上传到两台服务器的/home/oracle目录;
(2)、在两台服务器上执行以下命令,修改文件属主以及增加任意用户的可执行权限
[root@smsdb01 ~]# cd /home/oracle/
[root@smsdb01 oracle]# chown oracle:oninstall oracle dbstart dbshut
[root@smsdb01 oracle]#chmod a+x oracle dbstart dbshut
(3)、手工关闭oracle数据库及监听程序
先在服务器1上以oracle身份执行
    [root@smsdb01 ~]#su - oracle
[oracl @smsdb01 ~]$./dbstart
[oracl @smsdb01 ~]$./dbshut
应该可以正常启动及关闭oracle数据库和oracle的监听程序
    之后在服务器2上执行
[root@smsdb02 ~]#su - oracle
[oracl @smsdb02 ~]$./dbstart
[oracl @smsdb02 ~]$./dbshut
有可能报错,原因可能是oracle在关闭状态,而监听程序在启动状态;
我们只需要手工方式确保服务器2的oracle服务以及监听服务关闭即可,具体方法可看一下dbshut脚本的内容
关闭监听程序命令
[oracl@smsdb02 ~]$lsnrctl stop
关闭oracle服务的命令
[oracle@smsdb02 ~]$sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jul 17 11:35:11 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL>connect / as sysdba
Connected.
SQL> shutdown immediate
或者SQL> shutdown abort (谨慎使用)

(4)、启动root用户的vnc服务,远程桌面连接服务器1
[root@smsdb01 ~]# ps -ef |grep vnc
root     26603 26047  0 12:50 pts/1    00:00:00 grep vnc
[root@smsdb01 ~]# vncserver
New 'smsdb01.scn.com:1 (root)' desktop is smsdb01.scn.com:1
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/smsdb01.scn.com:1.log

(5)、设置Cluster Management,增加资源记录
打开Appications – system settings – Server settings – Cluster Management
在已有的配置中的Resource:
增加2个resource资源,分别是:
GFS:名字是gfs_disk,Mount Point是/usr/local/oracle10g/oracle10g_db,Device是/dev/mapper/oracle10g-oracle,把Force Unmount点上
Script:名字是oracle_script_ha,文件路径在/home/oracle/oracle

在名字为oracle的Service中的Service Management中,选择Failover Domains为smsdbHP,并点击Add a Shared Resource to this Service,将刚添加的Resource资源记录GFS和oracle脚本添加进来.

回到Cluster Management主界面,点击File ¬– Save,将配置保存为/etc/cluster/cluster.conf,然后点Send to cluster把配置文件发送到第2台服务器.

(6)、重新启动cluster的相关服务
在两台服务器上分别执行以下命令
[root@smsdb01 ~]# service ccsd restart
[root@smsdb01 ~]# service cman restart
[root@smsdb01 ~]# service rgmanager start
[root@smsdb01 ~]# service fenced restart
[root@smsdb01 ~]# service clvmd restart
[root@smsdb01 ~]# service gfs restart
重新启动与cluster相关的服务,此时可以进行oracle服务的Cluster的测试(服务器1的优先级为1,高于服务器2的优先级2),例如:
1、拨掉cluster里活跃(active)主机 (服务器1)的网线, 观察cluster中备用(standby)主机(服务器2)是否接替了活跃(active)主机(服务器1)的工作;
2、重新启动活跃(active)主机(服务器1),观察cluster中,备用(standby)主机(服务器2)是否接替了活跃(active)主机(服务器1),当原活跃(active)主机(服务器1)重新启动完毕,观察原活跃(active)主机(服务器1)是否重新接替了备用(standby)主机(服务器2),成为活跃状态.
3、以上测试过程中可在笔记本电脑上
用ping虚IP来验证集群虚IP是否正常;
客户端ssh连接虚IP来验证集群虚IP是否正常,且哪台服务器是active状态;
可通过PL/SQL地址是虚IP的连接,测试oracle,来验证集群服务的oracle是否正常,再用实际IP地址连接测试,判断cluster状态.
  
排错命令:
[root@smsdb01 ~]#tail -f /var/log/messages
[root@smsdb01 ~]#dmesg

八、问题遗留
(1)、关于自动mount磁盘阵列库
本次项目实施过程中,遇到一个关于自动mount GFS格式的共享磁盘阵列库空间的问题。按照redhat工程师的说法,有三种解决方式,分别是:
A:在Cluster Management配置过程中,将GFS格式化的共享磁盘以Resource(资源)的方式加入进来;
B:修改/etc/fstab,添加一句:
/dev/mapper/oracle10g-oracle /usr/local/oracle10g/oracle10g_db default 0 0
C:写一个简单脚本,给以root的可执行权限,内容如 :
#!/bin/bash
mount -t gfs /dev/oracle10g/oracle /usr/local/oracle10g/oracle10g_db
将文件放在/usr/local/oracle10g/目录下,然后在/etc/rc.d/rc.local文件中加上此句。
上述三种方法,redhat工程师建议使用第一或第二种,本次项目中,经过试验有一个现象,2台服务器重新启动后,只有第一台服务器成功自动mount,而第2台服务器则没有实现自动mount.

(2)、关于fence问题
本次项目中使用的HP服务器,内置了ilo的fence设备.我们在重新启动服务器时按F8进入BIOS,设置了ilo卡的IP地址(192.168.0.1与2)、用户名与密码(redhat/123456789),并将ILO卡连接至交换机,且将心跳网卡的IP地址与之同段相通,修改hosts文件后,此时,在Cluster Management里将有关fence项加入,试图使用ilo卡来接替网卡心跳线工作,cluster启动失败;使用如下命令检测ilo卡,也返回超时失败消息:
[root@smsdb01 ~]#fence_ilo -a 192.168.0.1 -l redhat -p 123456789 -o status
原因暂时不明,fence设备暂时未使用.