1. DRBD全称:Distributed Replicated Block Device,分布式复制块设备,类似网络RAID1,常用于HA之中。
  功能:当数据写入本地文件系统时(DRBD主节点),也会发往网络上另一台主机(DRBD从节点),并以与本地相同的方式保存起来,实现实时同步。当本地文件系统出现故障时,远程主机上还会保存一份相同的数据,以供使用。
  原理:文件系统(ext2,DRBD挂载点)-> DRBD块设备(/dev/drbd1)-> 本地磁盘(/dev/ram0)和远程磁盘(/dev/ram1)(这里是ramdisk和drbd的联合使用)。

2. 安装:
  下载地址:www.drbd.org
  需要在本地主机(主节点)和远程主机(从节点)上都安装DRBD:
   tar zxvf drbd-8.0.4.tar.gz
   cd drbd-8.0.4
   make
   make install
  drbd.ko被安装到/lib/modules/$KERNELVERSION/kernel/drivers/block下;
  drbd相关工具(drbdadm,drbdsetup)被安装到/sbin/下;
  并会在/etc/init.d/下建立drbd启动脚本。

3. 配置:
  (1) 为本地和远程主机各选择一块使用的磁盘分区,这两个分区必须要大小相同。如:在这两台主机上都指定/dev/ram0为DRBD分区,大小都为1G。
  (2) 配置文件:/etc/drbd.conf。

            # 使用C语法,include其它模块配置
vim /etc/drbd.conf
                include "drbd.d/global_common.conf";
                include "drbd.d/*.res";

            # global和common模块设置全局、公用参数
            # common模块可以设置许多子模块,主要有net和syncer
vim /etc/drbd.d/global_common.conf
                global {
                        # 是否参加DRBD使用者统计
                        usage-count yes;
                        # minor-count dialog-refresh disable-ip-verification
                       }

                common {
                        # C协议表示收到远程主机的写入确认之后才返回
                        protocol C;
                        net {
                             # sndbuf-size rcvbuf-size timeout connect-int ping-int ping-timeout max-buffers
                             # max-epoch-size ko-count allow-two-primaries cram-hmac-alg shared-secret
                             # after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg no-tcp-cork
                             # 设置主从机之间通信使用的信息算法
                             cram-hmac-alg sha1;
                             shared-secret "FooFunFactory";
                            }

                        syncer {
                                # rate after al-extents use-rle cpu-mask verify-alg csums-alg
                                # 设置主从节点同步时的最大网络速率,单位是字节
                                rate 1M;
                               }
                        }

            # 一个DRBD设备(即:/dev/drbdX)称为一个"资源"(resource)
            # resource模块中设置了主从节点中的相关信息
vim /etc/drbd.d/r0.res

            # please have a a look at the example configuration file in
            # /usr/share/doc/drbd83/drbd.conf
            resource r0 {
                         # 每个主机以on开头,后面是主机名,{}中是其相关设置
                         on staging-012.test.com {
                             # /dev/drbd1使用的磁盘分区是/dev/ram0
                             device /dev/drbd1;
                             disk /dev/ram0;
                             # DRBD的监听端口,与远程节点通信
                             address 10.64.197.121:7788;
                             meta-disk internal;
                          }
                         on staging-013.test.com {
                             device /dev/drbd1;
                             disk /dev/ram0;
                             address 10.64.197.122:7788;
                             meta-disk internal;
                          }
                        }

      最后,将配置文件拷贝到主从节点上各一份。


4. 启动:
  (1) 在启动之前,需要分别在两台主机的/dev/ram0磁盘分区上创建供DRBD记录信息的数据块。 分别在主从节点上执行:
drbdadm create-md r0 (r0即是配置文件中定义的资源名称)
  (2) 分别在主从节点上启动服务:
/etc/init.d/drbd start
  (3) 在其中一台主机上设置主节点:
drbdsetup /dev/drbd1 primary -o
  (4) 主从节点会自动进行数据同步,可以分别对其同步状态进行查看:
cat /proc/drbd
   如果st:Primary/Secondary ds:UpToDate/UpToDate即是主从节点已经完成设置,而且数据处于同步状态。

5. 使用:
  (1) 挂载主节点的DRBD设备/dev/drbd1(磁盘分区/dev/ram0映射成DRBD设备/dev/drbd1),但是从节点的DRBD设备无法被挂载,它由DRBD操作,用以接收主节点数据:
mount /dev/drbd1 /mnt/drbd
  (2) 查看、测试挂载情况:
  在主节点上查看挂载状态,读写测试:
df -h
dd count=1k bs=1k if=/dev/zero of=/mnt/drbd/test.p_w_picpath
  在从节点上查看数据同步的情况:
  因为从节点DRBD设备未曾挂载,所以要先停掉DRBD服务,再挂载此设备以供查看。
/etc/init.d/drbd stop
mount /dev/ram0[因为停止了DRBD服务,磁盘分区不再是DRBD设备] /mnt/drbd
ls -l /mnt/drbd
  查看完,卸载、重启DRBD服务:
umount /mnt/drbd
  etc/init.d/drbd start

6. 主从节点切换:
  主要是将主节点的DRBD设备umount,然后设置其为从节点;将从节点设备为主节点,再将其DRBD设备mount上就行:
  (1) 主节点上操作:
  umount /mnt/drbd
  drbdadm secondary r0
  cat /proc/drbd
  (2) 从节点上操作:
 drbdadm primary r0
  mount /dev/drbd1 /mnt/drbd
  cat /proc/drbd