1.drbd多节点简介

在drbd9以前,drbd一直只能配置两个节点,要么是primary/secondary,要么是primary/primary。虽然在这些版本上也能配置第三个节点实现三路节点的同步,但这个第三节点一般都只当作备份drbd设备,几乎没人去使用drbd配置3节点。

但是在drbd9中,drbd可以定义环状网络的多节点,最多支持16个节点。这些节点之间,两两都要握手。例如,下图是5节点的drbd环状图。

对于host1节点来说,它有4个对端(peer)节点:host2、host3、host4、host5。这4个节点组成host1的"搭档"(partner)。请区分peer和partner:peer是节点与节点之间的关系,称为对端;partner是节点和其他所有节点的关系。虽然,是否区分peer和partner不影响drbd9的使用,但是看drbd9文档的时候有用。

根据上图,每节点都需要和其他任意一个节点建立连接,因此2节点的drbd只需一个连接对,3节点的drbd需要3个连接对,4个节点需要6个连接对,16个节点需要120个连接对。

在drbd84和以前的版本上,几乎总是使用/proc/drbd文件来获取节点之间的状态信息。但是这个文件只能记录两个节点的信息,而drbd9支持多个节点,这个文件已经无法完整记录各节点之间的关系,因此/proc/drbd已经完全废弃了

在drbd9上,可以使用drbdadm statusdrbdsetup status等命令获取各节点的信息。

由于每个节点都需要和其他所有节点通信,因此每个节点的元数据区的大小都要比两节点时的元数据翻(N-1)倍,这意味着很容易出现元数据区空间不足的情况。因此,请保证每个节点的元数据区够大。如果drbdadm up启动失败,可以查看/var/log/message日志进行排查是否是因为元数据区的问题。

drbd9.0中还不支持多节点的多主模型(虽能实现,但官方说没有测试,很危险),在drbd9.1中将正式支持多节点的多主模型。而单主模型的drbd,又没必要多节点,所以在drbd9中,新添加的多节点特性有点不上不下。

最后,目前还不适合使用drbd9.0,不少新添加的功能还没有完善。

2.配置3节点的drbd

以下是/etc/drbd.d/rs0.res文件中的内容:

resource rs0 {
volume 0 {
device /dev/drbd0;
disk /dev/sdb2;
meta-disk /dev/sdb1;
}
volume 1 {
device /dev/drbd1;
disk /dev/sdb4;
meta-disk /dev/sdb3;
}
on drbd90.longshuai.com {
address 192.168.100.56:7788;
node-id 0; # 需要定义每个节点标识符id
}
on drbd91.longshuai.com {
address 192.168.100.55:7788;
node-id 1;
}
on drbd92.longshuai.com {
address 192.168.100.58:7788;
node-id 2;
}
connection { # 定义环状网络中的连接对
host drbd90.longshuai.com port 7001;
host drbd91.longshuai.com port 7010;
}
connection {
host drbd91.longshuai.com port 7012;
host drbd92.longshuai.com port 7021;
}
connection {
host drbd90.longshuai.com port 7002;
host drbd92.longshuai.com port 7020;
}
}

其中connection指令定义节点与节点之间的连接对,由于这里配置的是3节点,因此配置了3个连接对,分别是(drbd90,drbd91),(drbd90,drbd92),(drbd91,drbd92)。

此外还定义了每个连接对之间tcp通信的端口。如果服务器上的网卡够多,可以为每个连接对都使用单独的IP地址。

如果各连接对之前都不单独定义通信端口,而是使用address指令上的默认端口,则可以将上面所有connection指令简化为一个"connection-mesh"指令。如下:

connection-mesh {
hosts drbd90.longshuai.com drbd91.longshuai.com drbd92.longshuai.com;
}

然后在三个节点上都执行:

drbdadm up rs0

这表示3个节点的所有卷组都建立连接、启动资源。如果想要指定只和某节点建立连接,则可以使用"--peer"选项来指定host指令中的对端。

以下是drbd90.longshuai.com的状态:

[root@drbd90 ~]# drbdadm status rs0
rs0 role:Secondary
volume:0 disk:Inconsistent
volume:1 disk:Inconsistent
drbd91.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent
volume:1 peer-disk:Inconsistent
drbd92.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent
volume:1 peer-disk:Inconsistent

以下是drbd91.longshuai.com的状态:

[root@drbd91 ~]# drbdadm status rs0
rs0 role:Secondary
volume:0 disk:Inconsistent
volume:1 disk:Inconsistent
drbd90.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent
volume:1 peer-disk:Inconsistent
drbd92.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent
volume:1 peer-disk:Inconsistent

以下是drbd92.longshuai.com的状态:

[root@drbd92 ~]# drbdadm status rs0
rs0 role:Secondary
volume:0 disk:Inconsistent
volume:1 disk:Inconsistent
drbd90.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent
volume:1 peer-disk:Inconsistent
drbd91.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent
volume:1 peer-disk:Inconsistent

