Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。 数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回) DRBD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃。 DRBD功能单主模式:典型的高可靠性集群方案。 复主模式:需要采用共享cluster文件系统,如GFS和OCFS2。用于需要从2个节点并发访问数据的场合,需要特别配置。 复制模式:3种模式: 协议A:异步复制协议。本地写成功后立即返回,数据放在发送buffer中,可能丢失。 协议B:内存同步(半同步)复制协议。本地写成功并将数据发送到对方后立即返回,如果双机掉电,数据可能丢失。 协议C:同步复制协议。本地和对方写成功确认后返回。如果双机掉电或磁盘同时损坏,则数据可能丢失。 一般用协议C。选择协议将影响流量,从而影响网络时延。 有效的同步:按线性而不是当初写的顺序同步块。同步损坏时间内的不一致数据。 在线的设备检验:一端顺序计算底层存储,得到一个数字,传给另一端,另一端也计算,如果不一致,则稍后进行同步。建议一周或一月一次。 复制过程的一致性检验:加密后,对方若不一致则要求重传。防止网卡、缓冲等问题导致位丢失、覆盖等错误。 Split brain:当网络出现暂时性故障,导致两端都自己提升为Primary。两端再次连通时,可以选择email通知,建议手工处理这种情况。 当数据写在缓冲区里,没有真正写到磁盘上时,系统崩溃会导致数据丢失。而disk flush是指将数据真正写到磁盘上后才返回。 有些带电池的硬盘控制器,如带电池的带点出Dell PERC Raid卡,不但自带缓存而且自带电池,会在系统意外断电或者崩溃后将最后的数据写入磁盘,对这类控制器,可以使用disk flush,从而在保证性能的前提下提高了数据的安全性。 磁盘错误处理策略: 传递给上层:可能造成文件系统remounting成只读,不推荐。 对上层屏蔽:用另一端的相应块进行读写,应用不中断。可以在任何方便的时候再切换。 不一致的(inconsistent)数据:不能以任何方式访问和使用的数据。如正在同步时的目标节点数据,这些数据不能识别,不能mount,甚至不能通过磁盘的自动检测。 过期的(outdated)数据:在备机上的数据,与主机一致,但不需要同步。如主备机网络中断后,备机上的数据就是过期的。 DRBD有接口允许应用程序在网络中断时将备机数据标识为过期的。DRBD拒绝将这个节点提升为主角色。这些管理接口在Heartbeat框架上得到完整实现。 一旦过期资源的复制链接恢复,他的过期标志自动清除,接着进行后台同步。 工作原理在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上, 切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了.
实验步骤: DRBD 一、准备环境 1.系统环境
# uname –r //内核版本
2.修改主机名称等 在节点1上进行修改
# hostname wj1.a.com //修改主机名称
NETWORKING=yes 之后退出再次登陆。
# hostname //查看名称
127.0.0.1 localhost.localdomain localhost 在节点2上进行修改
# hostname wj2.a.com //修改主机名称
NETWORKING=yes 之后退出再次登陆。
# hostname //查看名称
127.0.0.1 localhost.localdomain localhost
3.安装所需的文件 预先将所需的文件上传到管理员家目录。以下操作在wj1.a.com和wj2.a.com上都进行操作。
# yum localinstall *.rpm --nogpgcheck –y //使用yum进行安装可以有效的解决包的依赖性问题。 4.同步时钟 要求两个节点上的始终必须要一致。 # hwclock -s //同步始终
5.加载模块 在两个节点上都去进行如下操作。
# modprobe drbd //加载drbd模块
# lsmod |grep drbd //查看模块 6.创建新分区 以下操作要求在wj1.a.com和wj2.a.com上都进行。同时要求两个节点所创建的新分区大小一致。 # fdisk -l //查看有关情况
Disk /dev/sda: 21.4 GB, 21474836480 bytes
Device Boot Start End Blocks Id System
The number of cylinders for this disk is set to 2610.
Command (m for help): n //创建新分区 Command (m for help): p //显示
Disk /dev/sda: 21.4 GB, 21474836480 bytes
Device Boot Start End Blocks Id System Command (m for help): w 保存 # fdisk -l //再次查看
Disk /dev/sda: 21.4 GB, 21474836480 bytes
Device Boot Start End Blocks Id System # partprobe /dev/sda //重新加载
二、DRBD配置 以下操作要求在节点wj1和wj2上都做。 1.修改conf配置文件
# cd /usr/share/doc/drbd83-8.3.8/
#cp drbd.conf /etc/ 复制配置文件到相关目录 //第一列是行的序号
1 global { 8 wfc-timeout 120; 9 degr-wfc-timeout 120; 10 } 11 disk { 12 on-io-error detach; 13 fencing resource-only; 14 } 15 net { 16 cram-hmac-alg "sha1";
17 shared-secret "mydrbdlab";
2.修改资源文件 # cd /etc/drbd.d/ # vim web.res
1 resource web { 3.创建资源
#drbdadm create-md web
4.启动服务、测试 创建文件系统(在主节点上实现) mkfs -t ext3 -L drbdweb /dev/drbd0 [root@wj2 ~]# mkdir /web [root@wj2 ~]# drbdadm primary web [root@wj2 ~]# drbd-overview 0:web Connected Primary/Secondary UpToDate/UpToDate C r---- [root@wj2 ~]# drbdadm role web Primary/Secondary [root@wj2 ~]# mount /dev/drbd0 /web [root@wj2 web]# vim test.html [root@wj2 ~]# umount /web [root@wj2 ~]# drbdadm secondary web 测试,把wj2变成从的,wj1 变成主的 [root@wj1 web]# drbdadm primary web [root@wj1 web]# mount /dev/drbd0 /web [root@wj1 web]# ll /web 总计 20 drwx------ 2 root root 16384 10-18 00:13 lost+found -rw-r--r-- 1 root root 18 10-17 16:28 test.html [root@wj1 web]#
三 NFS配置 两台服务器的nfs配置必须要一致。 1.修改相关文件 # vim /etc/exports /web *(rw,sync,insecure,no_root_squash,no_wdelay)
2.执行相关操作。 #service portmap start && chkconfig portmap on #service nfs start && chkconfig nfs on
3.修改nfs启动脚本 # vim /etc/init.d/nfs 122 killproc nfsd –9
四、Heartbeat配置 Heartbeat的配置要求两个节点的配置一致。在wj1和wj2上进行如下操作 1.复制模版文件
# cd /usr/share/doc/heartbeat-2.1.4/ 2.修改相关的配置信息
# cd /etc/ha.d/ //切换到相关目录 24 debugfile /var/log/ha-debug 29 logfile /var/log/ha-log 34 logfacility local0 48 keepalive 2 56 deadtime 10 76 udpport 694 121 bcast eth0 //此行可以添加在任意一行 157 auto_failback off
211 node wj1.a.com
3.修改资源文件 # echo "node1.a.com IPaddr::192.168.2.2/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/web::ext3 killnfsd">>/etc/ha.d/haresources
4.修改key文件 # vim authkeys
23 auth 1
5.手工创建文件
# cd /etc/ha.d/resource.d/
6.修改配置文件的权限
# chmod 600 /etc/ha.d/authkeys
7.启动服务 # service heartbeat start
五、测试 使用客户端进行测试 1.挂载
#mkdir /mnt/nfs 2.创建测试脚本文件
#vim /mnt/test.sh while true do echo --->trying touch x:`date` touch x echo <---done touch x:`date` echo sleep 2 done ~
3.执行测试文件
#cd /mnt/nfs/
--->trying touch x:2012年 10月 17日 星期三 21:21:09 CST //让客户端一直执行脚本文件,到服务器节点node1上关闭heartbeat服务,之后在客户端会发现丢弃现象,之后文件系统又恢复正常。
--->trying touch x: 2012年 10月 17日 星期三 21:23:08 CST
--->trying touch x: 2012年 10月 17日星期三 21:23:43 CST 转载请保留固定链接: https://linuxeye.com/configuration/874.html |