drbd+heartbeat+nfs高可用架构搭建

时间:2021-05-16 03:11:38

一、客户需求

 

1、需求描述

有些客户有自己的存储设备,但是并没有集群文件系统服务,所以如果我们多个节点(计算节点)如果想同时使用其中的一个块且要保证高可用的话,就需要我们自己来完成类似集群文件系统的服务组合,在此我们使用的服务组合是:iscsi共享+drbd+heartbeat+nfs。

2、服务说明

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。

二、环境准备

1、测试环境拓扑结构

drbd+heartbeat+nfs高可用架构搭建

【图】搭建环境拓扑结构图

 

 

2、服务分配

drbd+heartbeat+nfs高可用架构搭建

 

3环境描述

3.1、网络环境

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

 

3.2、系统环境

(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 �Cyntp

                           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

三、安装配置

1Iscsi共享部署

1.1、在iscsi服务端所需操作

 

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、在iscsi客户端上所需操作

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

2drbd部署

2.1、安装drbd

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�CUvhhttp://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

2.2、修改配置文件

(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;

                     }

}

2.3、创建资源

1)、NC1NC2上同时操作

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

2.4、完成drbd部署

(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

3heartbeat部署

3.1heartbeat安装

1)、更新安装源NC1NC2相同

rpm -Uvh http://mirrors.hust.edu.cn/epel//6/x86_64/epel-release-6-8.noarch.rpm

2)、yum 安装heartbeatNC1NC2相同

yum install -y heartbeat

3.2heartbeat配置

1)、NC1NC2 配置相同的文件

[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                   #NC2ip

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                   #NC1ip

node nc1                             #定义主

node nc2                             #定义从

auto_failback off                       #drbd恢复时不抢占

ping_group group1 192.168.0.11 192.168.0.12 #仲裁,防止闹裂,也可写成ping 网关ip

 

3.3、完成heartbeat部署

1)、保存配置重启生效

              [root@nc1~]# /etc/init.d/heartbeat restart

[root@nc1 ~]# chkconfig heartneat on

2)、查看结果,正确结果如下:

      NC1结果:


NC2结果:


3)、测试高可用

关闭NC1后,NC2 自动切换为drbd

       

 

关闭NC2后,NC1自动切换为drbd


 

4nfs服务端部署

4.1、安装nfs

    yum install  �Cy  nfs-utilsnfs4-acl-toolsnfs-utils-lib-develnfsometer

4.2、修改权限

echo "/mnt/drbd *(rw,no_root_squash)" >> /etc/exports

/etc/init.d/nfs restart

chkconfig nfs on

5、计算节点(iServer

在管理平台存储管理中添加虚拟IP NFS 共享出的目录,并在上建立虚拟机。

重启及关闭高可用的主节点,测试VIP和挂载目录可正常切换。虚拟机有几秒钟中断之后正常。

6、计算节点部署(KVM

6.1、安装kvm

       在安装系统时可直接勾选kvm服务

       


6.2、挂载nfs目录

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/

 

 

四、完成测试

1.1、新建vhost


1.2、检查drbd下的文件

NC1(挂有drbd目录的)上面查看是否存在test1的镜像文件


文件存在!

1.3、制造故障查看切换

此时将NC1关机查看切换状态


已切换!

1.3、检查vhost切换后的状态



 

经验证服务无明显中断,可继续访问。


本文出自 “xiaoxiao” 博客,请务必保留此出处http://524117song.blog.51cto.com/514117/1436478