将drbd90.longshuai.com节点升级为primary,并查看该节点的状态。

[root@drbd90 ~]# drbdadm --force primary rs0
[root@drbd90 ~]# drbdadm status rs0
rs0 role:Primary
volume:0 disk:UpToDate
volume:1 disk:UpToDate
drbd91.longshuai.com role:Secondary
volume:0 replication:SyncSource peer-disk:Inconsistent done:0.01
volume:1 replication:SyncSource peer-disk:Inconsistent done:0.01
drbd92.longshuai.com role:Secondary
volume:0 replication:SyncSource peer-disk:Inconsistent done:0.01
volume:1 replication:SyncSource peer-disk:Inconsistent done:0.01

再查看drbd91.longshuai.com的状态。

[root@drbd91 ~]# drbdadm status rs0
rs0 role:Secondary
volume:0 disk:Inconsistent
volume:1 disk:Inconsistent
drbd90.longshuai.com role:Primary
volume:0 replication:SyncTarget peer-disk:UpToDate done:2.53
volume:1 replication:SyncTarget peer-disk:UpToDate done:3.08
drbd92.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent resync-suspended:peer
volume:1 peer-disk:Inconsistent resync-suspended:peer

注意其中的resync-suspended状态,表示本端和drbd92.longshuai.com节点之间并不同步,它们之间的同步操作处于挂起状态。

同理,drbd92.longshuai.com节点上的状态也这样,和drbd91.longshuai.com节点之间是不会进行同步的,它们的同步操作被挂起。

[root@drbd92 ~]# drbdadm status rs0
rs0 role:Secondary
volume:0 disk:Inconsistent
volume:1 disk:Inconsistent
drbd90.longshuai.com role:Primary
volume:0 replication:SyncTarget peer-disk:UpToDate done:22.15
volume:1 replication:SyncTarget peer-disk:UpToDate done:6.72
drbd91.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent resync-suspended:peer
volume:1 peer-disk:Inconsistent resync-suspended:peer

如果启动资源的时候出现如下错误:

[root@drbd90 ~]# drbdadm up rs0
0: Failure: (162) Invalid configuration request
Command 'drbdsetup attach 0 /dev/sdb2 /dev/sdb1 flexible' terminated with exit code 10
1: Failure: (162) Invalid configuration request
Command 'drbdsetup attach 1 /dev/sdb4 /dev/sdb3 flexible' terminated with exit code 10

且查看资源的状态时发现本端节点是Diskless,说明资源没有和底层设备关联成功。这可能是底层设备的问题,而底层设备的问题,大多数都是元数据区的问题。

[root@drbd90 ~]# drbdadm status rs0
rs0 role:Secondary
volume:0 disk:Diskless
volume:1 disk:Diskless
drbd91.longshuai.com connection:StandAlone
drbd92.longshuai.com connection:StandAlone

再查看drbd的日志。很明显,是元数据区的bitmap槽不够。之所以不够,是因为在创建元数据区的时候已经将槽位创建完成了。

[root@drbd90 ~]# vim /var/log/messages
Apr 1 00:19:47 drbd90 kernel: drbd rs0: Starting worker thread (from drbdsetup [75059])
Apr 1 00:19:47 drbd90 kernel: drbd rs0 drbd91.longshuai.com: Starting sender thread (from drbdsetup [75067])
Apr 1 00:19:47 drbd90 kernel: drbd rs0 drbd92.longshuai.com: Starting sender thread (from drbdsetup [75069])
Apr 1 00:19:47 drbd90 kernel: drbd rs0/0 drbd0: disk( Diskless -> Attaching )
Apr 1 00:19:47 drbd90 kernel: drbd rs0/0 drbd0: Maximum number of peer devices = 1
Apr 1 00:19:47 drbd90 kernel: drbd rs0/0 drbd0: Not enough free bitmap slots (available=0, needed=1)
Apr 1 00:19:47 drbd90 kernel: drbd rs0/0 drbd0: disk( Attaching -> Diskless )
Apr 1 00:19:47 drbd90 kernel: drbd rs0/1 drbd1: disk( Diskless -> Attaching )
Apr 1 00:19:47 drbd90 kernel: drbd rs0/1 drbd1: Maximum number of peer devices = 1
Apr 1 00:19:47 drbd90 kernel: drbd rs0/1 drbd1: Not enough free bitmap slots (available=0, needed=1)
Apr 1 00:19:47 drbd90 kernel: drbd rs0/1 drbd1: disk( Attaching -> Diskless )

这时需要添加bitmap槽,或者重建元数据区(可以dump元数据区,再手动编辑元数据区,再导入),甚至扩大元数据区。目前,drbd添加bitmap槽的方法还比较复杂,可参考https://docs.linbit.com/docs/users-guide-9.0/#s-rebalance-workflow。在以后版本中,drbdadm将可以一条命令添加bitmap槽。

