drbd安装配置&&脑裂的处理办法

来源:互联网 发布:centos python3 编辑:程序博客网 时间:2024/04/30 13:55
Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。

  数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)

  DRBD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃。

  DRBD的位置处于文件系统以下,比文件系统更加靠近操作系统内核及IO栈。

  工具:

  drbdadm:高级管理工具,管理/etc/nf,向drbdsetup和drbdmeta发送指令,

  drbdsetup:配置装载进kernel的DRBD模块,平时很少直接用

  drbdmeta:管理META数据结构,平时很少直接用。

  在DRBD中,资源是特指某复制的存储设备的所有方面。包括资源名称、DRBD设备(/dev/drbdm,这里m是设备最小号,最大号可到147)、磁盘配置(使本地数据可以为DRBD所用)、网络配置(与对方通信)

  每个资源有个角色,是Primary或Secondary,下面简称“主”和“备”

  主角色的DRBD设备可以不受限制的读和写,比如创建和映射文件系统、对于块设备的raw或直接IO访问。

  备角色的DRBD设备接受来自对方的所有修改,但是不能被应用程序读写,甚至只读也不行。

  角色可以改变。

  DRBD 是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。您可以把它看作是一种网络RAID;Drbd 负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。

  原理:

  每个设备(drbd
提供了不止一个设备)都有一个状态,可能是‘主’状态或‘辅助’状态。在带有主要设备的节点上,应用程序应能运行和访问设  
备(/dev/nbX)。每次写入都会发往本地低层设备和带有‘辅助’状态设备的节点中。次要设备只能简单地把数据写入它的低层块设备上。
   读取数据通常在本地进行。
       如果主节点发生故障,心跳将会把辅助设备转换到主状态,并启动其上的应用程序。(如果您将它和无日志FS 一起使用,则需要运行fsck)。
   如果发生故障的节点恢复工作,它就会成为新的辅助节点,而且必须使自己的内容与主节点的内容保持同步。当然,这些操作不会干扰到后台的服务。

  环境:centos6.0  修改hosts

  node1:192.168.182.128  

  node2:192.168.182.131

  每个node都一个空白的分区(不创建任何分区)或新增的disk;本文是新增的一个disk(8G)

  1、yum -y install gcc kernel-devel kernel-headers flex

  

  2、下载drbd  wget

  安装drbd;

  tar zxvf drbd-8.4.3.tar.gz

  cd drbd-8.4.3

  ./configure --prefix=/usr/local/drbd --with-km

  make KDIR=/usr/src/kernels/2.6.32-71.el6.i686/

  make install

  mkdir -p /usr/local/drbd/var/run/drbd

  cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d

  chkconfig --add drbd

  chkconfig drbd on

  

  安装drbd模块:

  cd drbd

  #make clean

  #make KDIR=/usr/src/kernels/2.6.32-71.el6.i686/

  cp drbd.ko /lib/modules/`uname -r`/kernel/lib/

  depmod

  modprobe drbd

  

  1、到此两台机器的drbd安装完毕;开始config

  node1:

  cd /usr/local/drbd/etc/drbd.d

  mv nf nf.bak

  vim nf

  global    {
   usage-count    yes;  #是否参加DRBD使用者统计,默认yes
   }
   common    {
   net    {
      protocol    C;  #使用drbd的第三种同步协议,表示收到远程主机的写入确认后,则认为写入完成.
   }
   }

  vim r0.res

  resource    r0    {
       on node1    {   #每个主机的说明以on开头,后面是hostname
       device    /dev/drbd1;   drbd设备名
       disk    /dev/sdb1;  #/dev/drbd1使用的磁盘分区是/dev/sdb1。
       address    192.168.182.128:7789;    #设置DRBD的监听端口,用于与另一台主机通信。
       meta-disk    internal;
   }
       on node2    {
       device    /dev/drbd1;
       disk    /dev/sdb1;
       address    192.168.182.131:7789;
       meta-disk    internal;
   }
}

  将上面这个配置文件分别复制到两台主机的/etc/drbd.d目录下。nf的配置参数很多,有兴趣的话可以使用命令:man nf来查看了解更多的参数说明;

  2、 启动DRBD

  在两个节点执行
