一、安装环境说明:

操作系统:centos5.5x86

主要软件及版本:heartbeat2.0.8   drbd-8.4.0

依赖软件及版本:libnet 1.1.2.1heartbeat所需) 

数据库版本:oracle 10201 32

 

安装前规划:

网卡:两台机器配双网卡,一个用于连接公用网络,一个用于做心跳测试。

主机名:分别为drbd1 drbd2,虚拟ip主机名drbd

IP:主drbd1eth0 10.10.10.11 心跳ip   eth1 135.255.10.211 连接公网。

drbd2eth0 10.10.10.12 心跳ip   eth1 135.255.10.212 连接公网。

两台机器的eth0用交叉线相连,eth1为局域网络,共用一个网关:130.255.10.1

虚拟ipeth1:0 135.255.10.200 虚拟ipheartbeat自动管理,不需要预先设置。

磁盘:两台机器分别加上一个大小20G的硬盘。用来做drbd网络共享存储,并在上面安装oracle

 

二、安装前配置

ip地址的配置:

eth0分别配置心跳ipeth1分别配上上述ip地址。

 

两台机器上主机名及网关的配置,这里以主机器为例:

[root@drbd1 ~]# cat /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=yes

HOSTNAME=drbd1  #主机名 另一台机器为drbd2

GATEWAY=135.255.10.1  #网关

 

在两台机器上,都配置hosts文件,新增三个ip到主机名的解析

[root@drbd1 ~]# cat /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1               drbd1 localhost.localdomain localhost

::1             localhost6.localdomain6 localhost6

 

135.255.10.211          drbd1

135.255.10.212          drbd2

135.255.10.200          drbd

主机名配置完成后,重启电脑,配置生效。

 

三、安装heartbeat

两台机器上做一样的安装和配置

添加用户和用户组

[root@drbd1 ~]# groupadd haclient

[root@drbd1 ~]# useradd -g haclient hacluster

首先安装libnet

[root@drbd1 ~]# cd /usr/local/src/

[root@drbd1 src]# tar zxvf libnet-1.1.2.1.tar.gz

[root@drbd1 src]# cd libnet/

[root@drbd1 libnet]# ./configure

[root@drbd1 libnet]# make

[root@drbd1 libnet]# make install

安装heartbeat

[root@drbd1 src]# tar zxvf Heartbeat-2-1-2d298bca0d0a.tar.gz

[root@drbd1 src]# cd Heartbeat-2-1-2d298bca0d0a/

[root@drbd1 Heartbeat-2-1-2d298bca0d0a]# ./ConfigureMe configure

[root@drbd1 Heartbeat-2-1-2d298bca0d0a]# make

注意,这里make到一半,可能会报一个类似hbaping  HBcomm等字样的错误,解决方法:

[root@drbd1 Heartbeat-2-1-2d298bca0d0a]# cd lib/plugins/HBcomm/

[root@drbd1 HBcomm]# mv hbaping.loT hbaping.lo

回到heartbeat文件根目录下重新再执行make即可继续编译。注意这里的hbaping.loT在第一次make之前是不存在的,必须要先make编译,生成了hbaping.loT,再在报错的时候文件名修改为hbaping.lo,再重新make一次即可。最后执行make install安装

[root@drbd1 Heartbeat-2-1-2d298bca0d0a]# make install

复制三个配置文件到/etc/ha.d/目录下

[root@drbd1 Heartbeat-2-1-2d298bca0d0a]# cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/

 

到此,两台机器上的heartbeat就安装完成,先不做配置,继续安装drbd

 

四、安装配置drbd

先将两台机器的新硬盘进行分区,使用fdisk,给第二块硬盘,即/dev/sdb分区,这里都只划一个主分区/dev/sdb1,完成后先不进行格式化,稍后会用到。

两台机器都安装配置drbd,配置完全相同:

[root@drbd1 src]# tar zxvf drbd-8.4.0.tar.gz

[root@drbd1 src]# cd drbd-8.4.0/

[root@drbd1 drbd-8.4.0]# ./configure

[root@drbd1 drbd-8.4.0]# make rpm

[root@drbd1 drbd-8.4.0]# make km-rpm

[root@drbd1 drbd-8.4.0]# cd /usr/src/redhat/RPMS/i386/

