开发者社区> 技术小甜> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

linux下磁盘镜像软件DRBD的使用

简介:
+关注继续查看

一、 什么是DRBD

DRBD的全称为:Distributed Replicated Block Device (DRBD)分布式块设备复制,DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立一个本地块设备的实时镜像。与心跳连接结合使用,也可以把它看作是一种网络RAID。
 

二、DRBD是如何工作的
 Drbd 负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。目前,drbd 每次只允许对一个节点进行读写访问,这对于通常的故障切换高可用性集群来讲已经足够用了。以后的版本将支持两个节点进行读写存取。
 

三、 drbd与现在的HA集群的关系

一个drbd系统由两个以上节点构成,与HA集群类似,也有主用节点和备用节点之分,在带有主要设备的节点上,应用程序和操作系统可以运行和访问drbd设备(/dev/nbX)。
 在主节点写入的数据通过drbd设备存储到主节点的磁盘设备中,同时,这个数据也会自动发送到备用节点相应的drbd设备,最终写入备用节点的磁盘设备中,在备用节点上,drbd只是将数据从drbd设备写入到备用节点的磁盘设备中。
 大部分现行高可用性集群都会使用共享存储,而Drbd也可以作为一个共享存储设备,使用drbd不需要任何硬件的投资。因为它在IP网络中运行,所以,利用drbd作为共享存储设备,要节约很多成本,因为在价格上IP网络要比专用的存储网络经济的多。

四、 DRBD实现原理图
DRBD是linux的内核的存储层中的一个分布式存储系统,可用使用DRBD在两台linux服务器之间共享块设备,共享文件系统和数据。类似于一个网络RAID1的功能,如图1所示:

 

 

图1

五、DRDB的安装
从官方网站下载源码包来编译或直接使用yum源来安装,这里以CentOS为例说明安装过程,其它系统类似。
[root@drbd1 ~]# uname -a
Linux drbd1 2.6.18-194.11.1.el5 #1 SMP Tue Aug 10 19:09:06 EDT 2010 i686 i686 i386 GNU/Linux
通过yum安装DRBD服务:
[root@drbd1 ~]# yum -y install kmod-drbd83 drbd83
检查DRBD是否安装成功:
[root@drbd1 ~]# lsmod | grep -i drbd
drbd                  228528  3 
[root@drbd1 ~]#  modprobe -l | grep -i drbd
/lib/modules/2.6.18-194.11.1.el5/weak-updates/drbd83/drbd.ko
安装成功之后/sbin目录下面有drbdadm,drbdmeta,drbdsetup命令,以及/etc/init.d/drbd启动脚本。

六、配置DRDB
DRBD运行需要读取/etc/drbd.conf配置文件,下面是两台主机节点配置的drbd.conf文件的简单示例:
[root@drbd1 ~]#cat /etc/drbd.conf
#
# drbd.conf
#
# create by jackbillow@gmail.com at 2010-08-12
global {
    # minor-count 64;
    # dialog-refresh 5; # 5 seconds
    # disable-ip-verification;
usage-count no;   
#是否参加DRBD使用者统计,默认yes
}

common {
  syncer { rate 200M; }
#设置主备节点同步时的网络速率最大值,单位是字节。
}

