首页 > 其他 > 详细

高可用集群(HA)之DRBD原理和基础配置

时间:2014-03-09 05:20:57      阅读:633      评论:0      收藏:0      [点我收藏+]
工作原理图-->

bubuko.com,布布扣
目的-->
解决共享存储问题

工作原理-->
提供两个大小相同的分区,在数据流的层次上构建一个磁盘镜像,就如同raid1,所以又被称为分布式raid
bubuko.com,布布扣主从架构:primary/secondary
默认结构,两节点的所有存储属性,内容皆相同;
同一时刻只能有一个节点上线(即从节点,读写皆不可),主节点接到数据后,将数据备份到磁盘,同时传递给从节点,并存放到磁盘中.
bubuko.com,布布扣双主模型:
组内节点皆上线;
节点必须为集群文件系统;
必须支持分布式文件锁(内核支持),主节点写入的时候,从节点就从文件锁得知对方在写入;
高可用集群的底层文件信息通道(必须将DRDB做成集群资源).

bubuko.com,布布扣因为drdb工作在内核,故需要用户空间工具提供规则,所以它由用户空间工具和内核模块组成,就如同iptables和LVS一样.

用户空间工具-->告知内核哪个分区是drdb设备

drdbadm    /etc/drdb.d/
    |__ drdbadm primary resource_name    升级为主节点
    |__ drdbadm secondary resource_name    降级为备节点

drdbsetup
drdbmeta

查看drdb状态,有两种方法
cat /proc/drdb
drdb-overview

工作模式-->DRDB有三种工作模式告知上层进程写入完成:A异步,B半同步,C同步

A模式:主节点接到数据,只保证发送到本地网卡的数据缓冲区
(性能最好)
B模式:主节点接到数据,保证数据发送到从节点缓冲区,且存到了从节点的内核区,但是是否数据存储到从节点的硬盘,则不清楚
C模式:主节点接到数据,保证数据发送到从节点缓冲区,同时接到从节点存到从节点硬盘的信息
(安全最高)


如何解决故障后自动切换-->

利用高可用的底层信息通道(如HA的heartbeat或者corosync)+pacemaker进行资源监控,将drdb定义为资源,且drdb资源有主从之分.

所需的软件包-->drdb在红帽中并没有编译,故而需要自己制作或者采用第三方rpm包

bubuko.com,布布扣一定要使用与内核相匹配的包
rhel6:官方不提供,由第三方提供
drdb-kmdl(内核空间)和drdb(用户空间)
rhel5:
kmod-drdb(内核空间)和drdb(用户空间)

配置-->分段式配置

drdb_resource组成: resource_name device disk network
global{}基本没意义的配置
common{}定义drdb设备共享的属性信息(磁盘信息,网络信息,认证信息),可能存在多组drdb设备,每组包含一个主从
剩余配置信息是不同的属性
bubuko.com,布布扣每一组drdb叫做drdb资源(资源名必须是小写字符),并以文件形式存放在/etc/drdb.d/资源名.res,资源之间以套接字方式互相通信
bubuko.com,布布扣每一组drdb,主从所在的磁盘分区必须大小相等

详细配置过程-->

提供两个分区-->大小相同

配置通用属性信息-->/etc/drbd.d/global-common.conf
global {
        usage-count no;
        #是否给官方发送统计报告,这个不用说,还是关了吧
        # minor-count dialog-refresh disable-ip-verification
}

#定义drdb节点的共同点属性
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;
        }
}

定义一个资源-->/etc/drbd.d/web.res
resource web {
  on node1.magedu.com {
    device    /dev/drbd0;
    disk      /dev/sda5;
    address   172.16.100.15:7789;
    meta-disk internal;
  }
  on node2.magedu.com {
    device    /dev/drbd0;
    disk      /dev/sda5;
    address   172.16.100.16:7789;
    meta-disk internal;
  }
}
bubuko.com,布布扣以上文件在两个节点上必须相同,因此,可以基于ssh将刚才配置的文件全部同步至另外一个节点。
# scp  /etc/drbd.d/*  node2:/etc/drbd.d/

在两个节点上初始化已定义的资源并启动服务-->
1)初始化资源,在Node1和Node2上分别执行:
# drbdadm create-md web

2)启动服务,在Node1和Node2上分别执行:
#/etc/init.d/drbd start

3)查看启动状态:
# watch -nl "cat /proc/drbd"
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:505964
也可以使用drbd-overview命令来查看:
# drbd-overview 
  0:web  Connected Secondary/Secondary Inconsistent/Inconsistent C r---- 

设置主节点-->从上面的信息中可以看出此时两个节点均处于Secondary状态。于是,我们接下来需要将其中一个节点设置为Primary。在要设置为Primary的节点上执行如下命令
# drbdadm primary --force web
bubuko.com,布布扣也可以在要设置为Primary的节点上使用如下命令来设置主节点:
     # drbdadm -- --overwrite-data-of-peer primary web

而后再次查看状态,可以发现数据同步过程已经开始:
# drbd-overview 
  0:web  SyncSource Primary/Secondary UpToDate/Inconsistent C r---- 
    [============>.......] sync‘ed: 66.2% (172140/505964)K delay_probe: 35
    
等数据同步完成以后再次查看状态,可以发现节点已经牌实时状态,且节点已经有了主次:
# drbd-overview 
  0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- 

创建文件系统-->文件系统的挂载[只能在Primary节点]进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化
# mke2fs -j -L DRBD /dev/drbd0
# mkdir /mnt/drbd 
# mount /dev/drbd0 /mnt/drbd

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

Node1:复制测试文件到挂载点,并将其下线
# cp -r /etc/drbd.* /mnt/drbd  
# umount /mnt/drbd
# drbdadm secondary web    --降级(下线)

查看状态:
# drbd-overview 
  0:web  Connected Secondary/Secondary UpToDate/UpToDate C r---- 

Node2:将其上线,查看是否有文件存在
# drbdadm primary web    --升级(上线)
# drbd-overview 
  0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- 
# mkdir /mnt/drbd
# mount /dev/drbd0 /mnt/drbd

使用下面的命令查看在此前在主节点上复制至此设备的文件是否存在:
# ls /mnt/drbd






高可用集群(HA)之DRBD原理和基础配置,布布扣,bubuko.com

高可用集群(HA)之DRBD原理和基础配置

原文:http://www.cnblogs.com/aaa103439/p/3588459.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!