一、DRBD简介

Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。官网地址: http://www.drbd.org


二、基础知识

drbd--主从模式配置_第1张图片

1. 管理工具

drbdadm:高级管理工具,管理/etc/drbd.conf,向drbdsetup和drbdmeta发送指令
drbdsetup:配置装载进kernel的DRBD模块,平时很少直接用
drbdmeta:管理META数据结构,平时很少直接用


2. 资源

在DRBD中,资源是特指某复制的存储设备的所有方面。包括:

Resource name: 名字中不能有空格

DRBD device: 这个设备总是被命名为/dev/drbdn,n是镜像设备的编号,它的主设备号是147

Disk configuration: 使本地数据可以为DRBD所用

Network configuration: 与对方通信


3. 资源角色

⑴Primary(主): 主角色的DRBD设备可以不受限制的读和写,比如创建和映射文件系统、对于块设备的raw或直接IO访问。
⑵Secondary(备): 备角色的DRBD设备接受来自对方的所有修改,但是不能被应用程序读写,甚至只读也不行。


4. DRBD模式

单主模式:在单主模型下drbd可以使用任意的文件系统

双主模式:在双主模型下只能使用集群文件系统,常用的集群文件系统有oracle公司的OCFS和redhat公司的GFS


5. 数据同步模式

异步:protocol A本地已经写到磁盘了,并且同步数据已经被放到tcp缓冲区等待发送的队列中,这样就认为同步完成

半同步: protocol B,本地已经写到磁盘了,并且同步数据已经发送到对方内存缓冲区,对方已经确认收到数据,这样就认为同步完成

同步:protocol C,本地已经写到磁盘了,从服务器也写入完成了


三、安装DRBD

drbd共有两部分组成:内核模块和用户空间的管理工具。其中drbd内核模块代码已经整合进Linux内核2.6.33以后的版本中,因此,如果内核版本高于此版本的话,你只需要安装管理工具即可。

[root@ipvs ~]# uname -r
2.6.32-358.el6.x86_64    #redhat6.4内核是2.6.32版本的

准备:

[root@ipvs ~]# vim /etc/hosts
172.16.1.1      ipvs1.com ipvs1
172.16.1.2      ipvs2.com ipvs2


1. 安装drbd软件

[root@ipvs ~]# tar xf drbd-8.4.4.tar.gz
[root@ipvs ~]# cd drbd-8.4.4
[root@ipvs drbd-8.4.4]# ./configure --prefix=/usr/local/drbd  --with-km --sysconfdir=/etc/
[root@ipvs drbd-8.4.4]# make && make install   #安装完成
[root@ipvs drbd-8.4.4]# chkconfig --add drbd
[root@ipvs drbd-8.4.4]# chkconfig --list drbd    #设置开机自动启动
drbd            0:off   1:off   2:on    3:on    4:on    5:on    6:off


2. 完善安装

[root@ipvs ~]# vim /etc/profile
export PATH=$PATH:/usr/local/drbd/sbin/ #最后增加这一行
[root@ipvs ~]# . !$
[root@ipvs ~]# vim /etc/man.config
MANPATH /usr/local/drbd/share     #增加这一行
[root@ipvs ~]# cd drbd-8.4.4
[root@ipvs drbd-8.4.4]# cp scripts/drbd.conf.example /etc/drbd.d/resource.res
#将配置文件拷贝过去


3. 将drbd模块加载进内核

[root@ipvs ~]# modprobe drbd     #加载进内核
[root@ipvs ~]# lsmod | grep drbd
drbd                  340487  0
libcrc32c               1246  2 drbd,ip_vs
[root@ipvs ~]# modprobe -r drbd   #从内核中移除

4. 配置DRBD(需拷贝一份到另一个节点上

drbd的主配置文件为/etc/drbd.conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分,且都保存至/etc/drbd.d目录中

global {
        usage-count no;    #是否记录DRBD的使用次数
        # minor-count dialog-refresh disable-ip-verification
}
common {
        protocol C;
        handlers {
        }
        startup {
                wfc-timeout 120;
                degr-wfc-timeout 120;   #指定降级超时时间
        }
        disk {
                on-io-error detach;   #磁盘IO错误就拆除磁盘
                fencing resource-only;  #资源级别隔离
        }
        net {
              cram-hmac-alg "sha1";       #指定数据传输的校验算法为sha1
              shared-secret "tcnetadmin";   #指定共享密码
        }
}

global_common.conf中主要定义global段和common段,global段必须位于配置文件的最开始处,common段则用于定义被每一个资源默认继承的参数,可以在资源定义中使用的参数都可以在common段中定义。


5. 定义一个资源

[root@ipvs drbd.d]# vim resource.res
resource share {
  on ipvs1.com {
    device    /dev/drbd0;
    disk      /dev/sdb1;       #要先创建这个分区
    address   172.16.1.1:7789;
    meta-disk internal;
  }
  on ipvs2.com {
    device    /dev/drbd0;
    disk      /dev/sdb1;
    address   172.16.1.2:7789;
    meta-disk internal;
  }
}
[root@ipvs drbd.d]# scp resource.res root@ipvs2:/etc/drbd.d/
#并且把它直接拷贝到节点2上去


6. 初始化已定义的资源并启动服务(2个节点都做

[root@ipvs drbd.d]# drbdadm create-md share  #初始化share资源,share是个名字
[root@ipvs drbd.d]# service iptables stop
[root@ipvs drbd.d]# /etc/init.d/drbd start    #启动服务
[root@ipvs drbd.d]# drbdadm -- --overwrite-data-of-peer primary share
#将其中一个节点设置为Primary
[root@ipvs drbd.d]# watch -n 0.5 'drbd-overview'  #监视数据同步过程


7. 在当前的主节点上格式化文件系统并使用

[root@ipvs drbd.d]# mkfs.ext4 /dev/drbd0   #只有主节点可以格式化和挂载
[root@ipvs ~]# mount /dev/drbd0 /mnt/
[root@ipvs ~]# cp -a /etc /mnt/
[root@ipvs ~]# umount /mnt/
[root@ipvs ~]# drbdadm secondary share   #将这个节点置为备节点


8. 将另一个节点置为主节点并查看文件

[root@ipvs2 ~]# drbdadm primary share
[root@ipvs2 ~]# drbd-overview
  0:share/0  Connected Primary/Secondary UpToDate/UpToDate C r----- /mnt ext4 1020M 57M 911M 6%      
[root@ipvs2 ~]# mount /dev/drbd0 /mnt/
[root@ipvs2 ~]# cd /mnt/
[root@ipvs2 mnt]# ls
etc  lost+found
#在这个节点上成功看到文件