resource r0 {
  #资源名字为r0.
  protocol      C;
# 使用drbd的第三种同步协议,表示收到远程主机的写入确认后,则认为写入完成.
  handlers {
    pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
    pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
    local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
    fence-peer "/usr/lib64/heartbeat/drbd-peer-outdater -t 5";
    pri-lost "echo pri-lost. Have a look at the log files. | mail -s 'DRBD Alert' root";
    split-brain "/usr/lib/drbd/notify-split-brain.sh root";
    out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
  }

  net {
    # timeout           60;
    # connect-int       10;
    # ping-int          10;
    # max-buffers     2048;
    # max-epoch-size  2048;
    cram-hmac-alg "sha1";
shared-secret "MySQL-HA";
# DRBD同步时使用的验证方式和密码信息。
  }

  disk {
    on-io-error detach;
fencing resource-only;
#使用dpod功能(drbd outdate-peer daemon)保证在数据不同步时不进行切换。
  }

  startup {
    wfc-timeout 120;
    degr-wfc-timeout 120;
  }

  device        /dev/drbd0;
 
  on dbm157 {
#每个主机的说明以on开头,后面是hostname(uname -n),在后面的{}中为这个主机的配置。
disk        /dev/sda2;
#/dev/drbd0使用的磁盘分区是/dev/sda2。
address     192.168.0.157:7788;
#设置DRBD的监听端口,用于与另一台主机通信。
    meta-disk   internal;
  }
  on dbm158 {
disk        /dev/sda2;
#/dev/drbd0使用的磁盘分区是/dev/sda2。
address     192.168.0.158:7788;
#设置DRBD的监听端口,用于与另一台主机通信。
    meta-disk   internal;  #drbd的元数据存放方式。
  }

}
将上面这个drbd.conf文件分别复制到两台主机的/etc目录下。drbd.conf的配置参数很多,有兴趣的话可以使用命令:man drbd.conf来查看了解更多的参数说明。

七、启动DRBD

1 在两个节点执行
在启动DRBD之前,你需要分别在两台主机的hdb1分区上,创建供DRBD记录信息的数据块.分别在两台主机上执行: 
[root@drbd1 ~]# drbdadm create-md r0 或者执行drbdadm create-md all
[root@drbd2 ~]# drbdadm create-md r0

2在两个节点启动服务
[root@drbd1 ~]#/etc/init.d/drbd start
[root@drbd2 ~]#/etc/init.d/drbd start
最好同时启动

3在任意节点查看节点状态
[root@drbd1 ~]# cat /proc/drbd
 1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:2007644
对输出的含义解释如下:
ro表示角色信息,第一次启动drbd时,两个drbd节点默认都处于Secondary状态,
ds是磁盘状态信息,“Inconsistent/Inconsisten”,即为“不一致/不一致”状态,表示两个节点的磁盘数据处于不一致状态。
Ns表示网络发送的数据包信息。
Dw是磁盘写信息
Dr是磁盘读信息

4设置主节点
由于默认没有主次节点之分,因而需要设置两个主机的主次节点,选择需要设置为主节点的主机,然后执行如下命令:
[root@drbd1 ~]#drbdsetup /dev/drbd0 primary –o
或者执行下面命令也是可以的
[root@drbd1 ~]#drbdadm -- --overwrite-data-of-peer primary all
第一次执行完此命令后,在后面如果需要设置哪个是主节点时,就可以使用另外一个命令:
[root@drbd1 ~]#/sbin/drbdadm primary r0或者/sbin/drbdadm primary all
执行此命令后,开始同步两台机器对应磁盘的数据
[root@drbd1 ~]#cat /proc/drbd
1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----
    ns:576224 nr:0 dw:0 dr:581760 al:0 bm:34 lo:84 pe:369 ua:256 ap:0 ep:1 wo:b oos:1443196
        [====>...............] sync'ed: 28.4% (1443196/2007644)K delay_probe: 69
        finish: 0:03:56 speed: 6,024 (5,876) K/sec
从输出可知:
 “ro状态现在变为“Primary/Secondary”,“ds”状态也变为“UpToDate/Inconsistent”,也就是“实时/不一致”状态,现在数据正在主备两个主机的磁盘间进行同步,且同步进度为28.4%,同步速度每秒5.8M左右。
等待片刻,再次查看同步状态,输出如下:
[root@drbd1 ~]#cat /proc/drbd
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
ns:2007644 nr:0 dw:0 dr:2007644 al:0 bm:123 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
可以看到同步完成了,并且“ds“状态也变为“UpToDate/UpToDate”了。即为“实时/实时”状态了。
如果第一次设置主备节点时使用“/sbin/drbdadm primary r0”命令,那么会提示如下错误:
0: State change failed: (-2) Need access to UpToDate data
Command '/sbin/drbdsetup 0 primary' terminated with exit code 17
只要第一次用上面命令成功后,以后就可以用“/sbin/drbdadm primary r0”命令了。
5格式化文件系统
由于mount操作只能在主节点进行,所以只有设置了主节点后才能格式化磁盘分区,然后挂载:
[root@drbd1 ~]#mkfs.ext3 /dev/drbd0 
[root@drbd1 ~]#mount /dev/drbd0 /mnt

