环境:
Linux HA:双节点(节点一:192.168.56.140;节点二:192.168.56.141)
虚拟化支持:VMware Workstation 11
操作系统版本:RHEL 5U10
数据库:Oracle DB 10g
存储:Openfiler 2.99(IP:192.168.79.130:446)

网卡:双网卡(公共网络:192.168.56.X;私有网络:192.168.79.X)
——————
准备虚拟机:
vmware_for_heartbeat

准备存储:
openfiler_for_heartbeat
——————
操作系统配置。

(通用配置)
文件:/etc/hosts

注意:网卡IP设置为静态(static;none),最好不要是动态分配(DHCP)。

防火墙与SELinux:

配置YUM:

安装软件包:
(针对Oracle Database)
yum install -y binutils* compat-db setarch compat-libstdc++-* control-center elfutils-libelf-* elfutils-libelf-devel-* elfutils-libelf-devel-static-* gcc-* gcc-c++-* glibc-* glibc-common-* glibc-devel-* glibc-headers-* ksh libaio-* libaio-devel-* libgcc libstdc++-* libstdc++-devel make sysstat unixODBC unixODBC-devel compat-libstdc++-33.i386 compat-libstdc++-296.i386 glibc.i686 glibc-devel.i386 unixODBC.i386 unixODBC-devel.i386 libaio.i386 libaio-devel.i386 libgcc.i386 libstdc++.i386 libstdc++-devel.i386 libaio-devel.i386 libXp.i386

(针对共享存储)
yum install -y iscsi* scsi*

(针对Heartbeat)
yum install -y createrepo

配置文件的修改:
(针对Oracle)
文件:/etc/sysctl.conf

立即应用:sysctl -p

文件:/etc/pam.d/login

文件:/etc/security/limits.conf

(针对Oracle)
创建用户和组:

(针对Oracle)
系统用户“oracle”环境变量:

(针对Oracle)
创建目录结构:

——————
存储配置:
Openfiler管理页面:https://192.168.79.130:446/
共享存储:
大小:20GB
iSCSI LUN:iqn.2006-01.com.openfiler:tsn.08269750791b
openfiler_vm_1

openfiler_vm_2

节点主机的操作系统的存储方面的配置:

划分磁盘:

——————
安装Heartbeat。

两种方式:
1. 利用以前的EPEL软件包制作本地YUM源
2. 虚拟机联网,通过EPEL安装

第一种方式:
将Heartbeat的软件包上传服务器:

createrepo:

写入YUM的repo文件中:

刷新YUM缓存:

安装Heartbeat:

第二种方式。

执行安装:
yum install heartbeat*

安装完成后:
新增用户:

Heartbeat主目录:

Heartbeat占用的网络端口:

至此,Heartbeat安装完成。

——————
安装Oracle:
上传软件介质,并解压执行:

接下来就是图形化的安装。

图像化的安装部分没有什么特别的,直接下一步就可以。(之前的文档中可以找到这方面的截图,故不罗列了。)
需要注意的是,这里目前只安装软件,不创建数据库。

如图:
install_oracle_software
正在安装Oracle软件,… 耐心等待一段时间即可。(两台Heartbeat节点都需要安装。)

执行脚本:

至此,Oracle数据库软件安装完成。

——————
关于创建数据库(说明)。

创建数据库的过程只需要在Linux HA的其中一个节点上操作即可。
需要注意的是:数据库需要创建到共享存储上,而不是本地。

——————
关于配置Heartbeat资源(说明与操作)。

因此,在创建数据库之前,需要先配置好Heartbeat的共享存储资源,并保证HA功能正常。

下面开始:
格式化共享存储分区,将其设置为ext3:

创建挂载点:

正式配置Heartbeat之前可以看看它的说明文件:

模板文件:

文件:/etc/ha.d/authkeys

该文件权限必须为600,否则,启动Heartbeat服务的时候会遇到报错:
heartbeat[5990]: 2015/12/16_15:23:09 ERROR: Bad permissions on keyfile [/etc/ha.d/authkeys], 600 recommended.
heartbeat[5990]: 2015/12/16_15:23:09 ERROR: Authentication configuration error.
heartbeat[5990]: 2015/12/16_15:23:09 ERROR: Configuration error, heartbeat not started.

文件:/etc/ha.d/ha.cf

上面需要注意的是:
ucast指定的IP为当前节点的IP。
此外,在声明节点的时候,两个节点不能写成“node h1 h2”的形式,一定要分开写“node h1”、“node h2”。

文件:/etc/ha.d/haresources

集群资源只需要写一条,第一位的ha1表示优先在哪个节点上启用。因为Heartbeat的架构是主备而非双活,所以同一时间,资源只会在集群的一个节点上启用,只有发生意外的情况下才会迁移到另一个节点。

当前,仅在节点一(Hostname:h1)上启动Heartbeat:

日志:/var/log/ha-log

Heartbeat启动后:

如上,eth0:0和/oradata,都是通过Heartbeat的haresources自动起来的。

将节点一的(authkeys、haresources、ha.cf)复制给节点二,对ha.cf中的ucast做出适当的修改后,启动节点二的Heartbeat:service heartbeat start。

节点二的Heartbeat启动成功后,如果节点一的网络连接或者服务器宕机,则IP与共享存储资源将自动的迁移到节点二上:
Heartbeat_resource_change_before

Heartbeat_resource_change_after

然后,再在节点一的虚拟机里恢复节点一的网络:service network start。
Heartbeat_resource_restore_before

Heartbeat_resource_restore_during

Heartbeat_resource_restore_after

如上,Heartbeat的共享存储资源部分就配完了。

——————
DBCA建库。

由于当前存储资源在节点一,所以,我们在节点一上调用DBCA建库。

DISPLAY:

moba_xhost

目录权限:/oradata

调用DBCA:

dbca_1

dbca_2

dbca_3

dbca_4

dbca_5

dbca_6

dbca_7

dbca_8

dbca_9

dbca_10

dbca_11

dbca_12

dbca_13

dbca_14

dbca_15

dbca_16

dbca_17
至此,建库完成。

查看一下:

——————
监听器配置:NETCA

当前系统中是没有配置监听器的:

由于做了Heartbeat,对外访问的时候应该提供的是浮动IP,也就是上面/etc/hosts中的VIP,这样,不管哪个节点宕机,VIP都是活动的。
所以,在设置监听器的时候,也应该把监听开在浮动IP上,而不是与节点机相关的IP。

下面开始操作:
调用netca:

netca_1

netca_2

netca_3

netca_4

netca_5

netca_6

netca_7
查看一下监听的状态:

修改listener.ora:

重启监听,应用配置:

至此,数据库的创建与监听器的配置初步完成。
至此为止,数据库在节点一上的运行没有问题。
但是为了让Heartbeat可以对Oracle数据库服务提供高可用支持,我们还需要配置Heartbeat对Oracle数据库的监听器与实例的启停脚本与启停逻辑,以便于自动化运行。

——————
让Heartbeat与Oracle配合起来。

数据库实例:参数LOCAL_LISTENER(当前实例在节点一运行,所以这个操作在节点一执行)

为了防止因为初始化参数的异常而导致数据库起不来,这里对数据库的启动参数做一个备份:

需要同步的文件与路径
1. Oracle日志目录:$ORACLE_BASE/admin
2. $ORACLE_HOME/dbs
3. $ORACLE_HOME/network/admin

Oracle日志目录
原路径(节点一):

同步到节点二:

$ORACLE_HOME/dbs
原路径,节点一:

同步到节点二:

$ORACLE_HOME/network/admin
源目录,节点一的状态:

同步到节点二: