hncys 发表于 2019-1-7 12:16:53

Centos5.5+heartbeat+drbd+oracle10g双机配置

  一、安装环境说明:
操作系统:centos5.5x86
主要软件及版本:heartbeat2.0.8   drbd-8.4.0
依赖软件及版本:libnet 1.1.2.1(heartbeat所需)
数据库版本:oracle 10201 32位

安装前规划:
网卡:两台机器配双网卡,一个用于连接公用网络,一个用于做心跳测试。
主机名:分别为drbd1, drbd2,虚拟ip主机名drbd
IP:主drbd1:eth0 10.10.10.11 心跳ip   eth1 135.255.10.211 连接公网。
从drbd2:eth0 10.10.10.12 心跳ip   eth1 135.255.10.212 连接公网。
两台机器的eth0用交叉线相连,eth1为局域网络,共用一个网关:130.255.10.1
虚拟ip:eth1:0 135.255.10.200 虚拟ip由heartbeat自动管理,不需要预先设置。
磁盘:两台机器分别加上一个大小20G的硬盘。用来做drbd网络共享存储,并在上面安装oracle。

二、安装前配置
ip地址的配置:
eth0分别配置心跳ip,eth1分别配上上述ip地址。

两台机器上主机名及网关的配置,这里以主机器为例:
# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=drbd1#主机名 另一台机器为drbd2
GATEWAY=135.255.10.1#网关

在两台机器上,都配置hosts文件,新增三个ip到主机名的解析
# 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
两台机器上做一样的安装和配置
添加用户和用户组
# groupadd haclient
# useradd -g haclient hacluster
首先安装libnet
# cd /usr/local/src/
# tar zxvf libnet-1.1.2.1.tar.gz
# cd libnet/
# ./configure
# make
# make install
安装heartbeat
# tar zxvf Heartbeat-2-1-2d298bca0d0a.tar.gz
# cd Heartbeat-2-1-2d298bca0d0a/
# ./ConfigureMe configure
# make
注意,这里make到一半,可能会报一个类似hbapingHBcomm等字样的错误,解决方法:
# cd lib/plugins/HBcomm/
# mv hbaping.loT hbaping.lo
回到heartbeat文件根目录下重新再执行make即可继续编译。注意这里的hbaping.loT在第一次make之前是不存在的,必须要先make编译,生成了hbaping.loT,再在报错的时候文件名修改为hbaping.lo,再重新make一次即可。最后执行make install安装
# make install
复制三个配置文件到/etc/ha.d/目录下
# cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/

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

四、安装配置drbd
先将两台机器的新硬盘进行分区,使用fdisk,给第二块硬盘,即/dev/sdb分区,这里都只划一个主分区/dev/sdb1,完成后先不进行格式化,稍后会用到。
两台机器都安装配置drbd,配置完全相同:
# tar zxvf drbd-8.4.0.tar.gz
# cd drbd-8.4.0/
# ./configure
# make rpm
# make km-rpm
# cd /usr/src/redhat/RPMS/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.rpmdrbd-km-2.6.18_194.el5-8.4.0-1.i386.rpmdrbd-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
# rpm -ivh drbd*
# modprobe drbd   #加载drbd到内核
# lsmod |grep drbd   #查看是否加载成功
drbd                  2508520
开始配置drbd
主配置文件为/etc/drbd.conf
# 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; }
}

资源文件配置如下:
# 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资源数据块
# drbdadm create-md r0

两次输入yes,创建成功。
再在两台机器上分别启动drbd
# /etc/init.d/drbd start
查看drbd运行状态:
# 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机器上执行如下命令:
# drbdsetup /dev/drbd1 primary –force
查看drbd运行状态,发现drbd正在同步数据
# 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
这里需要等待一点时间,让数据同步完成,然后执行如下命令来使drbd1为drbd的主设备,只在drbd1上执行:
# drbdadm primary r0
再看drbd的运行状态
# 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上查看角色
# drbdadm role r0
Primary/Secondary
drbd2上查看角色
# drbdadm role r0
Secondary/Primary
drbd设备,同一时间,只能在primary机器上被使用,因此这里只在drbd1上操作,对/dev/drbd1进行格式化,并挂载
# mkfs -t ext3 /dev/drbd1
# mkdir /oradate   #在drbd2上面也要新建这个目录
# mount /dev/drbd1 /oradate/
到此,drbd配置完成,下面需要在drbd设备的挂载点/oradate安装oracle

