设为首页 收藏本站
查看: 1024|回复: 0

[经验分享] drbd+heartbeat+nfs高可用架构搭建

[复制链接]

尚未签到

发表于 2019-1-7 12:13:34 | 显示全部楼层 |阅读模式
一、客户需求

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、测试环境拓扑结构

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


2、服务分配


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 –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
三、安装配置
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最下面添加两个新条目

  #定义名称
backing-store/root/iscsi01.img      #选择共享的块设备
initiator-address192.168.0.11       #允许访问的主机ip 此处为NC1
write-cache off


#定义名称
backing-store/root/iscsi02.img#选择共享的块设备
initiator-address192.168.0.12#允许访问的主机ip 此处为NC2
write-cache off


(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–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
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)、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
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
3、heartbeat部署
3.1heartbeat安装
(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
3.2heartbeat配置
  (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
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  –y  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切换后的状态
  

  

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





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-660339-1-1.html 上篇帖子: heartbeat双机热备配置(适用centos6\rhel6) 下篇帖子: drbd整合heartbeat实现自动选主及自动挂载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表