DRBD+Corosync+pacemaker+mysql 高可用集群搭建
DRBD
Distrubuted Replicated Block Device 分布式复制块设备
与ipvs和iptables类似 DRBD功能是在内核中完成DRDB
需要在用户空间定义磁盘设备为DRDB设备 drdbadm
一般数据写入磁盘的过程:Service--> Fs--> BufferCache-->Disk Schedule--> Disk Driver--> DiskStorage
DRDB设备写入过程Service--> Fs--> BufferCache-->DRDB-->Disk Schedule--> Disk Driver--> DiskStorage
|__>TCP/IP -->NIC Driver-->slave NIC Driver-->TCP/IP-->DRDB-->Disk Schedule--> Disk Driver--> DiskStorage
可见DRDB设备中的数据写入是分为两路:一路写入本地磁盘内 一路通过DRDB功能写入从服务器中
DRDB有主从和主主两种构建方式
master/master:
cluster filesystem: GFS2 OCFS2(自带的有HA功能 下两步就不需要)
HA
dlm 分布式锁管理 作为HA的ra来使用
master/slave
master可对DRDB磁盘读写和挂载 slave不能对DRDB磁盘读写和挂载
复制模型:
Protocol A 异步复制协议
主节点一旦写入完成,数据被发往本地TCP/IP缓存就宣告完成
Protocol B 半同步
内存同步,一旦数据发往本地磁盘开始写,并发往对方的接受缓冲区中即宣告完成
Protocol C 同步复制协议
数据发往本地磁盘,并发往了对方的磁盘中 宣告完成
因为在2.6.18可内核中没有DRBD模块,需要打补丁并重新编译内核添加DRBD模块后才能使用,这里也可以使用kmod-drbd83包直接添加DRBD模块
通过安装drbd的rpm包用户可使用drbdadm命令管理DRBD设备,
目前在用的drbd版本主要有8.0、8.2和8.3三个版本,其对应的rpm包的名字分别为drbd, drbd82和drbd83,对应的内核模块的名字分别为kmod-drbd,
kmod-drbd82和kmod-drbd83。各版本的功能和配置等略有差异;我们实验所用的平台为x86且系统为rhel5.4,因此需要同时安装内核模块和管理工具。
我们这里选用最新的8.3的版本(drbd83-8.3.8-1.el5.CentOS.i386.rpm和kmod-drbd83-8.3.8-1.el5.centos.i686.rpm),下载地址为:http://mirrors.sohu.com/centos/5.6/extras/i386/RPMS/。
1)本配置共有两个测试节点,分别node1.magedu.com和node2.magedu.com,相的IP地址分别为172.16.21.11和172.16.21.12;
2)node1和node2两个节点上各提供了一个大小相同的分区作为drbd设备;我们这里为在两个节点上均为/dev/sda5,大小为2G;
3)系统为rhel5.4,x86平台;
软件安装(两个节点都要安装)
#rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
drbdadm 的配置文件是分为两段
/etc/drbd.conf
为了管理的便捷性,目前通常会将些配置文件分成多个部分,且都保存至/etc/drbd.d目录中,
主配置文件中仅使用"include"指令将这些配置文件片断整合起来。
/etc/drbd.d/* 包含有global_common.conf 和.res结尾的文件
global_common.conf是全局配置文件主要定义global段和common段
global段仅能出现一次,且如果所有的配置信息都保存至同一个配置文件中而不分开为多个文件的话,global段必须位于配置文件的最开始处。
目前global段中可以定义的参数仅有minor-count, dialog-refresh, disable-ip-verification和usage-count。
common段则用于定义被每一个资源默认继承的参数,可以在资源定义中使用的参数都可以在common段中定义。实际应用中,common段并非必须,但建议将多个资源共享的参数定义为common段中的参数以降低配置文件的复杂度。
而每一个.res的文件用于定义一个资源。
这里有一个配置样例;
1)复制样例配置文件为即将使用的配置文件
cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc
2)配置/etc/drbd.d/golbal-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 1000M;
- }
- }