五、安装oracle10g
在两台机器上,做同样的oracle安装前的配置,下面以drbd1为例:
oracle安装详细参考官方文档,下面作简要的环境变量配置

给oracle BASE目录赋权限
# chown –R oracle:oinstall /oradate
# 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监听进行配置,修改后如下
$ cd $ORACLE_HOME/network/admin
$ 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))
    )
)

LISTENER的HOST部分,填上虚拟ip或者虚拟ip的主机名,这里为主机名drbd
关闭监听,关闭数据库,下面开始配置heartbeat

六、配置heartbeat
在drbd1上进行配置
# cd /etc/ha.d/
1、双机互联验证文件
# grep -v '^#' authkeys | grep -v '^$'
auth 1
1 crc
注意设置authkeys文件的权限为600
# chmod 600 authkeys
2、主配置文件ha.cf,去掉注释和空行后,配置如下
# 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、资源配置文件,只有一行
# grep -v '^#' haresources | grep -v '^$'
drbd1 IPaddr::135.255.10.200/24/eth1drbddisk::r0 Filesystem::/dev/drbd1::/oradate::ext3notechange.sh
说明:drbd1为主节点的主机名,从节点也同样的配置,IPaddr为heartbeat对虚拟ip的设置,drbddisk设置drbd资源的角色,Filesystem挂载drbd磁盘,notechange.sh为共享磁盘挂载卸载,oracle启动关闭脚本,脚本存放在/etc/ha.d /resource.d下,脚本内容如下:
# catresource.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

其中,需要说明的是dbstart和dbshut两个脚本,这两个脚本为安装数据库后,自动生成的脚本,用来启动,关闭监听和数据库,其中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后,再把这些配置文件全部复制到从节点,因为从节点的配置文件要和主节点完全相同:
# scp -r drbd1:/etc/ha.d/*/etc/ha.d/
注意ha.cf文件里面单播通讯的地方,ip地址要填对方节点的心跳ip,除了这里需要修改外,其他地方完全一样!
复制主节点/etc/oratab文件到从节点
# scp drbd1:/etc/ora*/etc/
这里将主节点上安装数据库时生成的两个文件都拷贝过来,包括修改后的oratab文件。

七、启动heartbeat
查看drbd状态:

# drbdadm role r0
Primary/Secondary
此时,drbd已经在正常运行,可以启动heartbeat了。
两台机器上,分别启动heartbeat
# /etc/init.d/heartbeat start

稍等片刻,查看drbd是否挂载
# ls /oradate/
adminflash_recovery_arealost+foundoradata oraInventoryproduct
可以看到,oradate目录下已经有了oracle的安装文件了

再来看oracle的监听是否开启,切换到oracle用户,查看监听的状态:
# su - oracle
$ lsnrctl status

监听正常,登录数据库,查看数据库的运行状态:
$ sqlplus / as sysdba

SQL> select database_status from v$instance;

DATABASE_STATUS
-----------------
ACTIVE


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

八、测试heartbeat切换是否正常
关闭主节点drbd1,稍后待heartbeat切换完成后,到节点2上查看drbd运行状态和数据库的运行状态
# 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
可以看到,节点2的drbd当前为primary状态,从节点为unknown
# ls /oradate/
adminflash_recovery_arealost+foundoradata oraInventoryproduct
目录下已经有文件了

# su - oracle
$ lsnrctl status

监听正常
$ 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


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



页: [1]
查看完整版本: Centos5.5+heartbeat+drbd+oracle10g双机配置