DRBD+Heartbeat+NFS配置高可用性网络
一.DRBD简介
分布式复制块设备(DRBD技术)是一种基于软件的,无共享,复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像。
DRBD镜像数据具有实时性,透明性与同步镜像和异步镜像等特点
DRBD的两种模式,单主模式与双主模式
1.单主模式是不论任何资源在任何特定的时间,集群之中只存在一个主节点,并且只能在主模式下操作数据,这个模式可以在任何文件系统中使用。
2.双主模式是在DRBD8.0之后才加入的新特性,它是在集群中有两个主节点,这种模式需要一个集群文件系统,利用分布工的锁机制进行管理,如:GFS和OCFS2
DRBD提供了三种复制方式,我们先看下DRBD在LINUX的I/0堆栈中的位置
1.协议A:本地磁盘写入成功,数据包已在发送队列中,就被认为是完成操作,通俗点讲就是在主节点写入已经成功后,但是数据包还在发送队列中,并没有到达备用节点,就被主节点认为是完成了全部的读写操作,显然可能在备用节点如果发生故障时,并没有收到数据包,主节点也认为数据已经发送成功,显然不合理,这种主要用在地理上分开的节点!
简言之:数据一旦写入磁盘并发送到网络中就认为完成了写入操作
2.协议B:本地磁盘已写入完成且复制数据包达到了对等节点,则被认为是完成操作。但是如果在节点往磁盘写数据时时候,发生故障的话,数据还是不能在对等节点上写入磁盘成功。
简言之:收到接收确认就认为完成了写入操作
3.协议C:在本地和远程节点的磁盘都已经确认了写入操作完成才被认为操作完成。这是群集节点的流行模式,但I/0吞吐量依赖于网络带宽。
简言之:收到一定程度确认才认为完成写入操作
二.实例
1.拓扑图
2.实验要求
本实验使用Heartbeat,NFS与DRBD技术来实现两个节点之间的数据的同步,并且通过Heardbeat实现故障转移,保证服务的不间断!
3.IP地址配置
按照拓扑图的规划,对IP地址进行配置
4.DRBD配置
节点一:drbd1.a.com
1> 修改主机名
[root@localhost ~]# vim /etc/sysconfig/network 主机名修改如下
HOSTNAME=drbd1.a.com
[root@localhost ~]# hostname drbd1.a.com 不用注销,重新登录即可修改
2> 同步系统时间RTC
[root@drbd1 ~]# hwclock -s
3> 配置服务器可相互解析
[root@drbd1 ~]# vim /etc/hosts 添加如下内容
192.168.2.10 drbd1.a.com
192.168.2.20 drbd2.a.com
4> 安装DRBD软件
[root@drbd1 ~]# rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm //主文件安装
[root@drbd1 ~]# rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm //内核文件安装
5> 加载内核
[root@drbd1 ~]# modprobe drbd
6> 配置主文件
[root@drbd1 ~]# vim /etc/drbd.conf 在末行模式下输入如下命令
将得到如下内容
7> 创建一个共享空间
8> 配置全局文件
[root@drbd1 ~]# cd /etc/drbd.d
[root@drbd1 drbd.d]# cp global_common.conf global_common.conf.bak //备份文件
[root@drbd1 drbd.d]# vim global_common.conf 修改如下
global {
usage-count no; //取消DRBD使用者统计
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C; //使用协议C
startup {
wfc-timeout 120; //启动延迟
degr-wfc-timeout 120;
}
disk { //fence防脑裂
on-io-error detach;
fencing resource-only;
}
net {
cram-hmac-alg "sha1"; //主备节点使用的通信算法
shared-secret "mydrbdlab";
}
syncer {
rate 100M; //主备节点同步速率
}
}
9> 定义资源
[root@drbd1 ~]# vim web.res
节点二:drbd2.a.com配置
1> 修改主机名
[root@localhost ~]# vim /etc/sysconfig/network 主机名修改如下
HOSTNAME=drbd2.a.com
[root@localhost ~]# hostname drbd2.a.com 不用注销,重新登录即可修改
2> 同步系统时间RTC
[root@drbd12~]# hwclock -s
3> 配置服务器可相互解析
[root@drbd1 ~]# vim /etc/hosts 添加如下内容
192.168.2.10 drbd1.a.com
192.168.2.20 drbd2.a.com
4> 安装DRBD软件
[root@drbd2 ~]# rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm //主文件安装
[root@drbd2 ~]# rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm //内核文件安装
5> 加载内核
[root@drbd2 ~]# modprobe drbd
6> 配置主文件
[root@drbd2 ~]# vim /etc/drbd.conf 在末行模式下输入如下命令
将得到如下内容
7> 创建一个共享空间
8> 配置全局文件
[root@drbd2 ~]# cd /etc/drbd.d
[root@drbd2 drbd.d]# cp global_common.conf global_common.conf.bak //备份文件
[root@drbd2 drbd.d]# vim global_common.conf 修改如下
global {
usage-count no; //取消DRBD使用者统计
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C; //使用协议C
startup {
wfc-timeout 120; //启动延迟
degr-wfc-timeout 120;
}
disk { //fence防脑裂
on-io-error detach;
fencing resource-only;
}
net {
cram-hmac-alg "sha1"; //主备节点使用的通信算法
shared-secret "mydrbdlab";
}
syncer {
rate 100M; //主备节点同步速率
}
}
9> 定义资源
[root@drbd1 ~]# vim web.res
5.在节点1 与节点2上初始化资源web
[root@drbd1 ~]# drbdadm create-md web
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
[root@drbd2 ~]# drbdadm create-md web
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
6.启动drbd服务
注意两个节点要一起启动,否则在启动时会处于一直等待状态
[root@drbd1 ~]# service drbd start
[root@drbd2 ~]# service drbd start
7.查看节点状态
在节点一上查看
[root@drbd1 ~]# drbd-overview
0:web Connected Secondary/Secondary Inconsistent/Inconsistent C r----
在节点二上查看
[root@drbd2 ~]# drbd-overview
0:web Connected Secondary/Secondary Inconsistent/Inconsistent C r----
web:资源名
Secondary/Secondary:自身状态/另外节点状态
由上面的两个节点的状态可看到,两个节点都是备用节点,我们需要手动调整
8.将drbd1.a.com调整为主节点
[root@drbd1 ~]# drbdadm -- --overwrite-data-of-peer primary web
9.再次查看状态
节点一
[root@drbd1 ~]# drbd-overview
0:web Connected Primary/Secondary UpToDate/UpToDate C r----
节点二
[root@drbd2 ~]# drbd-overview
0:web Connected Secondary/Primary UpToDate/UpToDate C r----
可以看出drbd1.a.com已经成为主节点了
10.在主节点上创建文件系统
[root@drbd1 ~]# mkfs.ext3 -L drbdweb /dev/drbd0 L:卷名
11.测试
1> 在主节点上创建挂载点,挂载后,写入一个文件
[root@drbd1 ~]# mkdir /mnt/drbd
[root@drbd1 ~]# mount /dev/drbd0 /mnt/drbd
[root@drbd1 ~]# cd /mnt/drbd
[root@drbd1 drbd]# touch index.html
[root@drbd1 drbd]# ll
total 16
-rw-r--r-- 1 root root 0 Jan 20 18:09 index.html
drwx------ 2 root root 16384 Jan 20 18:07 lost+found
[root@drbd1 drbd]#
2> 将drbd1.a.com配置成从节点,将drbd2.a.com配置成主节点
节点一
[root@drbd1 drbd]# cd
[root@drbd1 ~]#
[root@drbd1 ~]# umount /mnt/drbd
[root@drbd1 ~]# drbdadm secondary web
[root@drbd1 ~]# drbdadm role web
Secondary/Primary
[root@drbd1 ~]#
节点二
[root@drbd2 ~]# drbdadm primary web
[root@drbd2 ~]# drbd-overview
0:web Connected Primary/Secondary UpToDate/UpToDate C r----
3> 在节点二挂载,查看是否有内容
[root@drbd2 ~]# mkdir /mnt/drbd
[root@drbd2 ~]# mount /dev/drbd0 /mnt/drbd
[root@drbd2 ~]# ll /mnt/drbd/
total 16
-rw-r--r-- 1 root root 0 Jan 20 18:09 index.html //可以看到已经写入成功
drwx------ 2 root root 16384 Jan 20 18:07 lost+found