Drbd+Heatbeat实现NFS共享文件存储高可用
一、Drbd与Heartbeat简介
1.1 Drbd简介:
Drbd是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立一个本地块设备的实时镜像。与心跳连接结合使用,也可以把它看作是一种网络RAID;简单的说使用drbd镜像技术实现后台两台服务器数据同步。
1.2 Drbd工作机制:
Drbd负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。目前,drbd每次只允许对一个节点进行读写访问,这对于通常的故障切换高可用性集群来讲已经足够用了。以后的版本将支持两个节点进行读写存取。
1.3 Drbd的三种协议:
A 数据一旦写入磁盘并发送到网络中就认为完成了写入操作
B 收到接收确认就认为完成了写入操作
C 收到写入确认就认为完成了写入操作
2.1 Heartbeat简介:
Heartbeat是Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务,keepalived主要控制IP飘移,配置应用简单,而且分层,layer3,4,5,各自配置极为简单,heartbeat不但可以控制IP飘移,更擅长对资源服务的控制,配置,应用比较复杂。
2.2 Heartbeat工作原理:
通过修改Heartbeat的配置文件,可以指定哪台Heartbeat服务器作为主服务器,则另一台服务器自动成为热备服务器,然后在热备服务器上配置Heartbeat守护程序来监听来自主服务器的心跳消息。如果热备服务器在指定的时间内未监听到来自主服务器的心跳,就会启动故障转移程序,并取得主服务器上的相关资源服务的所有权,接替主服务器继续不间断的提供服务,从而达到资源及服务高可用性的目的。以上描述是heartbeat主备的模式,heartbeat还支持主主模式,即两台服务器互为主备,这时它们之间会相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的心跳报文,那么,一方就会认为对方失效或者宕机了,这每个运行正常的主机就会启动自身的资源接管模块来接管运行在对方主机上的资源或者服务,继续为用户提供服务。一般情况下,可以较好的实现一台主机故障后,企业业务仍能不间断的持续运行。注意:所谓的业务不间断,在故障转移期间也是需要切换时间的<例如:停止数据库及存储服务等>heartbeat的主备高可用的切换时间一般是在5-20秒左右(服务器宕机的切换比人工切换要快)。另外,和keepalived高可用软件一样,heartbeat高可用是操作系统级别的,不是服务(软件)级别的,可以通过简单的脚本控制,实现服务级别的高可用。
二、架构图
三、Drbd环境搭建
1.hosts解析
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.20 drbd01
10.0.0.21 drbd02
2.同步时间
#time sync by oldboy at 2018-10-12
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null
3.安装drbd
3.1安装依赖环境,编译环境
yum install -y gcc make automake pkgconfig flex kernel-devel-$(uname -r) kernel-headers
3.2编译安装drbd内核驱动
curl -O https://www.linbit.com/downloads/drbd/8.4/drbd-8.4.11-1.tar.gz
tar xvf drbd-8.4.11-1.tar.gz -C /usr/local/src
cd /usr/local/src/drbd-8.4.11-1
make && make install
3.3 加载模块,验证
modprobe drbd
lsmod |grep -i drbd
加载成功!添加开机自加载
echo "modprobe drbd" >> /etc/rc.local
3.4添加附加库
rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
3.5安装Drbd
yum -y install drbd84-utils kmod-drbd84
4.两台服务器上的分区/dev/sdb1作为drbd的网络mirror分区
5.开始配置NFS
yum -y install nfs-utils
创建共享目录
mkdir -p /backup
echo "/backup *(rw,no_root_squash,no_all_squash,sync)" >/etc/exports
NFS开机设置
/etc/init.d/rpcbind start
chkconfig rpcbind on
chkconfig nfs off
注意:NFS不需要启动,也不需要设置成开机启动,这些都将由后面的Heartbeat来完成。
7.开始配置Drbd
配置drbd配置文件(两个节点)
vim /etc/drbd.d/global_common.conf global {
usage-count yes; #是否参加DRBD使用者统计
}
common {
protocol C; #使用drbd的第三种同步协议
disk {
on-io-error detach;
}
syncer {
rate 100M; #100M传输速度
}
}
resource nfs {
on drdb01 { #主机名称
device /dev/drbd1; #drbd网络磁盘
disk /dev/sdb1; #本地需要挂载的磁盘
address 10.0.0.20:7899; #主ip地址加drbd端口
meta-disk internal;
}
on drdb02 {
device /dev/drbd1;
disk /dev/sdb1;
address 10.0.0.21:7899;
meta-disk internal;
}
}
简化配置文件
global {
usage-count yes; #是否参加DRBD使用者统计
}
common {
protocol C; #使用drbd的第三种同步协议
disk {
on-io-error detach;
}
syncer {
rate 100M; #100M传输速度
}
}
resource nfs {
device /dev/drbd1; #drbd网络磁盘
disk /dev/sdb1; #本地需要挂载的磁盘
meta-disk internal;
on drdb01 { address 10.0.0.20:7899; }
on drdb02 { address 10.0.0.21:7899; }
}
8.启动Drbd
激活前面配置的Drbd资源nfs
drbdadm create-md nfs
启动drbd
/etc/init.d/drbd start
加入开机自启
chkconfig drbd on
查看运行状态,两台设备都处于Secondary/Secondary状态.
cat /proc/drbd
初始化主机(这几步只在主节点上操作)
drbdadm primary all #这台设备成为所有资源的主。
如果命令失败,执行下一条
drbdadm -- --overwrite-data-of-peer primary all #把此节点设置为主节点,且从头开始同步数据
查看格式化进度
watch -n1 'cat /proc/drbd'
说明:
cs:两台数据连接状态
ro:两台主机的状态
ds:磁盘状态是“UpToDate/UpToDate”,同步状态。
9.Drbd的使用
mkfs.ext4 /dev/drbd1 #在主上执行
mount /dev/drbd1 /backup #挂载在backup文件上
注意:secondary节点上不允许对DRBD设备进行任何操作,包括只读。所有的读写操作只能在主节点上进行,只有当主节点挂掉时,secondary节点才能提升为主节点,继续进行读写操作。
四、Heatbeat环境搭建
1.hearbeat依赖epl源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
2.主从安装hearbeat
yum -y install heartbeat
3.修改配置
cd /usr/share/doc/heartbeat-3.0.4/
cp authkeys ha.cf haresources /etc/ha.d/
cd /etc/ha.d
修改authkeys
一共有三种认证方式供选择,第一种是CRC循环冗余校验,第二种是SHA1哈希算法,第三种是MD3哈希算法,其中他们的密码可以任意设置,但是两边密码必须保持一致。
授权authkeys
chmod 600 authkeys
修改haresources文件,在最后一行加入VIP
echo "drdb01 IPaddr::10.0.0.25/32/eth0 drbddisk::nfs Filesystem::/dev/drbd1::/backup::ext4 nfs" >>haresources
drdb01 IPaddr::10.0.0.25/32/eth0 #主机名 后跟虚拟IP地址、接口
drbddisk::nfs #管理drbd资源的名称
Filesystem::/dev/drbd1::/backup::ext4 nfs #文件系统::挂载的目录及格式::后跟nfs资源脚本
4.修改ha.cf文件
debugfile /var/log/ha-debug #设定debug文件目录
logfile /var/log/ha-log #设定日志文件目录
logfacility local0 #利用系统日志打印日志
keepalive 2 #设定检查时间间隔为1s
deadtime 30 #设定在10s内没有心跳信号,则立即切换服务
warntime 10 #设定告警时间为5s(5s内没有收到对方的回应就报警)
initdead 120 #设定初始化时间为60s
udpport 694 #设定集群节点间的通信协议及端口为udp694监听端口(该端口可以修改)
ucast eth0 10.0.0.21 #设定心跳方式使用单播方式,并且是在eth0接口上进行单播,ip地址为对方的IP(网卡名称要一致性的IP)从机要改成主机的IP
auto_failback off #当主节点恢复后,是否自动切回,一般都设为off
node drdb01 #指定两个节点
node drdb02
ping 10.0.0.254 #两个IP的网关
respawn hacluster /usr/lib64/heartbeat/ipfail #使用这个脚本去侦听对方是否还活着(使用的是ICMP报文检测)
5.启动Heartbeat(先主后从)
/etc/init.d/heartbeat start
chkconfig heartbeat on
netstat -tunlp|grep hear
主库上查看
查看VIP ip a|grep eth0
查看磁盘 df -h
从库上查看
查看VIP,没看到VIP是对的,只有主宕了才会切。
查看磁盘,没有挂载盘是对的,主宕了才会挂载过来。
6.测试目录是否能够共享
实验挂载盘的服务器:10.0.0.25,进入对应的要挂载的目录下创建同名的目录
挂载到VIP上
showmount -e 10.0.0.25 #showmount -e 挂载的VIP地址
将共享文件的目录挂载到10.0.0.25的/backup上
mount -t nfs 10.0.0.25:/backup /backup
挂在完成,实现共享存储。
7.测试高可用
1.进到主服务器上,把服务关了看看。
查看VIP是否释放 ip a|grep eth0 可以看到Vip已经释放
查看drbd资源是否释放df -h 可以看到资源已经释放。
查看资源状态变cat /proc/drbd 查看资源状态变为从
2.进到从服务器查看状态
VIP是否漂移过来ip a|grep eth0 已看到VIP飘移成功
查看drbd资源df -h Drbd资源切换成功,并挂载
查看资源状态变cat /proc/drbd 查看资源状态变为主
主从切换完成,到此Drbd+Heartbeat实现Nfs的高可用至此结束!
Drbd+Heatbeat实现NFS共享文件存储高可用的更多相关文章
- Nfs+Drdb+Heartbeat 数据存储高可用服务架构方案
一.方案的应用场景 适用于2千万-3千万PV架构的网站,Nfs数据存储高可用服务方案 备注:互联网排名前30左右公司常用的架构 二.生产环境方案部署原理图 三.生产环境服务器硬件配置: 生产环境中采用 ...
- 014.Docker Harbor+Keepalived+LVS+共享存储高可用架构
一 多Harbor高可用介绍 共享后端存储是一种比较标准的方案,将多个Harbor实例共享同一个后端存储,任何一个实例持久化到存储的镜像,都可被其他实例中读取.通过前置LB组件,如Keepalived ...
- heatbeat-gui实现基于nfs的mysql高可用集群
一.简述HA高可用集群 高可用集群就是当集群中的一个节点发生各种软硬件及人为故障时,集群中的其他节点能够自动接管故障节点的资源并向外提供服务.以实现减少业务中断时间,为用户提供更可靠,更高效的服务. ...
- Centos 7 下 Corosync + Pacemaker + DRBD + psc + crmsh 实现 mysql 服务高可用
一.介绍 高可用,大家可能会想到比较简单的Keepalived,或者更早一点的 heartbeat,也可能会用到 Corosync+Pacemaker,那么他们之间有什么区别. Heartbeat到了 ...
- 基于corosync+pacemaker+drbd+LNMP做web服务器的高可用集群
实验系统:CentOS 6.6_x86_64 实验前提: 1)提前准备好编译环境,防火墙和selinux都关闭: 2)本配置共有两个测试节点,分别coro1和coro2,对应的IP地址分别为192.1 ...
- NFS+sersync+Keepalived高可用方案
标签(linux): nfs+keepalived 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 这套解决方法案的优点是配置比较简单.容易上手,缺点是当主NFS ...
- 配置NFS作为HDFS高可用的共享存储系统
所有命令或步骤: 首先,在各个节点上安装nfs服务 yum install -y nfs service rpcbind start service nfs start 配置开机自启动服务 chkco ...
- NFS-heartbeat-drbd模拟NFS高可用
NFS介绍: NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS ...
- Azure 配置高可用的准备系列工作-建立不同区域的存储账户和建立网络!
我们谈到我们的业务,常常谈到一个词.三层架构,就是我们的UI层.数据訪问层和数据存储层的分离,通常情况下我们的业务高可用必须满足这三层的所有高可用的情况下才干达到最高级别的高可用. 那么谈到Az ...
随机推荐
- 4412 SPI驱动
1.Linux主机驱动和外设驱动分离思想(I2C驱动里有) SPI驱动总线架构:SPI核心层(x),SPI控制器驱动层(x),SPI设备驱动层(√).前面两个设备驱动搞明白了可以去看 2.教程中介绍: ...
- fedora23下编译安装OpenCV-3.1.0
所需安装环境 1.安装编译环境 $ sudo dnf install gcc gcc-c++ ncurses-devel cmake 2.安装gtk+2.x $ sudo dnf install gt ...
- BUUCTF平台:RSA
RSA import gmpy2 def Decrypt(c,e,p,q): L=(p-1)*(q-1) d=gmpy2.invert(e,L) n=p*q m=gmpy2.powmod(c,d,n) ...
- vector代替数组
vector代替数组 1.声明一个int向量以替代一维的数组:vector <int> a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除). 2.用vector ...
- error C2065: ‘__in’ : undeclared identifier
转自VC错误:http://www.vcerror.com/?p=1307 问题描述: 编译时出现: error C2065: '__in' : undeclared identifier error ...
- Windows盘符切换,Dos命令
>>.常用Dos命令 dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录 copy 拷贝文件 diskcopy 复制磁盘 del 删除文件 format 格式化 ...
- CentOS7版本中locate: 未找到命令,详细解决方案
在学习Linux(CentOS7)文件搜索命令:locate 时,遇到错误“locate: 未找到命令”. 原因:CentOS7默认没有安装该命令 解决方案: 1.安装"locate&quo ...
- for,while,do while语句区别以及常见死循环格式
1.三种循环语句的区别: do...while循环至少执行一次循环体. 而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句. for循环和while循环的区别: 如果你想在循环 ...
- python系列——文件操作
打开和关闭 示例:python系列——文件操作的代码 打开模式 读取 写入
- .Net Core应用RabbitMQ,及简单封装
首先,还是万分感谢大家能够抽空来阅读我的文章,万分感谢.今天我带来的是.Net Core中应用RabbitMQ,和简单封装.因为昨天的文章里说了今天要写,所以今天一定要写出来.小编翻阅了很多资料,想要 ...