有些客户有自己的存储设备,但是并没有集群文件系统服务,所以如果我们多个节点(计算节点)如果想同时使用其中的一个块且要保证高可用的话,就需要我们自己来完成类似集群文件系统的服务组合,在此我们使用的服务组合是:iscsi共享+drbd+heartbeat+nfs。
Iscsi共享:这里通过iscsi共享服务将存储设备上的存储块共享出去,提供节点(NC1+NC2)使用,此处我们将在iscsi服务短创建两个镜像充当块设备。
Drbd :服务器之间镜像块设备内容的存储复制解决方案。数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回),此处在NC1、NC2上面部署,NC1为主NC2为备份,实时同步后数据相同。
Heartbeat:实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能,此处用于drbd服务,确保nfs能一直挂载iscsi提供给drbd的块设备。
Nfs :网络文件系统,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,此处在NC1和NC2上面分别部署,主要是提供计算节点对iscsi的块设备挂载目录。
计算节点:现实场景中应该是我们云平台的计算节点,但由于是测试环境,所以在虚拟机上面搭建了一台KVM充当计算节点,我们会将vhost存放在我们共享出来的iscsi存储上面,使用的挂载方式是nfs。
【图】搭建环境拓扑结构图
Iscsi节点网络环境:红色参数为自定义参数,其他参数无需修改。
[root@iscsi~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT=yes
HWADDR=00:0C:29:14:5D:03
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.0.10
PREFIX=24
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="Systemeth0"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
NC1网络环境单网卡:红色参数为自定义参数,其他参数无需修改。
[root@nc1~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT=yes
HWADDR=00:0C:29:83:71:98
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.0.11
PREFIX=24
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="Systemeth0"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
NC2网络环境单网卡:红色参数为自定义参数,其他参数无需修改。
[root@nc2~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT=yes
HWADDR=00:0C:29:45:5F:66
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.0.12
PREFIX=24
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="Systemeth0"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
计算节点网络环境:红色参数为自定义参数,其他参数无需修改。
[root@kvm~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.0.15
PREFIX=24
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="Systemeth0"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
HWADDR=00:0C:29:18:8C:CB
(1)、关闭ssh的DNS反向解析,加快ssh连接速度。
sed-ri ‘s/^#UseDNS yes/UseDNS no/‘/etc/ssh/sshd_config&&/etc/init.d/sshd restart
(2)、关闭防火墙和selinux
/etc/init.d/iptables stop&&chkconfigiptables off&&setenforce 0
sed -ri‘s/^SELINUX=enforcing/SELINUX=disabled/‘ /etc/selinux/config
(3)、配置ntp,确保服务器之间的时间一致性。
每服务器执行命令:yum install -yntpdate
我们选择计算节点为ntp服务器,因为内网服务器不一定允许上网,但是计算节点可能允许,我们可以以它为ntp服务端,其他为客户端。
服务端需执行命令:yum install –yntp
sed -ri ‘s/restrict -6 ::1/restrict 192.168.0.0mask 255.255.255.0/‘ /etc/ntp.conf && /etc/init.d/ntpd restart && chkconfig ntpd on
每客户端执行命令:echo"0 * * * * root /usr/sbin/ntpdate 192.168.0.15">>/etc/crontab&&/etc/init.d/crond restart
(1)、生成共享块设备
[root@iscsi ~]#ddif=/dev/zero of=/root/iscsi01.imgbs=1M count=8000 用于drbd主(NC1)
[root@iscsi~]#dd if=/dev/zero of=/root/iscsi02.imgbs=1M count=8000 用于drbd从(NC2)
(2)、添加hosts记录到/etc/hosts文件
192.168.0.10 iscsi
192.168.0.11 nc1
192.168.0.12 nc2
(3)、安装target服务
[root@iscsi ~]#yum installscsi-target-utils
(4)、iscsi服务端配置文件/etc/tgt/targets.conf最下面添加两个新条目:
<targetiqn.2014-05.inas.example:server.target1> #定义名称
backing-store/root/iscsi01.img #选择共享的块设备
initiator-address192.168.0.11 #允许访问的主机ip 此处为NC1
write-cache off
</target>
<targetiqn.2014-05.inas.example:server.target2>#定义名称
backing-store/root/iscsi02.img#选择共享的块设备
initiator-address192.168.0.12#允许访问的主机ip 此处为NC2
write-cache off
</target>
(5)、重启tgtd服务,并把它加入开机启动项。
[root@iscsi~]# /etc/init.d/tgtd restart
[root@iscsi~]# chkconfig tgtd on
1.2.1、在NC1、NC2上面的操作
(1)、添加hosts记录到/etc/hosts文件
192.168.0.10 iscsi
192.168.0.11nc1
192.168.0.12nc2
(2)、首次连接tgtd服务端需要登录操作
NC1执行:iscsiadm-m node -T iqn.2014-05.inas.example:server.target1 --login
NC2执行:iscsiadm-m node -T iqn.2014-05.inas.example:server.target2 --login
“iqn.2014-05.inas.example:server.target1”此名称为tgtd配置文件设置的名称。
(3)、NC1、NC2同时安装tgtd客户端。
yum install iscsi-initiator-utils
iscsiadm-m discovery -t sendtargets -p 192.168.0.10 #测试是否能发现服务器允许的共享设备,如果没有结果,请查看服务端的配置是否允许此主机发现。
NC1的结果应为:
[root@nc1~]# iscsiadm -m discovery -t sendtargets -p 192.168.0.10
192.168.0.10:3260,1iqn.2014-05.inas.example:server.target1
NC2的结果应为:
[root@nc2~]# iscsiadm -m discovery -t sendtargets -p 192.168.0.10
192.168.0.10:3260,1iqn.2014-05.inas.example:server.target2
(1)、安装drbd
rpm-Uvh http://elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
rpm-ql elrepo-release-6-5.el6.elrepo.noarch
yum--enablerepo=elrepo install drbd84-utils kmod-drbd84
rpm–Uvhhttp://mirrors.hust.edu.cn/epel//6/x86_64/epel-release-6-8.noarch.rpm
(2)、重启使用新内核
[root@nc1 ~]# init 6
[root@nc2 ~]# init 6
需要重启NC1和NC2,确保使用的是更新后的内核。
更新前的内核
[root@NC2 ~]# uname -r
2.6.32-220.el6.x86_64
更新后的内核
[root@nc2 ~]# uname -r
2.6.32-431.17.1.el6.x86_64
(1)、全局配置文件/etc/drbd.d/global_common.confNC1、NC2配置需相同,配置内容如下:
[root@nc1~]# grep -v "#" /etc/drbd.d/global_common.conf
global{
usage-count no;
}
common{
protocol C;
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 {
wfc-timeout 100;
degr-wfc-timeout 120;
}
options {
}
disk {
on-io-error detach;
fencing resource-only;
}
net {
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
cram-hmac-alg "sha1";
shared-secret "mydrbdlab";
}
}
(2)、Res配置文件:/etc/drbd.d/nfstest.resNC1和NC2配置相同
[root@nc1 drbd.d]# catnfstest.res
resource nfstest {
net{
cram-hmac-alg "sha1";
shared-secret"mydrbdlab";
}
on nc1 {
device /dev/drbd1;
disk /dev/sdb;
address 192.168.0.11:7789;
meta-disk internal;
}
on nc2 {
device /dev/drbd1;
disk /dev/sdb;
address 192.168.0.12:7789;
meta-disk internal;
}
}
(1)、NC1和NC2上同时操作
drbdadmcreate-md nfstest #建立 drbdresource
drbdadmup nfstest
[root@nc1~]# /etc/init.d/drbd restart
[root@nc1~]# chkconfig drbd on
####指定主节点(我们选NC1)
drbdadm-- --overwrite-data-of-peer primary nfstest
(2)、等待同步完成后格式化分区
----当结果为如下时,表明主从数据已经同步完成。
[root@nc1drbd.d]# cat /proc/drbd
version:8.4.4 (api:1/proto:86-101)
GIT-hash:599f286440bd633d15d5ff985204aff4bccffadd build by phil@Build64R6, 2013-10-1415:33:06
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate Cr-----
ns:1144 nr:4 dw:1148 dr:1041al:12 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
----格式化操作只能在主DRBD上面运行,此处为NC1
(1)、查看设备是否挂载
[root@nc1 drbd.d]# fdisk -l
Disk/dev/sda: 10.7 GB, 10737418240 bytes
255heads, 63 sectors/track, 1305 cylinders
Units= cylinders of 16065 * 512 = 8225280 bytes
Sectorsize (logical/physical): 512 bytes / 512 bytes
I/Osize (minimum/optimal): 512 bytes / 512 bytes
Diskidentifier: 0x00002f56
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition1 does not end on cylinder boundary.
/dev/sda2 26 157 1048576 82 Linux swap / Solaris
Partition2 does not end on cylinder boundary.
/dev/sda3 157 1306 9231360 83 Linux
Disk /dev/sdb:8388 MB, 8388608000 bytes #可看出此设备是我们的挂载节点
64heads, 32 sectors/track, 8000 cylinders
Units= cylinders of 2048 * 512 = 1048576 bytes
Sectorsize (logical/physical): 512 bytes / 512 bytes
I/Osize (minimum/optimal): 512 bytes / 512 bytes
Diskidentifier: 0x00000000
(2)、格式化已挂载/dev/drbd1 只在master上面执行。
mkfs.ext4 /dev/drbd1
(1)、更新安装源NC1、NC2相同
rpm -Uvh http://mirrors.hust.edu.cn/epel//6/x86_64/epel-release-6-8.noarch.rpm
(2)、yum 安装heartbeatNC1、NC2相同
yum install -y heartbeat
(1)、NC1和NC2 配置相同的文件
[root@nc2 ha.d]#cat /etc/ha.d/haresources
nc1IPaddr::192.168.0.6/24/eth0 drbddisk::nfstest Filesystem::/dev/drbd1::/mnt/drbd::ext4killnfsd
[root@nc2 ha.d]#cat /etc/ha.d/authkeys
auth 1
1 crc
[root@nc2 ha.d]#cat /etc/ha.d/resource.d/killnfsd
killall -9 nfsd;/etc/init.d/nfs restart; exit 0; drbdadm -- --overwrite-data-of-peer primarynfstest
(2)、NC1上面的主配置文件/etc/ha.d/ha.cf
[root@nc1 ~]#cat /etc/ha.d/ha.cf
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 10
warntime 6
initdead 120
udpport 694
ucast eth0 192.168.0.12 #NC2的ip
node nc1 #定义主
node nc2 #定义从
auto_failback off #主drbd恢复时不抢占
ping_group group1 192.168.0.11 192.168.0.12#仲裁,防止闹裂
(3)、NC2上面的主配置文件/etc/ha.d/ha.cf
[root@nc2 ~]#cat /etc/ha.d/ha.cf
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 10
warntime 6
initdead 120
udpport 694
ucast eth0 192.168.0.11 #NC1的ip
node nc1 #定义主
node nc2 #定义从
auto_failback off #主drbd恢复时不抢占
ping_group group1 192.168.0.11 192.168.0.12 #仲裁,防止闹裂,也可写成ping 网关ip
(1)、保存配置重启生效
[root@nc1~]# /etc/init.d/heartbeat restart
[root@nc1 ~]# chkconfig heartneat on
(2)、查看结果,正确结果如下:
NC1结果:
NC2结果:
(3)、测试高可用
关闭NC1后,NC2 自动切换为drbd主
关闭NC2后,NC1自动切换为drbd主
yum install –y nfs-utilsnfs4-acl-toolsnfs-utils-lib-develnfsometer
echo "/mnt/drbd *(rw,no_root_squash)" >> /etc/exports
/etc/init.d/nfs restart
chkconfig nfs on
在管理平台存储管理中添加虚拟IP NFS 共享出的目录,并在上建立虚拟机。
重启及关闭高可用的主节点,测试VIP和挂载目录可正常切换。虚拟机有几秒钟中断之后正常。
在安装系统时可直接勾选kvm服务
echo "192.168.0.6:/mnt/drbd /var/lib/libvirt/images/ nfs defaults 00" >> /etc/fstab
mount -t nfs 192.168.0.6:/mnt/drbd/var/lib/libvirt/images/
在NC1(挂有drbd目录的)上面查看是否存在test1的镜像文件
文件存在!
1.3、制造故障查看切换
此时将NC1关机查看切换状态
已切换!
1.3、检查vhost切换后的状态
经验证服务无明显中断,可继续访问。
本文出自 “xiaoxiao” 博客,请务必保留此出处http://524117song.blog.51cto.com/514117/1436478
drbd+heartbeat+nfs高可用架构搭建,布布扣,bubuko.com
原文地址:http://524117song.blog.51cto.com/514117/1436478