zoukankan      html  css  js  c++  java
  • 文件系统:drbd主备服务器文件同步

    一. DRBD介绍

    DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.当你将数据写入本地 
    文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中. 
    本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会 
    保留有一份相同的数据,可以继续使用.

    在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,
    切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了.
    DRBD的工作原理如下图: 

            +--------+
            |  文件系统 |
            +--------+
                 |
                 V
            +----------+
            |   块设备层  |
            | (/dev/drbd1) |
            +----------+
             |            |
             |            |
             V           V
       +----------+  +-----------+
       |  本地硬盘   |   | 远程主机硬盘 |
       | (/dev/hdb1)  |   | (/dev/hdb1)  |
       +----------+  +-----------+
    

    二. DRBD的安装

    从官方网站下载源码包: 

    www.drbd.org
    

    我们在Turbolinux10.5上使用drbd-8.0.4版.分别在两台主机上安装DRBD: 

    # tar jxf drbd-8.0.4.tar.gz
    # cd drbd-8.0.4
    # make
    # make install
    

    make install执行之后: 
    drbd.ko被安装到/lib/modules/$KernelVersion/kernel/drivers/block下. 
    drbd相关工具(drbdadm,drbdsetup)被安装到/sbin下. 
    并会在/etc/init.d/下建立drbd启动脚本.

    三. DRBD的配置

     

    1.DRBD使用的硬盘分区

    你需要为本地主机和远程主机,指定一个DRBD使用的硬盘分区.这两个分区的大小必须相同. 
    我们指定两台主机的/dev/hdb1分区作为DRBD的使用的分区.这两个分区大小都为300MB. 

    2.drbd.conf配置文件

    DRBD运行时,会读取一个配置文件/etc/drbd.conf.这个文件里描述了DRBD设备与硬盘分区的映射关系,
    和DRBD的一些配置参数. 
    下面是一个drbd.conf文件的简单示例: 
    <主机>Turbolinux 10.5操作系统,主机名为g105-1,IP地址为 10.0.1.2,DRBD分区为/dev/hdb1. 
    <备机>Turbolinux 10.5操作系统,主机名为g105-2,IP地址为 10.0.2.2,DRBD分区为/dev/hdb1. 

           # 是否参加DRBD使用者统计.默认是yes
           global { usage-count yes; }
           # 设置主备节点同步时的网络速率最大值,单位是字节.
           common { syncer { rate 1M; } }
           # 一个DRBD设备(即:/dev/drbdX),叫做一个"资源".里面包含一个DRBD设备的主备节点的
           # 相关信息.
           #
           resource r0 {
                # 使用协议C.表示收到远程主机的写入确认后,则认为写入完成.
                protocol C; 
                net {
                     # 设置主备机之间通信使用的信息算法.
                     cram-hmac-alg sha1;
                     shared-secret "FooFunFactory";
                }
                # 每个主机的说明以"on"开头,后面是主机名.在后面的{}中为这个主机的配置.
                on g105-1 {
                     # /dev/drbd1使用的磁盘分区是/dev/hdb1
                     device    /dev/drbd1;
                     disk      /dev/hdb1;
                     # 设置DRBD的监听端口,用于与另一台主机通信
                     address   10.0.1.2:7898;
                     meta-disk  internal;
                }
                on g105-2 {
                     device    /dev/drbd1;
                     disk      /dev/hdb1;
                     address   10.0.2.2:7898;
                     meta-disk  internal;
                }
           }
    

    然后将这个drbd.conf文件分别复制到两台主机的/etc目录下. 

    3.DRBD的启动

    在启动DRBD之前,你需要分别在两台主机的hdb1分区上,创建供DRBD记录信息的数据块.分别在
    两台主机上执行: 

    [root@g105-1 /]# drbdadm create-md r0
    [root@g105-2 /]# drbdadm create-md r0
    

    “r0”是我们在drbd.conf里定义的资源名称. 
    现在我们可以启动DRBD了,分别在两台主机上执行: 

    [root@g105-1 /]# /etc/init.d/drbd start
    [root@g105-2 /]# /etc/init.d/drbd start
    

    现在可以查看DRBD的状态,然后在g105-1主机上执行: 

    [root@g105-1 /]# cat /proc/drbd
    version: 8.0.4 (api:86/proto:86)
    SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:22:30
    
     1: cs:Connected st: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
            resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
            act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0
    

    ”/proc/drbd”中显示了drbd当前的状态.第一行的st表示两台主机的状态,都是”备机”状态.
    ds是磁盘状态,都是”不一致”状态. 
    这是由于,DRBD无法判断哪一方为主机,以哪一方的磁盘数据作为标准数据.所以,我们需要初始化 
    一个主机.在g105-1上执行: 

    [root@g105-1 /]# drbdsetup /dev/drbd1 primary -o
    

    现在再看一个g105-1上的DRBD状态: 

    [root@g105-1 /]# cat /proc/drbd
    version: 8.0.4 (api:86/proto:86)
    SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:22:30
    
     1: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
        ns:42688 nr:0 dw:0 dr:42688 al:0 bm:2 lo:4 pe:0 ua:4 ap:0
            [==>.................] sync'ed: 14.7% (262464/305152)K
            finish: 0:02:58 speed: 1,440 (1,292) K/sec
            resync: used:1/31 hits:2669 misses:3 starving:0 dirty:0 changed:3
            act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0
    

    主备机状态分别是”主/备”,主机磁盘状态是”实时”,备机状态是”不一致”. 
    在第3行,可以看到数据正在同步中,即主机正在将磁盘上的数据,传递到备机上.现在的进度是14.7%.
    现在看一下g105-2上面的DRBD状态. 

    [root@g105-2 /]# cat /proc/drbd
    version: 8.0.4 (api:86/proto:86)
    SVN Revision: 2947 build by root@g105-2, 2007-07-28 07:13:14
    
     1: cs:SyncTarget st:Secondary/Primary ds:Inconsistent/UpToDate C r---
        ns:0 nr:56608 dw:56608 dr:0 al:0 bm:3 lo:0 pe:0 ua:0 ap:0
            [===>................] sync'ed: 20.0% (248544/305152)K
            finish: 0:02:57 speed: 1,368 (1,284) K/sec
            resync: used:0/31 hits:3534 misses:4 starving:0 dirty:0 changed:4
            act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0
    

    稍等一会,在数据同步完后,再查看一下g105-1的DRBD状态: 

    [root@g105-1 /]# cat /proc/drbd
    version: 8.0.4 (api:86/proto:86)
    SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:22:30
    
     1: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
        ns:305152 nr:0 dw:0 dr:305152 al:0 bm:19 lo:0 pe:0 ua:0 ap:0
            resync: used:0/31 hits:19053 misses:19 starving:0 dirty:0 changed:19
            act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0
    
    

    磁盘状态都是”实时”,表示数据同步完成了.

    4.使用DRBD

    你现在可以把主机上的DRBD设备挂载到一个目录上进行使用.备机的DRBD设备无法被挂载,因为它是
    用来接收主机数据的,由DRBD负责操作. 
    在g105-1上执行: 

    [root@g105-1 /]# mount /dev/drbd1 /mnt/drbd1
    [root@g105-1 /]# df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/hda3             9.3G  6.5G  2.4G  73% /
    /dev/hda1              99M  9.3M   85M  10% /boot
    none                  249M     0  249M   0% /dev/shm
    /dev/drbd1            289M   11M  264M   4% /mnt/drbd1
    

    现在,我们在drbd1目录里建立一个200M的文件: 

    [root@g105-1 /]# dd if=/dev/zero of=/mnt/drbd1/tempfile1.tmp bs=104857600 count=2
    

    操作完成后,在g105-2(备机)上执行: 
    我们先停止DRBD 

    [root@g105-2 /]# /etc/init.d/drbd stop
    

    现在,我们可以将hdb1进行挂载 

    [root@g105-2 /]# mount /dev/hdb1 /mnt/drbd1
    [root@g105-2 /]# ls /mnt/drbd1 -hl
    total 201M
    drwx------  2 root root  12K Jul 28 23:44 lost+found
    -rw-r--r--  1 root root 200M Jul 29 00:20 tempfile1.tmp
    [root@g105-2 /]# umount /mnt/drbd1
    

    可以看到,在主机g105-1上产生的文件tmpfile1.tmp,也完整的保存在备机g105-2的DRBD分区上. 
    这就是DRBD的网络RAID-1功能. 在主机上的任何操作,都会被同步到备机的相应磁盘分区上,达到数据备份的效果.

    5.DRBD的主备机切换

    有时,你需要将DRBD的主备机互换一下.可以执行下面的操作: 
    在主机上,先要卸载掉DRBD设备. 

    [root@g105-1 /]# umount /mnt/drbd1
    

    将主机降级为”备机”. 

    [root@g105-1 /]# drbdadm secondary r0
    [root@g105-1 /]# cat /proc/drbd
    version: 8.0.4 (api:86/proto:86)
    SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:13:14
    
     1: cs:Connected st:Secondary/Secondary ds:UpToDate/UpToDate C r---
        ns:0 nr:5 dw:5 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
            resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
            act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0
    

    现在,两台主机都是”备机”. 
    在备机g105-2上,将它升级为”主机”. 

    [root@g105-2 /]# drbdadm primary r0
    [root@g105-2 /]# cat /proc/drbd
    version: 8.0.4 (api:86/proto:86)
    SVN Revision: 2947 build by root@g105-2, 2007-07-28 07:13:14
    
     1: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
        ns:0 nr:5 dw:5 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
            resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
            act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0
    

    现在,g105-2成为了”主机”.你可以把它的/dev/drbd1进行挂载和使用了.同样,数据会被同步到
    g105-1上面. 

     
     
  • 相关阅读:
    python,os操作文件,文件路径(上一级目录)
    python屏幕的交互(读取输出信息)input,raw_input的区别
    Shell script 传参数处理(默认变量)
    python 2.4 的字符串转时间(日期减法取间隔时间)
    java的hashcode(结合hashset讲解)
    μCOS-II系统之事件(event)的使用规则及Semaphore的相互排斥量使用方法
    HDU 1079 Calendar Game (博弈论-sg)
    flume MemoryChannel 源代码解析
    MySQL查询时强制区分大写和小写
    蓝桥杯——真题训练之李白打酒
  • 原文地址:https://www.cnblogs.com/sandea/p/5095898.html
Copyright © 2011-2022 走看看