drbd(四):drbd多节点(drbd9)的更多相关文章

  1. 二进制安装 kubernetes 1.12(四) - 部署 Node 节点组件

    在 master 上操作 vi /etc/profile export PATH=/opt/kubernetes/bin:$PATH source /etc/profile 将 kubelet-boo ...

  2. 第四章 jQuery节点操作

    1.DOM操作分为三类:(1)DOM Core:任何一种支持DOM的编程语言都可以使用用它如:getElementById()(2)HTML-DOM:用于处理HTML文档,如document,form ...

  3. 第四章 DOM节点操作

    1.什么是DOM:DOM(document object model)文档对象模型,把每一个元素看做是一个节点,然后对节点进行增删改查的操作 2.DOM的分类:(1)Core Dom:可以对html, ...

  4. [Unity插件]Lua行为树(四):条件节点和行为节点

    条件节点和行为节点,这两种节点本身的设计比较简单,项目中编写行为树节点一般就是扩展这两种节点,而Decorator和Composite节点只需要使用内置的就足够了. 它们的继承关系如下: Condit ...

  5. Kubernetes1.91(K8s)安装部署过程(四)--Master节点安装

    再次明确下架构:  三台虚拟机 centos 7.4系统,docker为17版本,ip为10.10.90.105到107,其中105位master,接下来的master相关组件安装到此机器上. etc ...

  6. 树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库 (四) 树莓派单子节点查询

    考虑到项目的实际需要,树莓派作为主机,应该只在需要的时候查询特定节点发送的数据,因此接收到数据后需要根据头部判断是否是自己需要的数据,如果不是继续接收数据,超过一定时间未查询到特定节点的数据,则退出程 ...

  7. 二叉树实例学习(四)——获取节点的高度函数getHight()

    树T中所有节点深度的最大值称为该树的高度(height),实际上每个节点与其所有子节点都可以看做一颗树,也就是说除了根结点,所有子结点都可以看做是一颗子树,因此每个结点都有树高.在本程序中约定,仅含单 ...

  8. 基于corosync+pacemaker+drbd+LNMP做web服务器的高可用集群

    实验系统:CentOS 6.6_x86_64 实验前提: 1)提前准备好编译环境,防火墙和selinux都关闭: 2)本配置共有两个测试节点,分别coro1和coro2,对应的IP地址分别为192.1 ...

  9. 3 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之heartbeat的搭建

    preface 在上节的说了mysql的搭建,这节我们在上节的基础上,继续搭建heartbeat. 安装和配置heartbeat 采用yum安装,dbmaster81和dbbackup136上都安装, ...

随机推荐

  1. python之文件读写详解

    打开文件 函数open() 参数说明: file:文件路径 mode: 文件的读写方式,默认'r',只读方式: buffering:设置缓冲策略,0用于二进制文件,1为行缓冲,用于文本模式:默认二进制 ...

  2. SpringBoot 文件上传临时文件路径问题

    年后放假回来,一向运行OK的项目突然图片上传不了了,后台报错日志如下: java.io.IOException: The temporary upload location [/tmp/tomcat. ...

  3. 通过分析HSL/HSB获取图片主色调

    这两天稍微研究了一下颜色的HSL/HSB值,主要因为写程序想要实现通过一张图片拿到图片中的最突出的颜色值(类似Groove Music中播放栏背景就是从专辑封面中取出主色调,还有Windows 10任 ...

  4. 【CJOJ1167】【洛谷1894】[USACO4.2]完美的牛栏

    题面 Description 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来 ...

  5. 【洛谷1026】【NOIP2001】统计单词个数

    题面 题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包 ...

  6. RestSharp 一个.NET(C#)的HTTP辅助类组件

    互联网上关于.NET(C#)的HTTP相关的辅助类还是比较多的,这里再为大家推荐一个.NET的HTTP辅助类,它叫RestSharp.RestSharp是一个轻量的,不依赖任何第三方的组件或者类库的H ...

  7. react实战第一步--搭建项目

    使用 create-react-app 快速构建 React 开发环境 1.cnpm install -g create-react-app 2.create-react-app react2(rea ...

  8. java ssm框架实现分页功能 (oracle)

    java web 实现分页功能 使用框架:ssm 数据库:oracle 话说 oracle 的分页查询比 mysql 复杂多了,在这里简单谈一下: 查询 前十条数据: SELECT * FROM( S ...

  9. 常见排序算法及Java实现

    先上个总图↓: ①.直接插入排序 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并 ...

  10. 分享基于Qt5开发的一款故障波形模拟软件

    背景介绍 这是一款采用Qt5编写的用于生成故障模拟波形的软件.生成的波形数据用于下发到终端机器生成对应的故障类型,用于培训相关设备维护人员的故障排查技能.因此,在这款软件中实现了故障方案管理.故障波形 ...