Jul
9
[原]构建Heartbeat 2.1.3 GUI+DRBD+Oracle 10g 双机互备集群
我已经写过不止一篇关于Heartbeat 2.x 配置方法的文档,包括1.x style和2.x style的配置方式、GUI 配置、双机互备集群等等,详细可见分类中“HA”部分。那为什么今天我还要再次重复类似的内容呢?原因有几个,例如:Heartbeat 2.1.3 中的Bug、DRBD resource agent 的Bug,Heartbeat 2.x 与 DRBD 的配合等。这些内容在我下面的文档中都会提到。
另外,特别需要说明的是,目前Heartbeat 最新版本是3.x,已停止对2.x 的支持(包括官网都已改版)。这也是导致我在使用Heartbeat 2.x 时遇到问题,可供参考资料较少的原因之一。当然,Heartbeat 2.x 与 3.x 的区别实际并不是特别大,很多东西还是可以相互借鉴、参考的。
一、准备工作
如果您之前没有配置过Heartbeat 2.x,甚至不知道什么是HA(高可用集群)。那我建议您暂时不要继续往下看,可先看看我过往写的一些资料,这些都在分类中“HA”部分中,例如:
[原]heartbeat 2.x基础概念
[原]heartbeat 2.x基础架构
[原]使用hb_gui 配置heartbeat
[原]使用heartbeat配置双机互备集群
此外,由于本文将会构建的是用DRBD实现的镜像磁盘数据共享方式集群,而区别于之前日志[原]使用heartbeat配置双机互备集群中模拟的共享盘柜方式。所以,在构建HA集群前,当然需要先把DRBD配置完成。可参考:[原]使用DRBD创建镜像分区一文。
原理性、基础性的东西准备完成后,即可进行下面的工作。(下面的内容主要描述需特别留意或修改的地方,不会完全以tutorial 方式进行)。
※ 关于RA
Heartbeat 2.x 支持多种资源代理(Resource Agent,简称RA),其中最常见的是lsb和ocf/heartbeat。这些RA实际上就是一些脚本,可根据脚本运行的结果提交给CRM分析和处理。不过,RA很重要,除了一些逻辑错误设定外,在配置heartbeat不成功时,大部分原因都是由于RA脚本的兼容性等问题。
例如,我在之前的[原]使用heartbeat配置双机互备集群一文中,例如RA启动、监听、关闭Httpd、Mysql 都很正常。但在本次的测试期间,drbd、oracle、oralsnr 三个ocf/heartbeat 格式的RA都有问题。
所以,自Heartbeat 3.0开始,把Resource Agent作为一个独立的项目来处理。
官方网站:http://hg.linux-ha.org/agents
使用参考:Resource Agents
RA 的参数配置非常重要,使用前请多查看帮助文档。
1、系统环境
2、Heartbeat 版本
※ 为什么不使用Heartbeat 3.x
虽然现在Heartbeat 最新版本是3.0.3,但是,一方面我对Heartbeat 2.1.3比较熟悉,而且Heartbeat 3.0可供参考的资料太少;另外,Heartbeat 3.0实际上可理解为把2.x版本按功能拆分,并改用Cluster Glue作为集群管理工具的升级版。所以,Heartbeat 2.x 与 3.0 有很多内容都是可以借鉴和参考的。最关键的一点是,我暂时还找不到现成的Heartbeat 3.0.3 rpm 包(还有很多依赖包),这些将会给后续的配置带来很多不可预知的问题,所以,我还是决定用2.x版本。
Heartbeat 2.x 的安装,我还是会使用CentOS提供的源,以yum 的方式进行,这非常的轻松。但是,目前还是2.1.3版本(Heartbeat 2.x 最后一个STABLE版是2.1.4,之后就跳到3.0了)。
目前,我使用的Heartbeat版本是:
因2.1.4与2.1.3差别很小,所以,我最终还是选择直接yum 的方式安装。不过,下面提到的多个Bug在2.1.4上也存在,因此,内容不会重复。(您可以选择参考下文的内容自行修复这些Bug,或直接用我最后在附录中提供的修正后rpm包来安装)
二、关键配置和Bug修复
在已完成上述我提到的系统环境,包括两集群主机的主机名、/etc/hosts文件配置、DRBD安装及配置、Oracle双机环境部署等工作后,即可进行Heartbeat 2.x 的配置。
1、常规设定
这里指的是两集群主机/etc/ha.d目录中的authkeys和ha.cf 配置文件,它们在各节点的内容都是相同的:
此外,为了避免启动时报警告信息,虽然haresources文件在2.x style配置文件中是没用的,但还是在各节点上创建一个空文件:
2、修改heartbeat启动脚本
heartbeat的启动脚本指的是/etc/init.d/heartbeat,这Bug涉及两方面的内容:
a、crm 临时目录的问题
该问题在之前的文章中已多次提到,请见这里。修改的内容就是下面红色标记部分:
b、heartbeat启动后,导致不能正常重启或关闭机器的问题
由于系统升级的原因,heartbeat启动脚本中chkconfig部分的定义不符合要求,导致不能创建K05heartbeat的链接。换句话说,当heartbeat 已经启动,并手动重启或关闭机器时,不会预先关闭heartbeat进程,而在终止网络、挂载等进程后,heartbeat不断的报错,必须强制关机。
发生该问题时,关机途中,您会在主屏幕上看到类似下面的报错信息:
解决方法是,把heartbeat启动脚本中,下面的内容:
修改为:
然后重新创建启动服务表:
可用下面的命令确认修改是否生效:
3、创建GUI 管理用户
CRM 的用户似乎没有权限的划分,并且只能通过127.0.0.1从本机进行访问(没仔细研究)。所以,需要在各节点上给hacluster设置一下密码:
4、drbd resource agent 的问题
如前文提到的,heartbeat 2.1.3 可使用多种drbd监控的RA,考虑到兼容性、扩展性等方面,我们将使用的是ocf/heartbeat格式的drbd RA。其文件存放在/usr/lib/ocf/resource.d/heartbeat/drbd,但该RA是基于DRBD 7.3的,不兼容8以上版本。原因是,DRBD 8以上版本的drbdadm中,丢弃了state参数,而用role代替:
而drbd RA中正是依赖该命令的返回结果进行判断的,所以导致不兼容。该问题可参考以下两个链接:
[Ubuntu-ha] [Bug 369124] Re: heartbeat incompatible with drbd8-utils in jaunty
drbd heartbeat v2
解决方法,把/usr/lib/ocf/resource.d/heartbeat/drbd中下面部分的内容:
修改为:
※ 除了ocf/heartbeat 格式的drbd RA外,drbd rpm包本身也提供了heartbeat格式的drbddisk、drbdupper两个RA、linbit的drbd RA。
其中,heartbeat格式的drbddisk、drbdupper存放在/etc/ha.d/resource.d/目录下,若需使用请自行选择。(需修改其中的DEFAULTFILE 变量,drbddisk 用于加载drbd.ko模块,drbdupper用于设置primary设备。)
根据DRBD 8 的建议,从8.2开始,应使用其自带的drbd RA,路径为:/usr/lib/ocf/resource.d/linbit/drbd,在创建资源时,可选择linbit/drbd即可。
5、oracle/oralsnr resource agent 的问题
和上面的问题类似,heartbeat 2.1.3虽然自带有用于Oracle 的RA,但这两个RA在处理ORACLE_HOME 时都有问题。可参考以下链接:
Problems with oracle ocf-RA in heartbeat 2.1.2
解决办法是,使用新的RA:agents-1.0.3.tar.bz2。这个RA是当前Heartbeat 3.0.3使用的,不过,我之前已经说过Heartbeat 2.x 与 3.0 的关系,经测试,这两个RA也是兼容2.1.3的。
使用方法很简单,先把Agents解压,然后用新的RA覆盖旧文件即可:
我这里提供这两个RA:
至此,Heartbeat 2.1.3监控DRBD、Oracle需修正的脚本Bug等都已完成,上述的操作都必须保证在集群中每个节点上完成。当然,您也可以在一个节点上修改后,拷贝到其他节点。接下来就可用hb_gui 进行配置。
※ 注意,并不是供Heartbeat 3.0.3使用的每个RA都能兼容2.x版本的,例如新的drbd RA在监控时就会报错,所以,在使用RA前需测试,甚至根据情况修改RA脚本。
另外,特别需要说明的是,目前Heartbeat 最新版本是3.x,已停止对2.x 的支持(包括官网都已改版)。这也是导致我在使用Heartbeat 2.x 时遇到问题,可供参考资料较少的原因之一。当然,Heartbeat 2.x 与 3.x 的区别实际并不是特别大,很多东西还是可以相互借鉴、参考的。
一、准备工作
如果您之前没有配置过Heartbeat 2.x,甚至不知道什么是HA(高可用集群)。那我建议您暂时不要继续往下看,可先看看我过往写的一些资料,这些都在分类中“HA”部分中,例如:
[原]heartbeat 2.x基础概念
[原]heartbeat 2.x基础架构
[原]使用hb_gui 配置heartbeat
[原]使用heartbeat配置双机互备集群
此外,由于本文将会构建的是用DRBD实现的镜像磁盘数据共享方式集群,而区别于之前日志[原]使用heartbeat配置双机互备集群中模拟的共享盘柜方式。所以,在构建HA集群前,当然需要先把DRBD配置完成。可参考:[原]使用DRBD创建镜像分区一文。
原理性、基础性的东西准备完成后,即可进行下面的工作。(下面的内容主要描述需特别留意或修改的地方,不会完全以tutorial 方式进行)。
※ 关于RA
Heartbeat 2.x 支持多种资源代理(Resource Agent,简称RA),其中最常见的是lsb和ocf/heartbeat。这些RA实际上就是一些脚本,可根据脚本运行的结果提交给CRM分析和处理。不过,RA很重要,除了一些逻辑错误设定外,在配置heartbeat不成功时,大部分原因都是由于RA脚本的兼容性等问题。
例如,我在之前的[原]使用heartbeat配置双机互备集群一文中,例如RA启动、监听、关闭Httpd、Mysql 都很正常。但在本次的测试期间,drbd、oracle、oralsnr 三个ocf/heartbeat 格式的RA都有问题。
所以,自Heartbeat 3.0开始,把Resource Agent作为一个独立的项目来处理。
官方网站:http://hg.linux-ha.org/agents
使用参考:Resource Agents
RA 的参数配置非常重要,使用前请多查看帮助文档。
1、系统环境
引用
操作系统:Asianux 3.0 SP2 for x86_64
DRBD 版本:8.3.8
Heartbeat 版本:2.1.3
Oracle 版本:10.2.0.4
两服务器:
drbd1.linuxfly.org:192.168.228.133
drbd2.linuxfly.org:192.168.228.134
DRBD 镜像分区:
资源名称:oradata
设备:/dev/drbd0
挂载点:/oradata (存放Oracle实例)
DRBD 版本:8.3.8
Heartbeat 版本:2.1.3
Oracle 版本:10.2.0.4
两服务器:
drbd1.linuxfly.org:192.168.228.133
drbd2.linuxfly.org:192.168.228.134
DRBD 镜像分区:
资源名称:oradata
设备:/dev/drbd0
挂载点:/oradata (存放Oracle实例)
2、Heartbeat 版本
※ 为什么不使用Heartbeat 3.x
虽然现在Heartbeat 最新版本是3.0.3,但是,一方面我对Heartbeat 2.1.3比较熟悉,而且Heartbeat 3.0可供参考的资料太少;另外,Heartbeat 3.0实际上可理解为把2.x版本按功能拆分,并改用Cluster Glue作为集群管理工具的升级版。所以,Heartbeat 2.x 与 3.0 有很多内容都是可以借鉴和参考的。最关键的一点是,我暂时还找不到现成的Heartbeat 3.0.3 rpm 包(还有很多依赖包),这些将会给后续的配置带来很多不可预知的问题,所以,我还是决定用2.x版本。
Heartbeat 2.x 的安装,我还是会使用CentOS提供的源,以yum 的方式进行,这非常的轻松。但是,目前还是2.1.3版本(Heartbeat 2.x 最后一个STABLE版是2.1.4,之后就跳到3.0了)。
目前,我使用的Heartbeat版本是:
引用
# rpm -qa|grep heartbeat
heartbeat-2.1.3-3.el5.centos
heartbeat-devel-2.1.3-3.el5.centos
heartbeat-stonith-2.1.3-3.el5.centos
heartbeat-ldirectord-2.1.3-3.el5.centos
heartbeat-pils-2.1.3-3.el5.centos
heartbeat-gui-2.1.3-3.el5.centos
heartbeat-2.1.3-3.el5.centos
heartbeat-devel-2.1.3-3.el5.centos
heartbeat-stonith-2.1.3-3.el5.centos
heartbeat-ldirectord-2.1.3-3.el5.centos
heartbeat-pils-2.1.3-3.el5.centos
heartbeat-gui-2.1.3-3.el5.centos
因2.1.4与2.1.3差别很小,所以,我最终还是选择直接yum 的方式安装。不过,下面提到的多个Bug在2.1.4上也存在,因此,内容不会重复。(您可以选择参考下文的内容自行修复这些Bug,或直接用我最后在附录中提供的修正后rpm包来安装)
二、关键配置和Bug修复
在已完成上述我提到的系统环境,包括两集群主机的主机名、/etc/hosts文件配置、DRBD安装及配置、Oracle双机环境部署等工作后,即可进行Heartbeat 2.x 的配置。
1、常规设定
这里指的是两集群主机/etc/ha.d目录中的authkeys和ha.cf 配置文件,它们在各节点的内容都是相同的:
引用
# grep -v '^#' authkeys
auth 2
1 crc
2 sha1 HI!
3 md5 Hello!
# grep -v '^#' ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
initdead 30
udpport 694
bcast eth0 # Linux
auto_failback on
node drbd1.linuxfly.org
node drbd2.linuxfly.org
compression bz2
compression_threshold 2
crm respawn
auth 2
1 crc
2 sha1 HI!
3 md5 Hello!
# grep -v '^#' ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
initdead 30
udpport 694
bcast eth0 # Linux
auto_failback on
node drbd1.linuxfly.org
node drbd2.linuxfly.org
compression bz2
compression_threshold 2
crm respawn
此外,为了避免启动时报警告信息,虽然haresources文件在2.x style配置文件中是没用的,但还是在各节点上创建一个空文件:
# touch haresources
2、修改heartbeat启动脚本
heartbeat的启动脚本指的是/etc/init.d/heartbeat,这Bug涉及两方面的内容:
a、crm 临时目录的问题
该问题在之前的文章中已多次提到,请见这里。修改的内容就是下面红色标记部分:
引用
StartHA() {
EchoNoNl "Starting High-Availability services: "
......
if
[ ! -d $RUNDIR/heartbeat/ccm -o ! -d $RUNDIR/heartbeat/crm ]
then
......
EchoNoNl "Starting High-Availability services: "
......
if
[ ! -d $RUNDIR/heartbeat/ccm -o ! -d $RUNDIR/heartbeat/crm ]
then
......
b、heartbeat启动后,导致不能正常重启或关闭机器的问题
由于系统升级的原因,heartbeat启动脚本中chkconfig部分的定义不符合要求,导致不能创建K05heartbeat的链接。换句话说,当heartbeat 已经启动,并手动重启或关闭机器时,不会预先关闭heartbeat进程,而在终止网络、挂载等进程后,heartbeat不断的报错,必须强制关机。
发生该问题时,关机途中,您会在主屏幕上看到类似下面的报错信息:
解决方法是,把heartbeat启动脚本中,下面的内容:
引用
# chkconfig: 2345 75 05
修改为:
引用
# chkconfig: - 75 05
然后重新创建启动服务表:
# chkconfig --del heartbeat
# chkconfig --add heartbeat
# chkconfig --add heartbeat
可用下面的命令确认修改是否生效:
引用
# find /etc/rc.d/ -name 'K05heartbeat'
/etc/rc.d/rc4.d/K05heartbeat
/etc/rc.d/rc6.d/K05heartbeat
/etc/rc.d/rc1.d/K05heartbeat
/etc/rc.d/rc0.d/K05heartbeat
/etc/rc.d/rc2.d/K05heartbeat
/etc/rc.d/rc4.d/K05heartbeat
/etc/rc.d/rc6.d/K05heartbeat
/etc/rc.d/rc1.d/K05heartbeat
/etc/rc.d/rc0.d/K05heartbeat
/etc/rc.d/rc2.d/K05heartbeat
3、创建GUI 管理用户
CRM 的用户似乎没有权限的划分,并且只能通过127.0.0.1从本机进行访问(没仔细研究)。所以,需要在各节点上给hacluster设置一下密码:
# passwd hacluster
4、drbd resource agent 的问题
如前文提到的,heartbeat 2.1.3 可使用多种drbd监控的RA,考虑到兼容性、扩展性等方面,我们将使用的是ocf/heartbeat格式的drbd RA。其文件存放在/usr/lib/ocf/resource.d/heartbeat/drbd,但该RA是基于DRBD 7.3的,不兼容8以上版本。原因是,DRBD 8以上版本的drbdadm中,丢弃了state参数,而用role代替:
引用
# drbdadm state oradata
'drbdadm state' is deprecated, use 'drbdadm role' instead.
Primary/Secondary
'drbdadm state' is deprecated, use 'drbdadm role' instead.
Primary/Secondary
而drbd RA中正是依赖该命令的返回结果进行判断的,所以导致不兼容。该问题可参考以下两个链接:
[Ubuntu-ha] [Bug 369124] Re: heartbeat incompatible with drbd8-utils in jaunty
drbd heartbeat v2
解决方法,把/usr/lib/ocf/resource.d/heartbeat/drbd中下面部分的内容:
引用
drbd_get_status() {
DRBD_STATE=$(do_drbdadm state $RESOURCE)
DRBD_STATE=$(do_drbdadm state $RESOURCE)
修改为:
引用
drbd_get_status() {
DRBD_STATE=$(do_drbdadm role $RESOURCE)
DRBD_STATE=$(do_drbdadm role $RESOURCE)
※ 除了ocf/heartbeat 格式的drbd RA外,drbd rpm包本身也提供了heartbeat格式的drbddisk、drbdupper两个RA、linbit的drbd RA。
其中,heartbeat格式的drbddisk、drbdupper存放在/etc/ha.d/resource.d/目录下,若需使用请自行选择。(需修改其中的DEFAULTFILE 变量,drbddisk 用于加载drbd.ko模块,drbdupper用于设置primary设备。)
根据DRBD 8 的建议,从8.2开始,应使用其自带的drbd RA,路径为:/usr/lib/ocf/resource.d/linbit/drbd,在创建资源时,可选择linbit/drbd即可。
5、oracle/oralsnr resource agent 的问题
和上面的问题类似,heartbeat 2.1.3虽然自带有用于Oracle 的RA,但这两个RA在处理ORACLE_HOME 时都有问题。可参考以下链接:
Problems with oracle ocf-RA in heartbeat 2.1.2
解决办法是,使用新的RA:agents-1.0.3.tar.bz2。这个RA是当前Heartbeat 3.0.3使用的,不过,我之前已经说过Heartbeat 2.x 与 3.0 的关系,经测试,这两个RA也是兼容2.1.3的。
使用方法很简单,先把Agents解压,然后用新的RA覆盖旧文件即可:
# cp Cluster-Resource-Agents-agents-1.0.3/heartbeat/ora* /usr/lib/ocf/resource.d/heartbeat/
我这里提供这两个RA:
下载文件
至此,Heartbeat 2.1.3监控DRBD、Oracle需修正的脚本Bug等都已完成,上述的操作都必须保证在集群中每个节点上完成。当然,您也可以在一个节点上修改后,拷贝到其他节点。接下来就可用hb_gui 进行配置。
※ 注意,并不是供Heartbeat 3.0.3使用的每个RA都能兼容2.x版本的,例如新的drbd RA在监控时就会报错,所以,在使用RA前需测试,甚至根据情况修改RA脚本。
内文分页: [1] [2]
http://www.linuxfly.org/post/531/