目录

    6.测试

1.工作原理图-->


目的-->
解决共享存储问题

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

因为drbd工作在内核,故需要用户空间工具提供规则,所以它由用户空间工具和内核模块组成,就如同iptables和LVS一样.
不支持多个从,至少当前不支持

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

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

drbdsetup
drbdmeta

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

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

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



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

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

一定要使用与内核相匹配的包(google或者rpmfind搜索)
rhel6:官方不提供,由第三方提供
drbd-kmdl(内核空间)和drbd(用户空间)
rhel5:
kmod-drbd(内核空间)和drbd(用户空间)

6.配置-->分段式配置

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

7.详细配置过程-->一个共享区域资源的例子

前提准备:提供两个大小相同的磁盘或者磁盘分区空间

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

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


7-2.定义一个资源-->/etc/drbd.d/mysql.res
resource mysql {
  on node1 {
    device    /dev/drbd0;
    disk      /dev/sdc5;
    address   172.16.100.15:7789;
    #internal表示将drbd自己的源数据放在drbd资源磁盘空间中
    meta-disk internal;
  }
  on node2 {
    device    /dev/drbd0;
    disk      /dev/sdc5;
    address   172.16.100.16:7789;
    meta-disk internal;
  }
}

以上文件在两个节点上必须相同,因此,可以基于ssh将刚才配置的文件全部同步至另外一个节点。
# scp  /etc/drbd.d/*  node2:/etc/drbd.d/


1)初始化资源,在Node1和Node2上分别执行:
# drbdadm create-md mysql
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.

此处可能会报 Command 'drbdmeta 0 v08 /dev/sdc5 internal create-md' terminated with exit code 40 错误,解决办法:首先看提示命令中的磁盘是否是你配置文件中的磁盘,如果不是,说明生效的配置文件不是你所认为的那个,其次,如果是,说明配置文件没错,那么可以使用dd命令往对应磁盘中输入些数据,此处磁盘分区是sdc5,故命令如下:dd if=/dev/zero of=/dev/sdc5 bs=100M count=1
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:mysql  Connected Secondary/Secondary Inconsistent/Inconsistent C r---- 


7-4.设置主节点-->从上面的信息中可以看出此时两个节点均处于Secondary状态。于是,我们接下来需要将其中一个节点设置为Primary。在要设置为Primary的节点上执行如下命令
# drbdadm primary --force mysql

也可以在要设置为Primary的节点上使用如下命令来设置主节点:
     # drbdadm  --overwrite-data-of-peer primary mysql
而后再次查看状态,可以发现数据同步过程已经开始:
# drbd-overview 
  0:mysql  SyncSource Primary/Secondary UpToDate/Inconsistent C r---- 
    [============>.......] sync'ed: 66.2% (172140/505964)K delay_probe: 35

    
等数据同步完成以后再次查看状态,可以发现节点已经牌实时状态,且节点已经有了主次:
# drbd-overview 
  0:mysql  Connected Primary/Secondary UpToDate/UpToDate C r---- 


需要注意的是,只需要在主节点上进行格式化,且只能在主节点上挂载,若主节点下线,从节点上线,则从节点可以直接挂载,不需要再次格式化.
# mke2fs -t ext4 -L DRBD /dev/drbd0
# mkdir /mydata
# mount /dev/drbd0 /mydata


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

Node1:创建测试文件到挂载点,并将其下线
# cd /mydata 
# vi test
# date >> test
# cat test
  Thu Mar 13 17:00:18 CST 2014
# cd .. && umount /test 
# drbdadm secondary mysql    --降级(下线)

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


Node2:将其上线,查看是否有文件存在
# drbdadm primary mysql    --升级(上线)
# drbd-overview 
  0:mysql  Connected Primary/Secondary UpToDate/UpToDate C r---- 
# mkdir /mydata
# mount /dev/drbd0 /mydata
# ls /mydata
  lost+found  test
# cat test
  Thu Mar 13 17:00:18 CST 2014


