Chinaunix首页 | 论坛 | 博客
  • 博客访问: 435657
  • 博文数量: 62
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 740
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-10 21:59
个人简介

付出,终有回报!

文章分类

全部博文(62)

文章存档

2018年(6)

2017年(24)

2016年(6)

2015年(26)

分类: 系统运维

2015-05-24 20:37:36

先来大概的了解下drbd

  DRBD(Distributed Replicated Block Device),DRBD 号称是“网络RAID”,开源软件,由LINBIT 公司开发。DRBD实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之
中。它由内核模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID-1的功能。也就是说当你将数据写入本地的DRBD设备上的文件系统时,数据会同时被发送到网络中的另外一台主机之上,并以完全相同的形式记录在文件系统中。本地节点与远程节点的数据可以保证实时的同步,并保证IO的一致性。所以当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相同的数据,可以继续使用,以达到高可用的目的。

                                                                  这个是它的工作原理图

为了能够管理和配置 DRBD 的资源,DRBD 配备了一些管理工具与内核模块进行通信。
drbdadm:高层的 DRBD 程序管理套件工具。它从配置文件/etc/drbd.conf 中获取所有配置参数。drbdadm 为 drbdsetup 和 drbdeta 两个命令充当程序的前端应用,执行 drbdadm
实际是执行的 drbdsetup 和 drbdeta 两个命令。
drbdsetup:drbdsetup 可以让用户配置已经加载在内核中运行的 DRBD 模块,它是底层的 DRBD 程序管理套件工具。使用该命令时,所有的配置参数都需要直接在命令行中定义,
虽然命令和灵活,但是大大的降低了命令的简单易用性,因此很多的用户很少使用。
drbdmeta:
drbdmeta 允许用户创建、转储、还原和修改 drbd 的原数据结构。

三、添加存储

1、 添加磁盘

分别在两个节点上添加一块虚拟磁盘

fdisk -l  查看添加的磁盘信息

Disk /dev/vda: 8589 MB, 8589934592 bytes

16 heads, 63 sectors/track, 16644 cylinders

2、软件包安装

 在本次的实验中,我用的是8.4.4版本的,目前最新版本是8.4.6,不过8.4.5和8.4.6与之前的版本相比,变动挺大。
这是我网盘中的资源

(1)解压及编译
[root@new ~]# tar -zxf drbd-8.4.4.tar.gz

[root@new ~]# cd drbd-8.4.4

[root@new drbd-8.4.4]# ./configure --enable-spec —with-km

--with-km,指定编译内核模块

[root@new drbd-8.4.4]# yum install flex -y

解决依赖性后,再次编译

[root@new drbd-8.4.4]# ./configure --enable-spec —with-km

 

既然要用到内核模块,那么就必须安装内核模块

[root@new drbd-8.4.4]# rpm -q kernel-devel

package kernel-devel is not installed

[root@new drbd-8.4.4]# yum install kernel-devel -y


(2)制作RPM包 

此处用的软件包是源码,为了便于后期的维护,把它制作成RPM

[root@new ~]# yum install -y rpm-build


以下这些都是编译安装过程中会用到的软件,如果缺少,请根据相应的提示进行安装

[root@new drbd-8.4.4]# rpm -q flex rpm-build gcc kernel-devel

flex-2.5.35-8.el6.x86_64

rpm-build-4.8.0-37.el6.x86_64

gcc-4.4.7-4.el6.x86_64

kernel-devel-2.6.32-431.el6.x86_64

 

开始制作RPM包,具体的参数使用可以查看,rpmbuild --help

[root@new drbd-8.4.4]# rpmbuild -bb drbd.spec

error: File /root/rpmbuild/SOURCES/drbd-8.4.4.tar.gz: No such file or directory

从给出的提示可知,需要把待制作的软件包拷贝到root/rpmbuild/SOURCES/目录下

[root@new drbd-8.4.4]# cp /root/drbd-8.4.4.tar.gz /root/rpmbuild/SOURCES/

[root@new drbd-8.4.4]# rpmbuild -bb drbd.spec

制作成功,将会有下图所示的7rpm