在启动DRBD之前,你需要分别在两台主机的sdb1分区上,创建供DRBD记录信息的数据块.分别在两台主机上执行:
[root@Centos ~]# drbdadm create-md r0 或者执行drbdadm create-md all
[root@Centos ~]# drbdadm create-md r0
在两个节点启动服务
[root@Centos ~]#/etc/init.d/drbd start
[root@Centos ~]#/etc/init.d/drbd start
最好同时启动
在任意节点查看节点状态

  

  对输出的含义解释如下:
ro表示角色信息,第一次启动drbd时,两个drbd节点默认都处于Secondary状态,
ds是磁盘状态信息,“Inconsistent/Inconsisten”,即为“不一致/不一致”状态,表示两个节点的磁盘数据处于不一致状态。“UpToDate/UpToDate”。即为“实时/实时”状态了。
Ns表示网络发送的数据包信息。
Dw是磁盘写信息
Dr是磁盘读信息

  设置主节点
由于默认没有主次节点之分,因而需要设置两个主机的主次节点,选择需要设置为主节点的主机,然后执行如下命令:
[root@Centos ~]#drbdsetup /dev/drbd1 primary --o
或者执行下面命令也是可以的
[root@Centos ~]#drbdadm -- --overwrite-data-of-peer primary all
第一次执行完此命令后,在后面如果需要设置哪个是主节点时,就可以使用另外一个命令:

  drbdadm primary r0或者drbdadm primary all

  执行此命令后,开始同步两台机器对应磁盘的数据

  

  从输出可知:
   “ro状态现在变为“Primary/Secondary”,“ds”状态也变为“UpToDate/Inconsistent”,也就是“实时/不一致”状态,现在数据正在主备两个主机的磁盘间进行同步,且同步进度为8.4%,同步速度每秒10M左右。
等待片刻,再次查看同步状态,输出如下:

  

  可以看到同步完成了,并且“ds“状态也变为“UpToDate/UpToDate”了。即为“实时/实时”状态了。

  格式化disk

  mkfs.ext4 /dev/drbd1

  

  接下了就可以mount 使用了

  

  现在来说,只是我们在主节点写入,另一个节点的数据就同步了,我们来测试下,我往里面拖拉一个2.8G的iso;

  

  现在我查看node2的disk里面有没有;进行drbd主备间的切换;

  首先;

  [root@Centos ~]#umount /mnt
[root@Centos ~]# drbdadm secondary r0

  在另外一个Node1:

  [root@Centos ~]# drbdadm primary r0

  [root@Centos ~]# mount /dev/drbd1 /mnt/

  

  事实证明是ok的;

  另外一种非正常的切换,比如主节点的drbd挂掉了;

  [root@Centos ~]# /etc/init.d/drbd stop

  这些主节点的drbd级别自动secondary了;无需再操作降级

  在另一台机器:

  [root@Centos ~]# drbdadm primary r0

  

  如果报错:
2: State change failed: (-7) Refusing to be Primary while peer is not outdated
Command 'drbdsetup 2 primary' terminated with exit code 11
因此,必须在备用节点执行如下命令:
[root@Centos ~]# drbdsetup /dev/drbd0 primary --o
或者
[root@Centos ~]# drbdadm -- --overwrite-data-of-peer primary all
此时就可以正常切换了。
当在备用节点执行切换到主节点命令后,原来的主用节点自动变为备用节点。无需在主用节点再次执行切换到备用节点的命令。

  当你在备用节点写入数据了,然后主节点起来,/etc/init.d/drbd start

  

  发现在同步数据,所以可以随时写入,都保持sync

  Ps:

  1、当用两个分区的时候,如果不能create-md可以先dd下

  dd if=/dev/zero of=/dev/sd[a-z]n bs=1M count=n;

  脑裂修复:

  在一台机器重启后出现了脑裂现象;node2和node1都unkown状况了,node2启动drbd异常

  

  

  

  下面先将node2进行了primary

  1.   在drbd2处理方法:

  2.   [root@drbd2 /]# drbdadm disconnect r0

  3.   [root@drbd2 /]# drbdadm secondary r0

  4.   [root@drbd2 /]# drbdadm -- --discard-my-data connect r0

  #该命令告诉drbd,secondary上的数据不正确,以primary上的数据为准。

  1.   需要在drbd1上重连接资源:

  2.   [root@drbd1 ~]# drbdadm connect fs

  再次启动drbd2上的drbd服务,OK

  这样drbd1就能和drbd2开始连接上了,并且保证数据不会丢失:

  如果异常connect,可以先disconnect下。然后发现启动也正常了

1 0
原创粉丝点击