当前位置: 代码迷 >> 综合 >> HEARTBEAT+DRBD+NFS 高可用共享搭建
  详细解决方案

HEARTBEAT+DRBD+NFS 高可用共享搭建

热度:6   发布时间:2024-01-21 06:32:09.0
0x00 编译安装DRBD及配置
#yum install gcc gcc-c++ make glibc flex kernel-devel kernel-headers libxslt git
#wget http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz
#tar zxvf drbd-8.4.4.tar.gz
#cd drbd-8.4.4
#./configure --prefix=/usr/local/drbd --with-km(配置drbd路径)
#make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64(修改为自己的内核 可以用uname -a 查看)
#make install
0x00.1配置开机启动
# mkdir -p /usr/local/drbd/var/run/drbd(创建drbd目录)
# cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d(拷贝启动脚本)
#chkconfig --add drbd
#chkconfig drbd on
0x00.2测试系统加载DRBD模块
#modprobe drbd
# lsmod | grep drbd (会出现drbd和libcrc32c 2个进程)
0x00.3配置DRBD相关配置文件
# vi /usr/local/drbd/etc/drbd.d/drbd.res
resource drbd {
on master { #第个主机说明以on开头,后面是主机名称(我的机器名是node1)
device /dev/drbd0;#DRBD设备名称
disk /dev/sdb1;同步的磁盘(可以用fdisk -l 查看)
address 192.168.1.240:7789; #设置DRBD监听地址与端口
meta-disk internal;
}
on slave {#第二个节点的主机名
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.241:7789;
meta-disk internal;
}
}
# vi /usr/local/drbd/etc/drbd.d/global_common.conf
global {
usage-count yes;
}
common {
net {
protocol C;
}
}
0x00.4 创建DRBD磁盘,同步两个节点的分区(2个节点都操作)
# mknod /dev/drbd0 b 147 0 (device /dev/drbd0;#DRBD设备名称)
#dd if=/dev/zero of=/dev/hdb1 bs=1M count=100 //把一些资料塞到 hdb 內 (否则 create-md 时有可能会出现错误)
#drbdadm create-md drbd //建立 drbd resource
#drbdadm up drbd //启动 resource drbd
#cat /proc/drbd 查看drbd的状态
#drbdadm primary --force drbd 设为主(第二个节点slave上设为辅 命令是 drbdadm secondary drbd)