[root@new drbd-8.4.4]# rpmbuild -bb drbd-km.spec

如果没有关于内核模块的这个包,那么服务drbd将无法启动

[root@new drbd-8.4.4]# rpm -ql drbd-km-2.6.32_431.el6.x86_64-8.4.4-4.el6.x86_64

/lib/modules/2.6.32-431.el6.x86_64

/lib/modules/2.6.32-431.el6.x86_64/updates

/lib/modules/2.6.32-431.el6.x86_64/updates/drbd.ko

/usr/share/doc/drbd-km-2.6.32_431.el6.x86_64-8.4.4

/usr/share/doc/drbd-km-2.6.32_431.el6.x86_64-8.4.4/COPYING

/usr/share/doc/drbd-km-2.6.32_431.el6.x86_64-8.4.4/ChangeLog

/usr/share/doc/drbd-km-2.6.32_431.el6.x86_64-8.4.4/k-config-2.6.32-431.el6.x86_64.gz

rpm包制作成功后,自动添加了/lib/modules/2.6.32-431.el6.x86_64/updates/drbd.ko模块

 

所有制作好的rpm包都在/root/rpmbuild/RPMS/x86_64/这个目录下,一共8个,一个都不能少

[root@new drbd-8.4.4]# cd /root/rpmbuild/RPMS/x86_64/

[root@new x86_64]# ls

drbd-8.4.4-4.el6.x86_64.rpm

drbd-bash-completion-8.4.4-4.el6.x86_64.rpm

drbd-heartbeat-8.4.4-4.el6.x86_64.rpm

drbd-km-2.6.32_431.el6.x86_64-8.4.4-4.el6.x86_64.rpm

drbd-pacemaker-8.4.4-4.el6.x86_64.rpm

drbd-udev-8.4.4-4.el6.x86_64.rpm

drbd-utils-8.4.4-4.el6.x86_64.rpm

drbd-xen-8.4.4-4.el6.x86_64.rpm

 
这些包制作时,都挺简单的,基本上也不会出现什么错误,在此,我就不提供下载路径了。


将制作好的这些包拷贝到另一个节点上

[root@new x86_64]# scp * 172.25.18.13:/root

(3)安装软件包

在两个节点上同时安装刚制作的rpm包
[root@new x86_64]# rpm -ivh drbd-*


[root@new1  ~ ]# rpm -ivh drbd-*

3、编辑配置文件
DRBD 的所有的控制都是在配置文件/etc/drbd.conf 中。通常情况下配置文件包含如下内容:
include "/etc/drbd.d/global_common.conf";
include "/etc/drbd.d/*.res";
通常情况下, /etc/drbd.d/global_common.conf 包含 global 和 common 的 DRBD 配置部分,而.res文件都包含一个资源的部分。


/usr/share/doc/drbd-utils-8.4.4下有配置模板
[root@new x86_64]# cd /usr/share/doc/drbd-utils-8.4.4

[root@new drbd-utils-8.4.4]# ls

ChangeLog  COPYING  drbd.conf.example  README


进入/etc/drbd.d,编辑一个以.res结尾的文件,文件名可以随意取
[root@new drbd-utils-8.4.4]# cd /etc/drbd.d

[root@new drbd.d]# vim drbd.res
-----------------------------------------------------------------------------------------------------------------------------------------------------------------

resource mysqldata {      #mysqldata,是指定的资源的名字

meta-disk internal;       # internal表示将metadata存放到drbd挂在的磁盘分区的最后的位置上

device /dev/drbd1;

syncer {

verify-alg sha1;

}
#每个主机的说明以"on"开头,后面必须是主机名

on new.example.com {

disk /dev/vda;       #此处的disk必须是添加磁盘时 fdisk -l 显示的

address 172.25.18.12:7789;       # 设置DRBD的监听端口,用于与另一台主机通信

}

on new1.example.com {

disk /dev/vda;

address 172.25.18.13:7789;

}

}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
此处的配置文件,仅供简单的参考,可以根据不同的需求做以修改

