一、安装环境说明:
操作系统: 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地址。
两台机器上主机名及网关的配置,这里以主机器为例:
[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
这里需要等待一点时间,让数据同步完成,然后执行如下命令来使 drbd1为 drbd的主设备,只在 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))
)
)
LISTENER的 HOST部分,填上虚拟 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为主节点的主机名,从节点也同样的配置, IPaddr为 heartbeat对虚拟 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
其中,需要说明的是 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后,再把这些配置文件全部复制到从节点,因为从节点的配置文件要和主节点完全相同:
[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
可以看到,节点 2的 drbd当前为 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
自此,整个双机热备配置完成!
整个文档根据虚拟机上实验整理完成,如有错误,遗漏,或者更好的建议,谢谢指出!!
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com