[root@drbd1 i386]# ls

drbd-8.4.0-1.i386.rpm                  drbd-heartbeat-8.4.0-1.i386.rpm          drbd-pacemaker-8.4.0-1.i386.rpm drbd-xen-8.4.0-1.i386.rpm

drbd-bash-completion-8.4.0-1.i386.rpm  drbd-km-2.6.18_194.el5-8.4.0-1.i386.rpm  drbd-udev-8.4.0-1.i386.rpm

drbd-debuginfo-8.4.0-1.i386.rpm        drbd-km-debuginfo-8.4.0-1.i386.rpm       drbd-utils-8.4.0-1.i386.rpm

[root@drbd1 i386]# rpm -ivh drbd*

[root@drbd1 i386]# modprobe drbd   #加载drbd到内核

[root@drbd1 i386]# lsmod |grep drbd   #查看是否加载成功

drbd                  250852  0

开始配置drbd

主配置文件为/etc/drbd.conf

[root@drbd1 ~]# cat /etc/drbd.conf

# You can find an example in /usr/share/doc/drbd.../drbd.conf.example

 

include "drbd.d/global_common.conf";

include "drbd.d/*.res";

可以看到,主配置文件是通过包含/etc/drbd.d/global_common.conf全局通用配置文件和以.res结尾的这些/etc/drbd.d/*.res资源文件来配置drbd的。

修改global_common.conf文件如下:

global {

        usage-count yes;

}

common {

        handlers {

                pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

                pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

                local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";

        }

 

        startup {

                degr-wfc-timeout 120;

        }

        options {

                # cpu-mask on-no-data-accessible

        }

        disk {

                on-io-error detach;

        }

        net {

                protocol C;

        }

        syncer { rate 100M; }

}

 

资源文件配置如下:

[root@drbd1 ~]# cat /etc/drbd.d/r0.res

resource r0 {                   #资源名称为r0

  on drbd1 {                    #drbd1上面的配置

    device    /dev/drbd1;        #drbd1上的drbd设备

    disk      /dev/sdb1;         #drbd1上的物理磁盘分区

    address   10.10.10.11:7789; #本机ip地址,这里选择心跳ip

    meta-disk internal;             #表示在同一局域网内

  }

  on drbd2 {                    #drbd2机器上的配置

    device    /dev/drbd1;

    disk      /dev/sdb1;

    address   10.10.10.12:7789;

    meta-disk internal;

  }

}

 

两台机器上都执行如下命令创建r0资源数据块

[root@drbd1 ~]# drbdadm create-md r0


两次输入yes,创建成功。

再在两台机器上分别启动drbd

[root@drbd1 ~]# /etc/init.d/drbd start

查看drbd运行状态:

[root@drbd1 ~]# cat /proc/drbd

version: 8.4.0 (api:1/proto:86-100)

GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@drbd1, 2011-12-27 15:00:40

 

 1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----

ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:20964116

发现在两台机器上,drbd都为Secondary模式,因此需要指定哪个为主,哪个为从设备

只在drbd1机器上执行如下命令:

[root@drbd1 ~]# drbdsetup /dev/drbd1 primary –force

查看drbd运行状态,发现drbd正在同步数据

[root@drbd1 ~]# cat /proc/drbd

version: 8.4.0 (api:1/proto:86-100)

GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@drbd1, 2011-12-27 15:00:40

 

 1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----

    ns:1149952 nr:0 dw:0 dr:1158144 al:0 bm:69 lo:3 pe:1 ua:8 ap:0 ep:1 wo:b oos:19815188

        [>...................] sync'ed:  5.6% (19348/20472)M

        finish: 0:04:35 speed: 71,808 (71,808) K/sec

这里需要等待一点时间,让数据同步完成,然后执行如下命令来使drbd1drbd的主设备,只在drbd1上执行:

[root@drbd1 ~]# drbdadm primary r0

再看drbd的运行状态

[root@drbd1 ~]# cat /proc/drbd

version: 8.4.0 (api:1/proto:86-100)

GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@drbd1, 2011-12-27 15:00:40

 

 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

ns:20964116 nr:0 dw:0 dr:20964116 al:0 bm:1280 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

可以看到drbd1现在为primary了,drbd2上正好相反:


drbd1上查看角色

[root@drbd1 ~]# drbdadm role r0

Primary/Secondary

drbd2上查看角色

[root@drbd2 ~]# drbdadm role r0

Secondary/Primary

drbd设备,同一时间,只能在primary机器上被使用,因此这里只在drbd1上操作,对/dev/drbd1进行格式化,并挂载

[root@drbd1 ~]# mkfs -t ext3 /dev/drbd1

[root@drbd1 ~]# mkdir /oradate   #drbd2上面也要新建这个目录

[root@drbd1 ~]# mount /dev/drbd1 /oradate/

到此,drbd配置完成,下面需要在drbd设备的挂载点/oradate安装oracle

 

五、安装oracle10g

在两台机器上,做同样的oracle安装前的配置,下面以drbd1为例:

oracle安装详细参考官方文档,下面作简要的环境变量配置


oracle BASE目录赋权限

[root@drbd1 ~]# chown –R oracle:oinstall /oradate

[root@drbd1 ~]# chmod –R 755 /oradate

oracle家目录下~oracle/.bash_profile加入如下环境变量:

ORACLE_BASE=/oradate

ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1

ORACLE_SID=orcl

PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/lib:/usr/lib

export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH LD_LIBRARY_PATH


详细图形安装过程参考官方文档

 

安装完成后,对oracle监听进行配置,修改后如下

[oracle@drbd1 database]$ cd $ORACLE_HOME/network/admin

[oracle@drbd1 database]$ cat listener.ora

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = /oradate/product/10.2.0/db_1)

      (PROGRAM = extproc)

    )(SID_DESC =

     (GLOBAL_DBNAME = orcl)

     (ORACLE_HOME = /oradate/product/10.2.0/db_1)

     (SID_NAME = orcl)

     )

  )

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

      (ADDRESS = (PROTOCOL = TCP)(HOST = drbd)(PORT = 1521))

    )

  )

 

LISTENERHOST部分,填上虚拟ip或者虚拟ip的主机名,这里为主机名drbd

关闭监听,关闭数据库,下面开始配置heartbeat

 

六、配置heartbeat

drbd1上进行配置

[root@drbd1 ~]# cd /etc/ha.d/

1、双机互联验证文件

[root@drbd1 ha.d]# grep -v '^#' authkeys | grep -v '^$'

auth 1

1 crc

注意设置authkeys文件的权限为600

[root@drbd1 ha.d]# chmod 600 authkeys

2、主配置文件ha.cf,去掉注释和空行后,配置如下

[root@drbd1 ha.d]# grep -v '^#' ha.cf | grep -v '^$'

logfile /var/log/ha-log

logfacility     local0

keepalive 2

deadtime 30

warntime 10

initdead 120

udpport 694

baud    19200

ucast eth0 10.10.10.12   #此处选择单播方式进行通信,ip地址为对方节点的心跳ip

auto_failback on

node    drbd1

node    drbd2

ping    135.255.10.1    #一个能正常ping通的ip,这里选择固定的网关

respawn hacluster /usr/lib/heartbeat/ipfail

apiauth ipfail gid=haclient uid=hacluster

3、资源配置文件,只有一行

[root@drbd1 ha.d]# grep -v '^#' haresources | grep -v '^$'

drbd1 IPaddr::135.255.10.200/24/eth1  drbddisk::r0 Filesystem::/dev/drbd1::/oradate::ext3  notechange.sh

说明:drbd1为主节点的主机名,从节点也同样的配置,IPaddrheartbeat对虚拟ip的设置,drbddisk设置drbd资源的角色,Filesystem挂载drbd磁盘,notechange.sh为共享磁盘挂载卸载,oracle启动关闭脚本,脚本存放在/etc/ha.d /resource.d下,脚本内容如下:

[root@drbd1 ha.d]# cat  resource.d/notechange.sh

#!/bin/sh

#It’s used to startup/shutdown oracle database

 

export ORACLE_BASE=/oradate

export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1

export ORACLE_SID=orcl

export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/lib:/usr/lib

 

MOUNTDEV=/dev/drbd1

MOUNTPOINT=/oradate

case $1 in

start)

/bin/mount $MOUNTDEV $MOUNTPOINT

su - oracle -c "dbstart"

;;

stop)

su – oracle –c "dbshut"

fuser -k -m -v $MOUNTPOINT

/bin/umount $MOUNTPOINT

;;

*)

echo "Usage: $0 {start|stop}"

;;

esac

 

其中,需要说明的是dbstartdbshut两个脚本,这两个脚本为安装数据库后,自动生成的脚本,用来启动,关闭监听和数据库,其中dbstart部分地方需要做修改,才能正常启动。修改如下:

ORACLE_HOME_LISTNER=${ORACLE_HOME}

脚本通过ORACLE_HOME_LISTNER的值来定位到监听程序的可执行程序,从而启动监听,由于默认脚本设置的值和自己安装的目录路径不一样,因此需要修改成当前oracle的安装家目录。

另一个地方需要修改的是/etc/oratab文件,dbstart脚本通过读取oratab文件来决定是否启动数据库实例,启动哪个数据库实例。

修改如下:

orcl:/oradate/product/10.2.0/db_1:Y

将最后面的N改成Y,则为要启动orcl实例,路径为/oradate/product/10.2.0/db_1

如果其他还需要修改的,仔细阅读脚本,修改成当前oracle安装环境的变量即可。

 

在主节点上配置完heartbeat后,再把这些配置文件全部复制到从节点,因为从节点的配置文件要和主节点完全相同:

[root@drbd2 ~]# scp -r drbd1:/etc/ha.d/*  /etc/ha.d/

注意ha.cf文件里面单播通讯的地方,ip地址要填对方节点的心跳ip,除了这里需要修改外,其他地方完全一样!

复制主节点/etc/oratab文件到从节点

[root@drbd2 ~]# scp drbd1:/etc/ora*  /etc/

这里将主节点上安装数据库时生成的两个文件都拷贝过来,包括修改后的oratab文件。

 

七、启动heartbeat

查看drbd状态:

 

[root@drbd1 ~]# drbdadm role r0

Primary/Secondary

 

此时,drbd已经在正常运行,可以启动heartbeat了。

两台机器上,分别启动heartbeat

[root@drbd1 ~]# /etc/init.d/heartbeat start

稍等片刻,查看drbd是否挂载

[root@drbd1 ~]# ls /oradate/

admin  flash_recovery_area  lost+found  oradata oraInventory  product

可以看到,oradate目录下已经有了oracle的安装文件了


再来看oracle的监听是否开启,切换到oracle用户,查看监听的状态:

[root@drbd1 ~]# su - oracle

[oracle@drbd1 ~]$ lsnrctl status


监听正常,登录数据库,查看数据库的运行状态:

[oracle@drbd1 ~]$ sqlplus / as sysdba


SQL> select database_status from v$instance;

 

DATABASE_STATUS

-----------------

ACTIVE

 


SQL> !hostname

drbd1

数据库开启并且活跃,用户为sys,当前服务器主机名为drbd1,即主节点。

 

八、测试heartbeat切换是否正常

关闭主节点drbd1,稍后待heartbeat切换完成后,到节点2上查看drbd运行状态和数据库的运行状态

[root@drbd2 ~]# cat /proc/drbd

version: 8.4.0 (api:1/proto:86-100)

GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by root@drbd2, 2011-12-27 15:06:19

 

 1: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r-----

ns:0 nr:20984860 dw:20985092 dr:7561 al:10 bm:1280 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:204

可以看到,节点2drbd当前为primary状态,从节点为unknown

[root@drbd2 ~]# ls /oradate/

admin  flash_recovery_area  lost+found  oradata oraInventory  product

目录下已经有文件了


[root@drbd2 ~]# su - oracle

[oracle@drbd2 ~]$ lsnrctl status


监听正常

[oracle@drbd2 ~]$ sqlplus / as sysdba


SQL> select status from v$instance;

 

STATUS

------------

OPEN

 

SQL> !hostname

drbd2

数据库为open状态。

win下,配置tns后,客户端连接数据库,如下:

C:\Documents and Settings\Administrator>sqlplus "system/oracle@orcl"


SQL> select status from v$instance;

 

STATUS

------------

OPEN

 


自此,整个双机热备配置完成!

整个文档根据虚拟机上实验整理完成,如有错误,遗漏,或者更好的建议,谢谢指出!!