heartbeat+drbd+mysql 高可用方案~

  DRBD的英文全称为Distributed Replicated Block Device(分布式块设备复制),是linux内核的存储层中的一个分布式存储系统,可利用DRBD在两台linux服务器之前共享块设备、文件系统和数据,类似于一个网络RAID1的功能。

同步过程如下:

1)、在NODE1上写操作被提交,然后通过内核传给DRBD模块。

2)、DRBD发送写操作到NODE2。

3)、在NODE2上的DRBD发送写操作给本地磁盘。

4)、在NODE2上的DRBD向NODE1发送确认消息,确认已经接收到写操作并发送给本地磁盘。

5)、在NODE1上的DRBD发送写操作给本地磁盘。

6)、NODE1的内核回应写操作完成。

此同步过程还依赖于DRBD的3种同步协议:

 protocol A,写I/O到达本地磁盘和本地的TCP发送缓存区之后,返回操作成功。

 protocol B,写I/O到达本地磁盘和远程节点的缓存区之后,返回操作成功。

 protocol C, 写I/O到达本地磁盘和远程节点的磁盘之后,返回操作成功。

heartbeat+DRBD方案中IP信息:

 192.168.0.223(drbd1)        

 192.168.0.224(drbd2)

heartbeat使用的VIP:

 192.168.0.222

配置之前的准备

 1.设置hostname及解析

   hostname drbd1

   hostname drbd2

 2.编辑/etc/hosts文件,添加如下内容:

 192.168.0.223 drbd1

 192.168.0.224 drbd2

保证两台主机的hostname 能分别解析到两台机器内网IP。

DRBD的部署

  从官方网站下载源码包来编译或者直接yum来安装,这以Centos为例:

  通过yum安装DRBD服务:  

  yum -y install drbd83 kmod-drbd83(2.6.33及以上的内核不需要安装此模块包了)

  检查DRBD是否安装成功:

  [root@drbd1 ~]# modprobe -l |grep -i drbd

  /lib/modules/2.6.18-194.el5/weak-updates/drbd83/drbd.ko

  [root@drbd1 ~]# lsmod |grep drbd

  drbd                  300440  4

  安装成功之后,在/sbin下面有drbdadmin drbdmeta drbdsetup 以及/etc/init.d/drbd 启动本。

DRBD的配置

  drbd使用的分区最好一样,也可以使用LVM进行分区。

  这里给两台机器添加一个10G的分区给数据库使用。(添加分区简单,这里就不贴出来了!)

 [root@drbd1 ~]# cp /usr/share/doc/drbd83-8.3.13/drbd.conf /etc/drbd.conf

 [root@drbd1 ~]# cat /etc/drbd.conf 

# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

include "drbd.d/global_common.conf";

include "drbd.d/*.res";

 [root@drbd1 ~]# cat /etc/drbd.d/global_common.conf |grep -v "#"

global {

        usage-count no; #是否参加DRBD使用者统计,默认yes

}

common {

        protocol C;#使用DRBD的第三种协议。

        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";

        }

       startup {

                wfc-timeout 120;

                degr-wfc-timeout 120;

        }

        disk {

                on-io-error detach;

                fencing resource-only;

        }

        net {

                cram-hmac-alg "sha1"; 

                shared-secret "1111";

                #DRBD同步使用的验证方式和密码信息。

        }

        syncer {

                rate 200M;#同步时网络速率最大值,单位是字节。

        }

}

 

[root@drbd1 ~]# cat /etc/drbd.d/ha.res

resource r0 {

        on drbd1 {

                device /dev/drbd0;#挂载的设备名为drbd0

                disk /dev/sda5;#使用的磁盘分区为/dev/sda5

                address 192.168.0.223:7788;#设置DRBD的监听端口,用于与另一台机器通信。

                meta-disk internal; #DRBD的元数据存放方式

        }

        on drbd2 {

                device /dev/drbd0;

                disk /dev/sda5;

                address 192.168.0.224:7788;

                meta-disk internal;

        }

}

 上面的的文件分别放在drbd1和drbd2上。drbd.conf的配置参数很多,可以man drbd.conf来查看说  明。

DRBD的启动

 在启动DRBD服务之前,要在两台机器上/dev/sha5上创建DRBD元数据库信息。

[root@drbd1 ~]# drbdadm create-md r0

 分别在两台机器上执行,成功了会打印出successfully created.

 出现不成功时,需要使用如下命令覆盖文件系统中的设备块信息,操作时确认此分区数据已经备  份。

 dd if=/dev/zero of=/dev/sda5 bs=1M count=128

 执行完后,再次执行drbdadm create-md r0

 两台机器同时启动服务: [root@drbd1 ~]# /etc/init.d/drbd start

 设置primary节点 :[root@drbd1 ~]# drbdadm primary r0

 如果上一步不成功 则执行此命令把此节点设置为primary节点,从头开始同步:

 drbdadm -- --overwrite-date-of-peef primary r0

 此时DRBD完成,查看/proc/drbd

 [root@drbd1 ~]# cat /proc/drbd 

 version: 8.3.13 (api:88/proto:86-96)

 GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by  [email protected], 2012-05-07 11:56:36

 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

    ns:1744 nr:880 dw:2624 dr:39882 al:13 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

 从输出信息可知,磁盘状态都是UpToDate,表示数据同步完成。

 HA有时间在弄上来!

 

 

你可能感兴趣的:(drbd,分布式存储系统,分布式块设备复制)