- 论坛徽章:
- 0
|
本帖最后由 rwx_hc 于 2011-08-29 12:47 编辑
在RHEL5下配置安装Heartbeat+drbd+pacemaker做双机热备
前言:近期在做双机热备实验,其间并不顺利,几乎每一步都遇到这样那样问题。由于内核支持问题导致drbd.ko编译不成功,
由于编译选项导致路径问题,由于防火墙导致HA split brain,由于内核iptables模块选项问题导致IPaddr2资源clone失败等等。
相信也有不少朋友在这些方面被困扰过,因此整理一下分享出来。
实验目的:双机热备,支持服务:httpd、postgresql(注:出于简洁目的postgresql部分配置本文未贴出来)
环境:
操作系统:Red Hat Enterprise Linux Server release 5.2 (Tikanga)
内核版本:2.6.32.41
虚拟机:VMware Workstation 7.0.0 build-203739
磁盘:系统盘/dev/hda,数据盘/dev/hdb
分区情况:系统分区/dev/hda1,交换分区/dev/hda2,drbd资源分区/dev/hdb1 /dev/hdb2
节点1:ha1 192.168.1.130
节点2:ha2 192.168.1.131
集群IP:192.168.1.132
软件准备:
//Heartbeat依赖此软件提供的静态库:libnet.a
libnet-1.1.2.1.tar.gz
//heartbeat套件:
Heartbeat-3-0-STABLE-3.0.4.tar.bz2
ClusterLabs-resource-agents-agents-1[1].0.4-0-gc06b6f3.tar.gz
Pacemaker-1-0-db98485d06ed.tar.bz2
Reusable-Cluster-Components-glue--glue-1.0.7.tar.bz2
//drbd:提供磁盘网络同步
drbd-8.4.0.tar.gz
注:本文档以符号//为注释说明,在配置文件或脚本中请删除掉或用相应注释符号如#
安装前准备:
内核需要重新编译,主要是编译内核模块drbd.ko依赖问题。
CONFIG_SYSFS_DEPRECATED=y //解决从2.6.18-92.el5升级到2.6.32.41时,提示:mount: could not find filesystem ‘/dev/root’
位置: General setup ---> enable deprecated sysfs features which may confuse old userspace tools
CRYPTO_CRC32C=y //解决加载模块drbd.ko报错:未解析的符号:crc32c
位置:-*- Cryptographic API ---> -*- CRC32c CRC algorithm
CONFIG_CONNECTOR=y //解决LD链接报错:connector.o文件没有找到!
位置:Device Drivers ---> Generic Driver Options ---> <*> Connector - unified userspace <-> kernelspace link
注:上面的选项如果不知道位置可以在内核配置界面按键:/ 来查找内容。
File systems --->
如果需要支持负载均衡,那么需要新的文件系统支持:GFS2或OCFS2(注:drbd双主模式在RHEL5上没有测试成功,主要是没有支持dlm-pcmk、gfs-pcmk等模块)
GFS2依赖选项(iptables的ClusterIP功能也依赖它):General setup ---> Prompt for development and/or incomplete code/drivers
-*- Networking support --->
如果需要支持负载均衡,那么这块内容需要仔细配置了,否则clone IP资源是无法成功启动的,这个地方我是经历了N次失败,
最后查看了日志文件:/var/log/messagest和ocf脚本/usr/lib/ocf/resource.d/heartbeat/IPaddr2才发现问题出在iptables缺少模块支持!
建议:<>项设定成模块,[]项则编译到内核。也就是:<M> 方式设定所有 Networking options 下的选项。
编译简要说明:
make bzImage && make modules && make modules_install && make install
drbd内核模块是单独编译安装的,安装路径:/lib/modules/2.6.32.41/updates/drbd.ko
等drbd编译并安装后就可以打包这些模块,拷贝到节点上了。
打包命令:
tar czvf kerne_l2.6.32.41_package.tar.gz /boot/""{System.map,System.map-2.6.32.41,vmlinuz-2.6.32.41,vmlinuz,initrd-2.6.32.41.img} /boot/grub/grub.conf /lib/firmware/ /lib/modules/2.6.32.41/
安装打包文件到节点:上传打包文件到目的节点上
tar -C / --overwrite -xzf kerne_l2.6.32.41_package.tar.gz
安装部分:
这里假定以root身份登录到系统,软件目录在,/root/ha/
节点ha1:
cd /root/ha
解压源文件:
tar xjf Heartbeat-3-0-STABLE-3.0.4.tar.bz2
tar xjf Pacemaker-1-0-db98485d06ed.tar.bz2
tar xjf Reusable-Cluster-Components-glue--glue-1.0.7.tar.bz2
tar xzf ClusterLabs-resource-agents-agents-1[1].0.4-0-gc06b6f3.tar.gz
tar xzf drbd-8.4.0.tar.gz
tar xzf libnet-1.1.2.1.tar.gz
由于编译时会调用/usr/bin/xsltproc通过网络获取doc,因此耗时且麻烦(不能忍受的慢,一个项目就要数小时)。因此想了个办法阻止:
mv /usr/bin/xsltproc /usr/bin/xsltproc.bak
echo -e '#!/bin/sh \n exit 0' > /usr/bin/xsltproc
chmod +x /usr/bin/xsltproc
如果需要完整安装,则不要替换此程序,同时需要配置缺省路由和DNS服务器:
route add default gw 192.168.1.1
vim /etc/resolv.conf 添加行:nameserver 202.98.96.68 //当然也可以添加其他dns服务器地址
cd libnet
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make && make install
打包到dst目录:
mkdir dst
make DESTDIR=$PWD/dst install
cd Reusable-Cluster-Components-glue--glue-1.0.7
./autogen.sh
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make && make -i install //注意这里添加了-i 选项,由于替换了/usr/bin/xsltproc为一个空脚本(不想联网取文档!),不加-i将会退出安装。
打包到dst目录:
mkdir dst
make -i DESTDIR=$PWD/dst install
cd ClusterLabs-resource-agents-c06b6f3
./autogen.sh
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make && make -i install
ocf-shellfuncs路径问题:
ocf脚本依赖此脚本,有些脚本寻找路径为:/usr/lib/ocf/resource.d/heartbeat/ocf-shellfuncs
而有些寻找路径为:/usr/lib/ocf/resource.d/heartbeat/.ocf-shellfuncs
但其真实路径却是:/usr/lib/ocf/lib/heartbeat/ocf-shellfuncs
解决办法:添加软链接到脚本依赖的路径:其他3个文件同样处理:ocf-binaries ocf-directories ocf-returncodes
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs /usr/lib/ocf/resource.d/heartbeat/.ocf-shellfuncs
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs /usr/lib/ocf/resource.d/heartbeat/ocf-shellfuncs
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs /usr/lib/ocf/resource.d/heartbeat/.ocf-binaries
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs /usr/lib/ocf/resource.d/heartbeat/ocf-binaries
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs /usr/lib/ocf/resource.d/heartbeat/.ocf-directories
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs /usr/lib/ocf/resource.d/heartbeat/ocf-directories
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs /usr/lib/ocf/resource.d/heartbeat/.ocf-returncodes
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs /usr/lib/ocf/resource.d/heartbeat/ocf-returncodes
打包到dst目录:
mkdir dst
make -i DESTDIR=$PWD/dst install
修改打包文件路径问题:
cd dst/usr/lib/ocf/lib/heartbeat/
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs .ocf-shellfuncs
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs ocf-shellfuncs
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs .ocf-binaries
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs ocf-binaries
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs .ocf-directories
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs ocf-directories
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs .ocf-returncodes
ln -s /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs ocf-returncodes
cd Heartbeat-3-0-STABLE-3.0.4
./bootstrap
./configure --help
重要: 需要添加用户及组启动服务
groupadd -g 60 haclient
useradd -u 17 -g haclient hacluster
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-group-id=60 --with-ccmuser-id=17
make && make -i install
打包到dst目录:
mkdir dst
make -i DESTDIR=$PWD/dst install
cd Pacemaker-1-0-db98485d06ed
./autogen.sh
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-heartbeat
make && make -i install
打包到dst目录:
mkdir dst
make -i DESTDIR=$PWD/dst install
drbd编译部分:
drbd编译分为两个部分,内核模块编译和用户工具编译。
首先编译内核模块:
cd cd drbd-8.4.0
./configure --with-km
编译报错:
提示drbd/drbd_receiver.c的drbd_do_auth中mdev没有定义,出错行如下:
#if !defined(CONFIG_CRYPTO_HMAC) && !defined(CONFIG_CRYPTO_HMAC_MODULE)
STATIC int drbd_do_auth(struct drbd_tconn *tconn)
{
dev_err(DEV, "This kernel was build without CONFIG_CRYPTO_HMAC.\n");
dev_err(DEV, "You need to disable 'cram-hmac-alg' in drbd.conf.\n");
return -1;
}
#else
#define CHALLENGE_LEN 64
代码中就只有调用了dev_err,内有宏定义DEV
估计就是DEV定义问题,查看了内核中相关头文件定义:
#define DEV mdev
看不出问题原因,只好将这两行调用全部注释了,好在仅是输出消息日志,估计并无大碍。
make && make install
如果成功模块将安装在:/lib/modules/2.6.32.41/updates/drbd.ko
modprobe -v drbd //如果没有出错消息,恭喜你安装OK
用户工具编译:
make clean
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-utils --with-pacemaker --with-heartbeat
make && make -i install
打包到dst目录:
mkdir dst
make -i DESTDIR=$PWD/dst install
节点ha2上重复是面安装步骤。也可以将打包目录中的安装文件tar出直接解压到节点上,节省编译时间。
至此安装部分完成,接下来是配置部分。 |
评分
-
查看全部评分
|