Home > Database > Mysql Tutorial > body text

一步步构建基于DRBD的数据共享

WBOY
Release: 2016-06-07 17:12:14
Original
1053 people have browsed it

DRBD(Distributed Replocated Blocak Device)分布式的复制块设备 在内核为2.6.33之后的版本中,DRBD就被编译进内核了,所以DRB

DRBD(Distributed Replocated Blocak Device)分布式的复制块设备
在内核为2.6.33之后的版本中,DRBD就被编译进内核了,所以DRBD是在内核中工作的

下面我们就看看DRBD的工作流程图:

image

    当启用drbd功能,并将drbd设备挂载到本地之后,用户空间需要向磁盘上存数据的时候,当数据通过缓存时,drbd就将这些数据分成了两路,一路存储到本地的磁盘上,另一路通过本地的TCP/IP协议栈和网络将数据传输到另个开启drbd服务主机上,这个drbd主机接收数据并将数据存储到本地的drbd设备上,从而实现了数据的共享和同步,然而整个数据的同步过程都是在内核空间中进行的,所以对用户空间没有任何 影响

    drbd共有两部分组成:内核模块和用户空间的管理工具

  用户空间的管理工具:对内核中数据传输和共享的具体实施过程进行行为定义
  内核模块:依用户空间的管理工具的定义的方式来进行数据的传输和共享

Drbd的模型两种:

   单主节点:任何资源只能在主节点上进行读写操作,主节点的文件类型可以是任何的,只要是为高可用集群中的资源流转提供一个解决方案。

   双主节点:在任何时刻任意用户可以通过任意节点来进行读写操作,但是要结合集群文件系统来实现,所以要通过GFS或者OCFS2来实现其应用,只有在drbd的8.0版本之后才支持

 

下面我们就通过具体的配置过程来了解drbd各个部分的工作原理

配置前提:
1)本配置共有两个测试节点,分别node1.a.org和node2.a.org,相的IP地址分别为192.168.0.202和192.168.0.204;
2)node1和node2两个节点上各提供了一个大小相同的分区作为drbd设备;我们这里为在两个节点上均为/dev/sda5,大小为1G;

1、准备工作

保证两个节点的主机名称和对应的IP地址解析服务可以正常工作,且每个节点的主机名称需要跟"uname -n“命令的结果保持一致;因此,需要保证两个节点上的/etc/hosts文件均为下面的内容:
192.168.0.202 node1.a.org node1
192.168.0.204 node2.a.org node2

为了使得重新启动系统后仍能保持如上的主机名称,,还分别需要在各节点执行类似如下的命令:

node1: 

hostname node1.a.org 

 hostname node2.a.org 

2、安装软件包

drbd共有两部分组成:内核模块和用户空间的管理工具。其中drbd内核模块代码已经整合进Linux内核2.6.33以后的版本中,因此,如果您的内核版本高于此版本的话,你只需要安装管理工具即可;否则,您需要同时安装内核模块和管理工具两个软件包,并且此两者的版本号一定要保持对应。

我们这里选用最新的8.3的版本

下载完成后直接安装即可:

yum -y --nogpgcheck localinstall drbd83-8.3.8-1.el5.CentOS.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm

3、配置drbd

1)复制样例配置文件为即将使用的配置文件:

cp /usr/share/doc/drbd83-8.3.8/drbd.conf  /etc 

2)配置/etc/drbd.d/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 100M; 
        } 
}

 

 

3、定义一个资源/etc/drbd.d/web.res,内容如下:

  • resource web {    
  •     on node1.a.org {    
  •     device    /dev/drbd0;           ##定义drbd设备号    
  •     disk      /dev/sda5;               ## 定义drbd设备所使用的磁盘    
  •     address   192.168.0.202:7789;  ##此drbd设备监听的网络地址和端口    
  •     meta-disk internal;    
  •   }    
  •     on node2.a.org {    
  •     device    /dev/drbd0;       
  •     disk      /dev/sda5;    
  •     address   192.168.0.204:7789;    
  •     meta-disk internal;    
  •   }    
  • }   
  • 将这两个配置文件拷贝到node2上,以保证配置文件相同 

     

  • cd /etc/drbd.d  
  • scp web.res global_common.conf node2:/etc/drbd.d 
  • scp /etc/drbd.conf node2:/etc/  


  • 4、在两个节点上初始化已定义的资源并启动服务:

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

  • drbdadm create-md web 
  • 2)启动服务,在Node1和Node2上分别执行:

  • /etc/init.d/drbd start 
  • 3)查看启动状态:

  • cat /proc/drbd  
  • 也可以使用drbd-overview命令来查看:

  • drbd-overview 

  • 从上面的信息中可以看出此时两个节点均处于Secondary状态。于是,我们接下来需要将node1设置为Primary,在node1上执行如下命令:
    drbdsetup /dev/drbd0 primary –o

      注: 也可以在要设置为Primary的节点上使用如下命令来设置主节点:
         drbdadm -- --overwrite-data-of-peer primary web  这种方法更加标准
        (注:这两个设置primary节点的命令只在第一次使用,以后就可以直接使用drbdadm primary web)

    而后再次查看状态,可以发现数据同步过程已经开始:

  • drbd-overview  


  •     

    此时我们还可以使用如下命令动态的查看同步过程
    watch -n 1 'drbd-overview'
    当数据同步完成以后再次查看状态

  • drbd-overview 
  • 可以发现节点已经为实时状态,且节点已经有了主次:

    5、创建文件系统

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

  • mke2fs -j  /dev/drbd0  
  • mkdir /drbd   
  • mount /dev/drbd0 /drbd 
  • 6、切换Primary和Secondary节点

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

    我们先在drbd设备上存储个网页文件,而后在主从节点改变后查看node1的index.html文件是否复制到node2上

    node1:

        为了进行验证而设置的文件
    首先卸载drbd设备

  • umount /drbd 
  • 将其设定为从节点

  • drbdadm secondary web 
  • 查看状态:

    将node2设为primary

  • drbdadm primary web  

  • 查看状态: 
    drbd-overview

    状态显示node2已经成为从节点
    挂载drbd设备

  • mkdir /drbd   
  • mount /dev/drbd0 /mnt/drbd 
  • 查看文件是否存在

    linux

    Related labels:
    source:php.cn
    Statement of this Website
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
    Popular Tutorials
    More>
    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template