八、 DRBD主备节点切换
主备节点切换有两种方式,分别是停止drbd服务切换和正常切换,依次介绍:

1停止drbd服务切换
关闭主节点服务,此时挂载的drbd分区就自动在主节点卸载了,然后在备用节点执行切换命令:
[root@drbd2 ~]#drbdadm primary all
此时会报错:
2: State change failed: (-7) Refusing to be Primary while peer is not outdated
Command 'drbdsetup 2 primary' terminated with exit code 11
因此,必须在备用节点执行如下命令:
[root@drbd2 ~]#drbdsetup /dev/drbd0 primary –o
或者
[root@drbd2~]#drbdadm -- --overwrite-data-of-peer primary all
此时就可以正常切换了。
当在备用节点执行切换到主节点命令后,原来的主用节点自动变为备用节点。无需在主用节点再次执行切换到备用节点的命令。

2正常切换
在主节点卸载磁盘分区,然后执行
[root@drbd1 ~]#drbdadm secondary all
如果不执行这个命令,直接在备用节点执行切换到主节点的命令,会报错:
2: State change failed: (-1) Multiple primaries not allowed by config
Command 'drbdsetup 2 primary' terminated with exit code 11
接着,在备用节点执行
[root@drbd2 ~]#drbdadm primary all
最后在备用节点挂载磁盘分区即可:
[root@drbd2 ~]#mount /dev/drbd2  /mnt











本文转自南非蚂蚁51CTO博客,原文链接: http://blog.51cto.com/ixdba/582136,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Kbase #5: Aliyun Linux 2 经典网络实例无法执行 YUM 命令
问题解决状态:已解决 1. 问题所处环境 / Environment 镜像: aliyun-2.1903-x64-20G-alibase-20190327.vhd 及以后所有版本; 内核: kernel-4.19.24-9.al7 及以后所有内核版本。
724 0
linux删除文件夹命令
在使用Linux的时候,有时候要删除一个文件夹,然而往往会提示次此文件非空,没法删除,这个时候,必须使用rm -rf命令。对于一些新手来说,使用删除命令,必须要小心,以免误删重要文件。rm [选项] 文件选项说明:-f   -force    忽略不存在的文件,强制删除,无任何提示-i   --i...
1529 0
在工作中常用的Linux命令
typora-copy-images-to: ipic 前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 之前写过一篇 《 在公司做的项目和自己在学校做的有什么区别? 》不知道大家还有印象没有,里面提到了在工作中可能需要等上Linux服务器,查看一些信息(特别是查日志找Bug)。
645 0
运维linux命令
运维linux命令1、linux启动过程 开启电源 --> BIOS开机自检 --> 引导程序lilo或grub--> 内核的引导(kernel boot)--> 执行init(rc.sysinit、rc)--> mingetty(建立终端) -->Shell 2、网卡绑定多ip ifconfig eth0:1 192.
2901 0
10分钟学会 linux awk命令
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
932 0
如何用九条命令在一分钟内检查Linux服务器性能?
一、uptime命令 这个命令可以快速查看机器的负载情况。在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中断IO进程(进程状态为D)的数量。这些数据可以让我们对系统资源使用有一个宏观的了解。
941 0
如何利用多核CPU来加速你的Linux命令
本文介绍利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等等。
582 0
linux命令
1.查看ssh端口是否开启 setup 2.vi和vim的三种常见模式 1、插入模式 按下i,I,o,O,a,A,r,R等任何一个字母之后才会进入编辑模式, 一般来说按i即可. 2、Esc返回正常模式 3、:w(保存) :q(退出) :q!(不保存退出) :wq(保持并退出) 4、拷贝当前行 yy , 拷贝当前行向下的5行 5yy,并粘贴。
1482 0
+关注
10136
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载