DRBD工作原理及配置过程

  DRBD 是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。您可以把它看作是一种网络RAID。

  DRBD负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。其他所需的组件有集群成员服务,如TurboHA 或 心跳连接,以及一些能在块设备上运行的应用程序。drbd是工作在内核。类似于一种驱动模块,他工作的位置在文件系统的buffer cache和磁盘调度器之间,通过tcp/ip发给另外一台主机到对方的tcp/ip最终发送给对方的drbd,再由对方的drbd存在本地对应磁盘上,因为drbd是工作在内核当中,所以我们要对内核进行打补丁,不过在2.6.33内核之后已经被做进内核当中了。

drbd的工作模式: 同步 异步 半同步
   异步指的是当数据写到磁盘上,并且复制的数据已经被放到我们的tcp缓冲区并等待发送以后 就认为写入完成
   半同步指的是数据已经写到磁盘上,并且这些数据已经发送到对方内存缓冲区,对方的tcp已经收到数据,并宣布写入
   同步指的是主节点已写入,从节点磁盘也写入

配置简介

   1、全局配置项(global)

       基本上我们可以做的也就是配置usage-count是yes还是no了,usage-count参数其实只是为了让linbit公司收集目前drbd的使用情况。当drbd在安装和升级的时候会通过http协议发送信息到linbit公司的服务器上面。

   2、公共配置项(common)

       这里的common,指的是drbd所管理的多个资源之间的common。配置项里面主要是配置drbd的所有resource可以设置为相同的参数项,比如protocol,syncer等等。

   3、资源配置项(resource)

       resource项中配置的是drbd所管理的所有资源,包括节点的ip信息,底层存储设备名称,设备大小,meta信息存放方式,drbd对外提供的设备名等等。每一个resource中都需要配置在每一个节点的信息,而不是单独本节点的信息。实际上,在drbd的整个集群中,每一个节点上面的drbd.conf文件需要是完全一致的。

       另外,resource还有很多其他的内部配置项:

       net:网络配置相关的内容,可以设置是否允许双主节点(allow-two-primaries)等。

       startup:启动时候的相关设置,比如设置启动后谁作为primary(或者两者都是primary:become-primary-on both)

       syncer:同步相关的设置。可以设置“重新”同步(re-synchronization)速度(rate)设置,也可以设置是否在线校验节点之间的数据一致性(verify-alg 检测算法有md5,sha1以及crc32等)。

配置过程

系统:centos 6.5

软件包:rpm -ivh drbd-8.4.3-33.el6.x86_64.rpm

       drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm

服务器1:172.16.24.6

服务器2:172.16.24.7


一、先准备好自已的环境(准备好两台主机,两面都要装上drbd具体如下)

要保持hosts文件的主机名和uname -n 显示的要一致。

[root@node1 ~]# cat /etc/hosts

172.16.24.6 node1.edu.com node1

172.16.24.7 node2.edu.com node2

[root@node1 ~]# uname -n

node1.edu.com


如果不一致可以通过以下命令修改:

[root@node1 ~]# vim /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=node1.edu.com

[root@node1 ~]# vim /etc/hosts

双机要互信(让两台主机基于ssh不通过密钥相互信)

       [root@node1 ~]# ssh-keygen -t rsa -P ''

[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

  第二个主机上执行相同的命令记提把主机名改成第一个主机的主机名

时间同步:(重要)


[root@node1 ~]# ntpdate -u asia.pool.ntp.org

[root@node1 ~]# ssh node2.edu.com 'date';date

Mon Apr 21 19:35:42 CST 2014

Mon Apr 21 19:35:42 CST 2014

二、查看一下自已所安装的内核版本,所需的rpm安装包一定要和自己的内核版本保持一致

[root@node1 ~]# uname -r

2.6.32-431.el6.x86_64

所要准备的安装包

drbd-8.4.3-33.el6.x86_64.rpm  

drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm

   准备好之后安装就简单了


   [root@node1 ~]# rpm -ivh drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm

    warning: drbd-8.4.3-33.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 66534c2b: NOKEY

    Preparing...                ########################################### [100%]

    1:drbd-kmdl-2.6.32-431.el########################################### [ 50%]

    2:drbd                   ########################################### [100%]

[root@node1 ~]# scp -r drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm node2.edu.com:/root====传给主机2一份

drbd-8.4.3-33.el6.x86_64.rpm                                                                 100%  283KB 283.3KB/s   00:00    

drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm                                             100%  145KB 145.2KB/s   00:00    


三、编辑配置文件

[root@node1 drbd.d]# vim global_common.conf


global {

       usage-count no;

       # minor-count dialog-refresh disable-ip-verification

}


common {

       handlers {


        pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

        pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

        local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";

}


       startup {

               # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb

                #wfc-timeout 120;

                #degr-wfc-timeout 60;

       }


       options {

               # cpu-mask on-no-data-accessible

       }


       disk {

                on-io-error detach;

               # size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes

       }


       net {

            protocol C;

            cram-hmac-alg "sha1"

            shared-secret "0d6d3291763bf7df"

       }

      syncer{

           rate 1000M;

}

}


四、为双方主机添加一个5兆的分区

wKioL1NVLAjheVQ3AAK0XHLyCnA574.jpg

[root@node1 drbd.d]# vim global_common.conf

resource mystore {

       on node1.edu.com {

               device /dev/drbd0;

               disk /dev/sda3;

               address 172.16.24.6:7789;

               meta-disk internal;

       }

       on node2.edu.com {

               device /dev/drbd0;

               disk /dev/sda3;

               address 172.16.24.7:7789;

               meta-disk internal;

       }

}

五、配置节点

以上文件在两个节点上必须相同,因此,可以基于ssh将刚才配置的文件全部同步至另外一个节点

[root@node1 drbd.d]# scp global_common.conf mystore.res node2.edu.com:/etc/drbd.d/

global_common.conf                                  100% 1028     1.0KB/s   00:00    

mystore.res                                         100%  245     0.2KB/s   00:00  

以下的步骤相当关键,请按看好再操作,以免出错

初始化资源,在Node1和Node2上分别执行:

[root@node1 drbd.d]# drbdadm create-md mystore

启动服务,在Node1和Node2上分别执行:

[root@node1 drbd.d]# service drbd start

我们接下来需要将其中一个节点设置为Primary。在要设置为Primary的节点上执行如下命令  

[root@node1 drbd.d]# drbdadm primary --force mystore

[root@node1 drbd.d]# watch -n 1 'cat /proc/drbd'

也可以使用drbd-overview命令来查看:

[root@node1 drbd.d]# drbd-overview


创建文件系统


文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:

[root@node1 drbd.d]# mke2fs -t ext4 /dev/drbd0

mke2fs 1.41.12 (17-May-2010)

[root@node1 drbd.d]# mkdir /mydata/

[root@node1 drbd.d]# mount /dev/drbd0 /mydata


切换Primary和Secondary节点


对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能原来的Secondary节点设置为Primary:

例:

先卸载

[root@node1 drbd.d]#umount /data

再设置节点

[root@node1 drbd.d]# drbdadm secondary mystore

[root@node1 drbd.d]# drbdadm primary mystore

这样drbd就可以工作起来了





你可能感兴趣的:(网络,工作原理,本地磁盘,应用程序,drbd,缓冲区)