废话不多说,现在开始:

 1.2台虚拟机,Centos6.5系统,系统配置啥的都一样,能互相ping 通。把它们称为A和B。

 2. A: server iptables stop

                    setenforce 1                 //先把这2台服务器的防火墙和SELINUX关闭。

            -------------------------------------------

            B: server iptables stop

                    setenforce 1                 //先把这2台服务器的防火墙和SELINUX关闭。

   3.  vim /etc/hosts

    192.168.1.170    drbd1.com

    192.168.1.171    drbd2.com        //这一步挺重要,统一主机名字,后面就看出来了。

   4.把2台虚拟机分别添加一块硬盘:

     fdisk -l /dev/sdb --->n-----> p---->1----->回车----->  w  保存。到现在为止,就可以了,不要急着格式化。

   5.  A  和 B 时间要同步一下

        # ntpdate -u asia.pool.ntp.org

目前为止,准备工作都准备好了,现在接下来迎接客人------DRBD。

       a.  安装依赖包(A和B都安装)

                 #yum install gcc gcc-c++ make glibc flex kernel-devel  kernel-headers

       b.   安装drbd包

                # wget http://oss.linbit.com/drbd/8.4/drbd-8.4.3.tar.gz

                # 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/`uname -r`      把你系统的内核安装好

                # 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/     把命令cp过去

                加载DRBD模块是否加载到内核

                    #modprobe   drbd

                查看DRB模块是否加载到内核:

                     #  lsmod|grep drbd       看一下是否有类似图片中的东西出现


                  Centos6.5 配置  DRBD8.4.3_CentOS6.5 配置DRBD8.4.

                到现在为止,完成一半了,接下来把配置文件配置一下就好了。

              #vim  /usr/local/drbd/etc/drbd.conf     打开这个文件以后,默认有红色的2行文字,不用管它,全部删除即可。我们重新配置它。这个文件里的内容,可以分成2个文件配置,也可以在一个文件里配置,我这里在一个文件里配置,功能相同,没有任何影响,完全可以。

               resource r0{         #资源名字为r0
                protocol C;            #使用DRBD第3种协议,表示远程主机的写入确认后,认为写入完成。
        startup { wfc-timeout 0; degr-wfc-timeout 120;}
        disk { on-io-error detach;}      #保证数据在不同步时不进行切换
        net{
          timeout 60;
          connect-int 10;
          ping-int 10;
          max-buffers 2048;
          max-epoch-size 2048;
        }
        syncer { rate 200M;}       #主用节点和备用节点同步时的网络速率最大值
        on drbd1.com{                #  drbd1.com是主机名,前面改过了,on 这个字母必须加
          device /dev/drbd0;      
          disk   /dev/sdb1;            #  /dev/drbd0  使用的磁盘分区是/dev/sdb1.
          address 192.168.1.170:7798;    #设置DRBD的监听端口
          meta-disk internal;                    #DRBD的元数据存放方式。
        }
        on drbd2.com{
          device /dev/drbd0;
          disk   /dev/sdb1;
          address 192.168.1.171:7798;
          meta-disk internal;
        }
        }

     现在配置完毕。

    1) 把drbd.conf 放到A 和B  的/usr/local/drbd/etc/底下,2台服务器的配置一模一样。

      启动DRBD:

       A:#   drbdadm create-md r0     (我写的这个命令绝对可以,还有一些其他命令和这个命令作用一样,别管别的命令了)

           #   drbdadm create-md r0     你没看错,执行2遍这个命令,第一遍是创建DRBD记录信息的数据块,第2遍是激活r0.

        B:#   drbdadm create-md r0    
           #   drbdadm create-md r0

     2)  A:service drbd start

           B:service drbd start   在2台服务器上分别执行这个命令,最好同时进行,我觉的同时进行非常重要!

      3)  cat   /proc/drbd     分别在A和B上执行这个命令,看是否和下面的一样,如果2台都是Secondary 就对了。红色代表是都是备用状态,紫色是数据不一致。

     

     drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@localhost.localdomain, 2016-01-12 22:16:34
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   Connected  Secondary/Secondary  Inconsistent/Inconsistent  C 


      4) 将A主机配置为主节点:

          A:  #  drbdsetup   /dev/drbd0  primary -- force 

         目前为止,分别在A和B上看一下状态。

       A服务器::   #  service drbd status

  drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@localhost.localdomain, 2016-01-12 22:16:34
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   Connected  Primary/Secondary  Inconsistent/Inconsistent  C

       B服务器:   #  service drbd status

    

drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@localhost.localdomain, 2016-01-12 22:16:34
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   Connected  Secondary/Primary Inconsistent/Inconsistent  C

ro在主从服务器上分别显示 Primary/Secondary和Secondary/Primary

ds显示UpToDate/UpToDate

A服务器上挂载DRBD

#  mkfs.ext4  /dev/drbd0

#  mount /dev/drbd0 /mnt


现在为止,全部OK


注意:Secondary节点上不允许对DRBD设备进行任何操作,包括只读。

      只有当Primary节点挂掉时,Secondary节点才能提升为Primary.

      DRBD(Distributed Replicated Block Device),相当于一个RAID1.2台服务器一台用于写,读数据,另一台负责复制。

          ro:   表示角色信息,第一次启动,两个drbd节点默认都是Secondary状态。

          ds:   表示磁盘信息 , “Inconsistent/Inconsistent”表示 “不一致/不一致”状态。

          ns:   表示网络发送的数据包信息。

          dw:   表示磁盘写信息

          dr:   表示磁盘读信息


模拟故障:

     A服务器故障,手动切换到B服务器

            A 服务器:  #  cd  /mnt

                       #  touch 111111

                       #  cd ..

                       # umount /mnt

                      # drbdsetup  /dev/drbd0 secondary   这里把drbd转换为secondary状态

           在实际生产环境中,若A服务器宕机了,B服务器的状态是  Secondary/Unknown,此时,直接对

           drbd进行提权操作即可。

            B服务器:    #  drbdsetup /dev/drbd0  primary

                        #  mount /dev/drbd0  /mnt

                        #  cd /mnt

                        #  touch 222222

                        #ls

                        111111    222222

                        #  service drbd status

             drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@localhost.localdomain, 2016-01-12 22:16:34
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   Connected  Primary/Secondary
UpToDate/UpToDate /mnt   ext4

这个时候手动切换就完成了。

如果想主从智能切换,实现高可用,就需要用到Heartbeat。

会在主端宕机的情况下,自动切换到从端,并把从端变为主端,并实现自动挂载。