metadata的存储方式有内部和外部两种方式,使用哪种配置都是在资源配置中定义的
内部metadata:内部metadata存放在同一块硬盘或分区的最后的位置上
  优点:metadata和数据是紧密联系在一起的,如果硬盘损坏,metadata同样就没有了,同样在恢复的时候,metadata也会一起被恢复回来
  缺点:metadata和数据在同一块硬盘上,对于写操作的吞吐量会带来负面的影响,因为应用程序的写请求会触发metadata的更新,这样写操作就会造成两次额外的磁头读写移动。
外部metadata:外部的metadata存放在和数据磁盘分开的独立的块设备上
  优点:对于一些写操作可以对一些潜在的行为提供一些改进
  缺点:metadata和数据不是联系在一起的,所以如果数据盘出现故障,在更换新盘的时候就需要人工干预操作来进行现有node新硬盘的同步了
 
将编辑好的配置文件拷贝到另一个节点上

[root@new drbd.d]# scp drbd.res 172.25.18.13:/etc/drbd.d。


4、初始化并启动服务

[root@new drbd.d]# drbdadm create-md mysqldata

[root@new drbd.d]# /etc/init.d/drbd start

Starting DRBD resources: [

     create res: mysqldata

   prepare disk: mysqldata

    adjust disk: mysqldata

     adjust net: mysqldata

]

........

此处表明它在等待另一个节点

 
初始化系统上的DRBD服务,如果没有初始化,后面的测试将会出现问题

[root@new1 ~]# drbdadm create-md mysqldata

[root@new1 ~]# /etc/init.d/drbd start

初始化成功,并启动服务都,在/dev/下会生成 /dev/drbd1这个设备名。后面的存储,使用的也是 /dev/drbd1

[root@new drbd.d]# ll /dev/drbd1

brw-rw---- 1 root disk 147, 1 May 23 15:14 /dev/drbd1

[root@new drbd.d]# cat /proc/drbd 

version: 8.4.4 (api:1/proto:86-101)

GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@new.example.com, 2015-05-23 14:48:22

 

 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:f oos:8388316

/proc/drbd 是一个虚拟的文件,用于显示当前配置的所有 drbd 资源的实时状态。
简单介绍下/proc/drbd文件中各字段的含义:
第一行显示的为当前系统使用的 drbd 的版本,第二行包含一些特定的编译信息。
CS(connnection state):网络连接状态
      使用命令 drbdadm cstate 查看资源的连接状态。常见的状态有:
            Connected 连接:Drbd 已经建立连接,数据镜像现在可用,节点处于正常状态。
            Disconnecting 断开:断开只是临时状态,下一个状态将是 StandAlone 独立的。
            Unconnected 悬 空 : 是 尝 试 连 接 前 的 临 时 状 态 , 可 能 的 下 一 个 状 态 为 WFconnection 和WFReportParams。
            Timeout 超时:与对等节点连接超时,也是临时状态,下一个状态为 Unconected 悬空。
RO(role 角色):节点的角色
    本地节点一般显示在前,对等节点资源显示在后。资源的角色一般为如下之一:
            Primary 主:资源目前为主,并且可能正在被读取或者写入。若不是双主模式被激活,这种角色只可能出现在两节点中的一个上。
            Secondary 次:资源目前为次。正常接收对等节点的更新(除非运行在断开模式下才不是),但是它既不能被读取也不能被写入。这种角色只能是两节点中的一个。
            Unknown 未知:资源角色目前未知。本地资源不会出现这种状态,只有对等节点在断开模式下才会出现在这种情况。
DS(disk stats): 磁盘状态
    本地和对等节点的磁盘状态都有可能是以下状态之一:
            Consistent:一个没有连接的节点数据一致。当建立连接时,它决定数据是 UpToDate 或者是Outdated。
            UpToDate:一致的最新的数据状态,这个状态是正常的状态。
            Failed 失败:本地块设备报告 I/O 错误的下一个状态。其下一个状态为 Diskless 无盘。
            Inconsistent:数据是不一致的,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。此外,在同步期间(同步目标)在一个节点上出现这种状态。
            Outdated:数据资源是一致的,但是已经过时。
            DUnknown:当对等节点网络连接不可用时出现这种状态。




阅读(1982) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~