DRBD:(Distributed Replicated Block Device)  分布式复制块设备

        是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。 

主要特点:

        1.Distributed Replicated Block Device

        2.A software based, shared nothing, replicated storage solution mirroring the content of block devices (hard disks, partitions, logical volumes etc.) between servers.
        3.DRBD's core functionality is implemented by way of a Linux kernel module
        4.DRBD mirrors data

               (1)In real time
               (2)Transparently
               (3)Synchronously or asynchronously

如下图为DRBD的工作模式:

         190739663.jpg

如图所示:DRBD有主从之分

        primary:(可执行读、写操作)        secondary:(文件系统不能挂载)

        DRBD它能够将位于两个主机的硬盘或分区做成镜像设备,客户端应用程序像我们主服务器发起写请求,经过DRBD模块的时候,DRBD模块会将请求一分为二,将请求发往本地硬盘一份,然后通过TCP/IP协议将数据通过网卡传递给secondary一份。

        如果我们先读写数据,首先发起系统调用(File System),文件系统在实现文件读写的时候,为了加快读取速度,内核会在内存空间中划分出一段空间,用于Buffer和Cache,Buffer和Cache主要用来缓存源数据和数据等;所以在读写数据时,实在Buffer和Cache中完成的,而且在Buffer和Cache中完成读写之后不会立即同步到磁盘上,而由Buffer和Cache往硬盘中写数据时,DRBD会把数据分流成两份,一份写到本地硬盘中,一份会经TCP/IP协议经过网卡传送到另一个节点上。

        另外primary在与secondary传送数据时有三种协议:

                1、A模型(异步模型):刚刚交由TCP/IP协议站,刚刚往外发送时,就通告主机结束。

                2、B模型(半同步模型):数据报文发送到对方节点的TCP/IP协议站,就通告系统已经完成。

                3、C模型(同步模型):数据报文发到对方主机并且存储完成以后,才返回主节点同步完成。

DRBD Resources

        Include:

                Resource name(资源名称)

                        可以是除了空白字符外的任意ACSII码字符;

                DRBD device(资源设备)

                        双方节点上,此DRBD设备的设备文件,一般为/dev/drbdN,其主设备号IANA(147);

                Disk configuration(磁盘设备)

                        在双方节点上,各自提供的存储设备;

                Network configuration(网络配置)

                        双方数据同步时所使用的网络属性;

DRBD    administration tools(管理工具):

            drbdadm
                 The high level administration tool of the DRBD program suite                                                                          It obtains all DRBD configuration parameters from the configuration file /etc/drbd.conf                                 (/etc/drbd.d/)
            drbdsetup
                The program that allows users to configure the DRBD module that has been loaded into the run            ning kernel It is the low-level tool within the DRBD program suite 
                drbdmeta
                The program which allows users to create, dump, restore, and modify DRBD's meta data 

            structures

繁杂的概念我不知道我有木有解释清楚,接下来就跟我一起走进DRBD的配置吧!!!

       

DRBD配置:

         DRBD在Linux 2.6.33之前,需要对内核打补丁才能使用。而Red hat 5.8 kernel是2.6.18,所以首先需要给内核打补丁。

        节点之间同步时间:

                date [ntp server]

        配置主机名称,主机名称之间需要使用域名解析

                hostname node1.heartbeat.com

        使主机名开机以后不会失效:

                 echo "node1.heartbeat.com" > /etc/sysconfig/network

 

        配置第二个节点主机名称,主机名称之间需要使用域名解析 

                hostname node2.heartbeat.com

        使主机名开机以后不会失效:

                 echo "node2.heartbeat.com" > /etc/sysconfig/network

                

使用hosts文件解析对方节点:

            172.16.39.5     node1.heartbeat.com

            172.16.39.6     node2.heartbeat.com 

            在第二个节点做相同的配置

        使两个节点互信通信:

            ssh-keygen -f ~/.ssh/id_rsa -t rsa -P ' ' 
            ssh-copy-id -i .ssh/id_rsa.pub node2.heartbeat.com

            在第二个节点做相同的配置    

            ssh-keygen -f ~/.ssh/id_rsa -t rsa -P ' ' 
            ssh-copy-id -i .ssh/id_rsa.pub node1.heartbeat.com

  

安装补丁包:

        两个节点各自安装补丁包:     

                rpm -ivh drbd83-8.3.15-2.el5.centos.i386.rpm     kmod-drbd83-8.3.15-3.el5.centos.i686.rpm

        在两个节点分别划出两个分区:(做DRDB)

        DRBD的配置文件:

              /etc/drbd.conf

              /etc/drbd.d/global.common.conf

              /etc/drbd.d/resource.d/*  任何一个文件都是一个资源

        copy模板文件至主配置文件下:

             cp /usr/share/doc/drbd-8.3.15/drbd.conf  /etc/drbd.conf

配置global_common.conf

global {
        usage-count no;
        # minor-count dialog-refresh disable-ip-verification
}

common {
        protocol C;

        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";
                # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
                # split-brain "/usr/lib/drbd/notify-split-brain.sh root";
                # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
                # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
                # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
        }

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

        disk {
                on-io-error detach;
                                #fencing resource-only;
        }

        net {
                                cram-hmac-alg "sha1";
                                shared-secret "mydrbdlab";
        }

        syncer {
                rate 1000M;
        }
}

        

定义一个资源/etc/drbd.d/web.res
resource web {
  on node1.heartbeat.com {
    device    /dev/drbd0;
    disk      /dev/sda5;
    address   172.16.100.11:7789;
    meta-disk internal;
  }
  on node2.heartbeat.com {
    device    /dev/drbd0;
    disk      /dev/sda5;
    address   172.16.100.12:7789;
    meta-disk internal;
  }
}

 

以上文件在两个节点上必须相同,因此,可以基于ssh将刚才配置的文件全部同步至另外一个节点。
# scp  /etc/drbd.*  node2:/etc

初始化资源,在Node1和Node2上分别执行:
# drbdadm create-md web

启动服务,在Node1和Node2上分别执行:
/etc/init.d/drbd start

 

查看启动状态:

 tail  -f /proc/drbd

而后再次查看状态,可以发现数据同步过程已经开始:
# drbd-overview 
  0:web  SyncSource Primary/Secondary UpToDate/Inconsistent C r---- 
    [============>.......] sync'ed: 66.2% (172140/505964)K delay_probe: 35

等数据同步完成以后再次查看状态,可以发现节点已经牌实时状态,且节点已经有了主次:
 drbd-overview 
  0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- 

创建文件系统

文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:
 mke2fs -j -L DRBD /dev/drbd0
 mkdir /mnt/drbd 
mount /dev/drbd0 /mnt/drbd

切换Primary和Secondary节点

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

Node1:
 cp -r /etc/drbd.* /mnt/drbd  
umount /mnt/drbd
drbdadm secondary web

查看状态:
 drbd-overview 
  0:web  Connected Secondary/Secondary UpToDate/UpToDate C r---- 

Node2:
 drbdadm primary web
 drbd-overview 
  0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- 
 mkdir /mnt/drbd
mount /dev/drbd0 /mnt/drbd

使用下面的命令查看在此前在主节点上复制至此设备的文件是否存在:
 ls /mnt/drbd

 

 

 

                                                                                   时间原因:到此为止,有错误的地方请大家帮我改正...

                                                                                                                                                                        谢谢