7-7.问题-->
问题描述:设备被其他人占用,无法停止或者下线资源
0: State change failed: (-12) Device is held open by someone
解决办法:查看是否设备挂载,umount即可
问题描述:0:mydrbd WFConnection Primary/Unknown UpToDate/DUnknown C r-----,即总有一个节点是未知状态
解决办法:
主节点上执行:
drbdadm connect all
从节点上执行:
drbdadm -- --discard-my-data connect all



高可用集群(HA)之DRBD原理和基础配置的更多相关文章

  1. 高可用集群(HA)之Keeplived原理+配置过程

    原理--> 通过vrrp协议,定义虚拟路由,在多个服务节点上进行转移. 通过节点优先级,将初始虚拟路由到优先级高的节点上,checker工作进程检测到主节点出问题时,则降低此节点优先级,从而实现 ...

  2. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

    No cross,no crown . 不经历风雨,怎么见彩虹. Redis哨兵模式,用现在流行的话可以说就是一个"哨兵机器人",给"哨兵机器人"进行相应的配置 ...

  3. linux高可用集群(HA)原理详解(转载)

    一.什么是高可用集群 高可用集群就是当某一个节点或服务器发生故障时,另一个 节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务.高可用 ...

  4. linux高可用集群(HA)原理详解

    高可用集群 一.什么是高可用集群 高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服 ...

  5. (四)FastDFS 高可用集群架构学习---后期运维--基础知识及常用命令

    1.fastdfs 七种状态 FDFS_STORAGE_STATUS:INIT :初始化,尚未得到同步已有数据的源服务器 FDFS_STORAGE_STATUS:WAIT_SYNC :等待同步,已得到 ...

  6. corosync+pacemaker and drbd实现mysql高可用集群

    DRBD:Distributed Replicated Block Device 分布式复制块设备,原理图如下 DRBD 有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的 ...

  7. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...

  8. Hadoop部署方式-高可用集群部署(High Availability)

    版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的高可用集群是建立在完全分布式基础之上的,详情请参考:https://www.cnblogs.com/yinzhengjie/p/90651 ...

  9. LVS+Keepalived-DR模式负载均衡高可用集群

    LVS+Keepalived DR模式负载均衡+高可用集群架构图 工作原理: Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能. VRRP,虚拟路由冗余协议,是针对路由器的 ...

随机推荐

  1. ng-bind-html 的使用

    AngualrJS 提供了指令ng-bind-html 用于绑定包含HTML标签的文档,使用方式: <ANY ng-bind-html=""> ... </ANY ...

  2. scaletype

    http://www.myexception.cn/image/726203.html 图片说明Andorid中ImageView的不同属性ScaleType的区别 ImageView是Android ...

  3. The end of other

    The end of other For language training our Robots want to learn about suffixes. In this task, you ar ...

  4. centos 6.4 更新源地址

    执行如下命令: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.old vim /etc/yum.repo ...

  5. log4j日志分模块打印,同时不打印到控制台上

    由于定时刷新程序的启用,导致catalina.out配置文件中打入大量日志,致使程序调试困难.          无法正常查看日志.所以客户要求将性能流量配置日志迁移出catalina.out目录.修 ...

  6. 利用autoit自动关闭指定标题窗口

     最近使用PL/SQL Developer 比较两个数据库数据差异,因部分表上没有主键,PL/SQL 就会弹出一个确认框提示某某表没有主键.因为有很多表没有主键,就不停的弹出确认窗口,得不停的点击 ...

  7. [转]jQuery EasyUI 扩展-- 主题(Themes)

    主题(Themes)允许您改变站点的外观和感观.使用主题可以节省设计的时间,让您腾出更多的时间进行开发.您也可以创建一个已有主题的子主题. 主题生成器(Theme Builder) jQuery UI ...

  8. poj2196

    Specialized Four-Digit Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7238   A ...

  9. safari浏览器cookie问题

        这个题目可能有点大了,这里主要讨论一种解决safari浏览器阻止第三方cookie问题.       场景       公司存在多个域名(a.com,b.com,co.com)这些域名应该统一 ...

  10. 【转】ffserver用法小结

    我们可以通过ffserver以及ffmpeg做一个简单的视频监控系统,ffserver用于视频的转发调度,ffmpeg用于转码 而对于ffserver最基本也是最重要的就是对它的ffserver.co ...