-----------------------------------
0x00.5创建DRBD文件系统
以下操作仅在master上执行。
上面已经完成了/dev/drbd0的初始化,现在来把/dev/drbd0格式化成ext3格式的文件系统。
#mkfs.ext3 /dev/drbd0
然后将/dev/drbd0挂载到之前创建的/data/wwwnfs目录。
#mount /dev/drbd0 /data/wwwnfs
现在你只要把数据写入/data/wwwnfs目录,drbd即会立刻把数据同步到备机192.168.1.241的/dev/hdb1分区上 实际上slave的硬盘相当于不挂载,就给master当备份盘一样,只有停止drbd然后挂载以后才能查看里面的文件
0x00.6 升降级DRBD
#drbdadm primary drbd
#drbdadm secondary drbd
0x00.7脑裂故障处理(0:drbd:WFConnection)
master节点进行如下操作
# drbdadm disconnect drbd #断开连接drbd块设备
# drbdadm secondary drbd 设置为secondary
# drbdadm connect --discard-my-data drbd #该命令告诉drbd,secondary上的数据不正确,以primary上的数据为准
另一节点上重新建立连接资源
#drbdadm primary drbd
#mount /dev/drbd0 /data/wwwnfs
# drbdadm connect drbd
查看状态[root@master ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@master, 2014-12-23 12:12:21
m:res cs ro ds p mounted fstype
0:drbd Connected Primary/Secondary UpToDate/UpToDate C
[root@slave ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@slave, 2014-12-23 11:55:38
m:res cs ro ds p mounted fstype
0:drbd Connected Secondary/Primary UpToDate/UpToDate C
0x01 NFS 配置
0x01.1两台服务器都修改 nfs 配置文件如下:
# vi /etc/exports
/data/wwwnfs *(rw,sync,insecure,no_root_squash,no_wdelay)
0x01.2启动nfs服务
#service rpcbind start
#service nfs start rpcbind服务器必须常驻,且不收heartbeat管理;而nfs这必须要用heartbeat来管理他的启动和关闭,所以这里要关闭nfs开机自动启动
#chkconfig nfs off
#chkconfig rpcbind on
0x01.3 两台服务器都修改 nfs 启动脚本。将/etc/init.d/nfs 脚本中的 stop 部分中的 killproc nfsd -2 修改为 -9
0x01.4 开机自动挂载
#echo "sleep 20" >>/etc/rc.local
#echo "/bin/mount -t nfs 192.168.1.243:/data/wwwnfs /data/www" >>/etc/rc.local
其中192.168.1.243 是虚拟ip
0x01.5 同步服务器时间
#ntpdate -d cn.pool.ntp.org
# /usr/sbin/ntpdate 210.72.145.44;/usr/sbin/hwclock
0x02 安装和配置heartbeat
#yum 安装heartbeat (出现No package heartbeat available)
#wget http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
#rpm -ivh epel-release-6-8.noarch.rpm
# yum install heartbeat
#cd /usr/share/doc/heartbeat-3.0.4/
0x02.1 修改配置文件
需要修改 4 个文档:
/etc/ha.d/ha.cf
/etc/ha.d/haresources
/etc/ha.d/authkeys
/etc/ha.d/resource.d/killnfsd (手动编写)
#cp authkeys ha.cf haresources /etc/ha.d/ #拷贝这三个文件
0x02.2 配置/etc/ha.d/ha.cf
debugfile /var/log/ha-debug #打开错误日志报告
keepalive 2 #两秒检测一次心跳线连接
deadtime 10 #10秒测试不到主服务器心跳线为有问题出现
warntime 6 #警告时间(最好在 2 ~ 10 之间)
initdead 120 #初始化启动时 120 秒无连接视为正常
logfacility local0
udpport 694 #用 udp 的 694 端口连接
ucast eth0 192.168.1.241 #单播方式连接(主从都写对方的 ip 进行连接)
node master #声明主服(注意是主机名uname -n)
node slave #声明备服(注意是主机名uname -n)
auto_failback off #自动切换(主服恢复后可自动切换回来)这个不要开启
respawn hacluster /usr/lib64/heartbeat/ipfail #监控ipfail进程是否挂掉,如果挂掉就重启它
0x02.3 /etc/ha.d/authkeys
auth 1
1 crc
0x02.4 /etc/ha.d/haresources
master IPaddr::192.168.1.243/24/eth1 drbddisk::drbd Filesystem::/dev/drbd0::/data/wwwnfs::ext3 killnfsd
0x02.5 创建nfs管理脚本
# vi /etc/ha.d/resource.d/killnfsd
killall -9 nfsd; /etc/init.d/nfs restart;exit 0
0x02.6 创建drbddisk脚本(默认yum安装heartbeat时是不创建此脚本的这个问题坑死爹了!)点我下载此脚本
重命名为drbddisk
0x02.7设置文档权限
# chmod 600 /etc/ha.d/authkeys
# chmod 755 /etc/ha.d/resource.d/killnfsd
# chmod 755 /etc/ha.d/resource.d/drbddisk
# chkconfig heartbeat on
先启动master的heartbeat,再启动slave的heartbeat
service heartbeat start
测试脚本
# vi /mnt/test.sh
#!/bin/bash
while true
do
echo ---\> trying touch x : `date` touch x
echo \<----- done touch x : `date` echo
sleep 2
done
0x03 测试
0x03.1 在测试机上将 192.168.1.243:/data/wwwnfs 挂到本地/data/www
# mount 192.168.1.243:/data/wwwnfs /data/www
0x03.2在测试机上创建测试 shell,二秒一个
# vi /data/www/test.sh
#!/bin/bash
while true
do
echo ---\> trying touch x : `date` touch x
echo \<----- done touch x : `date` echo
sleep 2
done
0x03.3将主节点 master 的 heartbeat 服务停止,则备节点 slave 接管服务
# /etc/init.d/heartbeat stop