欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 40_01 _Linux集群系列之十五——分布式复制块设备drbd的基础概念及配置 有大用

image.png

heartbeat-ldirectord      对于LVS

1)生成规则

2)健康状态检查



keepalived + ipvs: 更轻量级,配置起来简单一些,生产环境中用得比较多



高可用本身并不依赖于共享存储,这其实是根据实际业务需求的

比如ipvs没必要共享存储,但是mysql要求共享存储

image.png

image.png


文件级别实现 两个节点上的某个目录同步

Server:rsync + inotify

Client: rsync命令 cron任务定期执行,而且接到inotify通知后,自动执行    

inotify是内核的功能

rsync是可以配置实现文件共享的机制

把它们作为服务器端,客户端使用rsync命令就能同步,但是效率太低下



还有一个客户端上的 sersync,效率高


所有的同步会占据网络带宽,同步错误,会损坏整个业务

rsync命令,这个廉价,小的场景当中,可以使用

image.png



scsi允许多主机接入的

scsi: initiator发起储存请求的  有些scsi总线允许多initiator

        target接收并存储数据(提供数据服务的)

image.png


高可用的场景下,两个节点有可能访问同一个盘的同一个文件系统,集群分裂时,有可能导致文件系统崩溃

image.png


DAS是块级别共享,DAS持有锁的机制是在本节点完成的,无法通知另外一个节点,



NAS:文件级别共享,它们(   nfs c 客户端  /  nfs s 服务器端  )两个是基于nfs协议传送文件



SAN:直接将网络模拟成scsi总线,

客户端网卡就是initiator

一个SAN server 可以模拟多个 target,当然可以模拟一个target

需要借助于客户端的scsi驱动,和服务端的scsi驱动,并借助于网络驱动来完成scsi报文的传输

客户端是以scsi的方式向服务端发起请求的,服务端可以使用服务的方式,使用协议的方式模拟自己成为一个scsi的target

客户端通过FC或者TCP/IP的方式封装scsi报文,到达服务器后,服务器也必须能理解FC或者TCP/IP的报文,它把外部的请求拆掉以后,里面看到的就是scsi报文   (scsi借助于FC或者 TCP/IP的遂道来实现了报文的远距离传输)

image.png所以SAN没有半点跟scsi相关的功能,服务器端硬盘可以不是scsi硬盘,便可以模拟成一个scsi设备

SAN模拟的是scsi协议,所以客户端看来并不能意识到后端是一个服务器端,只能意识到是一个scsi设备,

由此客户端请求都是在块级别上实现使用这些存储空间的

image.png

无论是具有共享功能的 DAS,NAS,或者SAN,代价都很高,

它们都不是特别的适用上,inotify不太理想


分布式复制快设备: DRBD

 RAID 1: mirror 镜像卷

                按位对应

image.png


DRBD:将位于两个电脑的磁盘或磁盘分区,做成镜像设备

按位有一模一样的一份,存在主节点的时候通过网络发往另外一个节点上一份的

DRBD工作在内核当中,是内核模块,或者说是内核的一个功能

image.png

当我们进行系统调用,往内核上写数据的时候,内核上本身有个子系统(类似于ipvs),监控在数据的通路的某个位置,一旦发现数据是发往我们定义成了DRBD那个分区上的时候,它将数据变成两份,一份存在自己本地,另外一份通过网卡向另外一个主机发送,另外一个主机上必须要运行有一个网络服务,随时接受请求,如下图,当左边网卡数据请求发到右边时,这个网络服务就把请求接到内核,内核中有个DRBD相关的模块,这个DRBD模块接受到数据后,放到对应的磁盘分区上去

左右两个电脑是基于DRBD的协议进行工作的,因此右边电脑知道应该把数据放到自己的磁盘的哪个位上去

image.png


与ipvs一样(需启用ipvs模块,并定义规则,ipvs才发生作用)

DRBD是一个模块,也不会始终工作的,需要的时候装入内核,还要定义规则

两个主机上不可能每个硬盘上都要同步的,可能只同步某一个分区,所以我们必须要把某个分区把两端对应起来,做成一个DRBD的复制设备

DRBD有主从的概念

将两个主机上的大小空间一模一样的磁盘分区做成对应的分布式复制块设备

规则在用户空间定义,有用户空间的规则生成工具(命令行工具)

image.png

如上图,实现数据访问的包括读写一般都是应用程序,我们叫做service

右边,虚线服务,平时都是不启动的,

DRBD作为磁盘镜像来讲,一定是主从架构的

primary:主节点,可执行读写操作

secondary:从节点,文件系统不能挂载,不能读,不能写

但是主从的角色可以切换,A:primary,B:secondary 可以切换,只不过得先把A卸载,把A调成备用模式,,,,把B调成主动模式,在B上挂载,而后在B上写,所以都会同步到A上去;;;;所以它们没有所谓的谁是客户端谁是服务器端的概念,,,只有主从的概念;;;;

所以两者都是从的,是可以的,,两者都是主的,那是不允许的(事实上又是可以的)



两个电脑上的文件系统,按位一模一样的相对应,假如两个节点同时读写,系统会错乱崩溃

image.png

每个节点读写的时候,一定会装入本机内存的,如上图左节点写一点,右节点写一点,左节点内容同步到右节点,右节点内容同步到左节点,如果写的是同一个文件,它俩一合并,文件系统会崩溃

所以绝不允许,两个节点同时读写的,在某一时刻,仅允许某一节点能读写,而另一个节点连读都不能读的


DRBD:双主模型 dual primary (master) 必须结合高可用集群才能实现

        正常情况下,是先将原数据载入内存,在内核中对某文件加锁,另外一个节点的内核是看不到的;;;;;如果将自己施加的锁通知给另外一个内核就可以了,,,我们把DRBD做成高可用集群的服务就可以了


把DRBD定义成master/slave的主从资源,在某一时刻,在某一个节点是主的,另一节点是从的,它可以自动的切换主从,如下图左节点挂了,右节点立即切换为主的,这是主从,,,,,但是它可以成为双主,把两个主机上的对应的镜像格式化成集群文件系统,基于分布式文件锁 DLM (Distributed Lock Manager ),,,,所以我们只需要定义在两个节点上运行分布式锁管理器这个资源,

那么左节点对某一个文件系统中的文件施加的锁会通过messeging Layer,通知给另外一个节点,所以在内核中会发现另外一个主机内核所施加的锁,这就是结合分布式锁管理器以及集群文件系统所完成的双主模型

集群文件系统(常用的两个GFS2/OCFS2)

锁是阻止别人写的,并没有提高效率,只不过是多机可以使用同一个文件系统而己

DRBD仅允许两个节点,要么是主从,要么是双主,它也允许层次性架构,但这种层次性架构,一般绝少使用

image.png


在某一时刻,,,,,主从时,,,,,只能有一个节点是活动的,,,,,,如下图万一左节点故障了,,,,,如何切换到右节点

1)左节点卸载,并且让左边成为从

2)右节点成为主,并且挂载

这个过程必须是手动的(或写脚本,监控着)

image.png

如何自动完成?左节点故障了,自动的让右节点提升为主,能挂载能访问,(当然此时左节点故障,就无法为从了),,,,,,,,,

在高可用集群当中完成

如下图,装上messaging layer,把它们(drbd)做成高可用集群的资源,不要求它们是双主,而是要求主从,它能够完成探测到左节点故障以后,自动的提升右节点为主的,drbd服务必须要两个节点上同时运行(一主一从),

image.png

如上图,按照我们在crm中的使用方式,我们把左节点设为 standby ,资源会自动切换到右节点上来了,右节点此时变成 master 了,再让左节点上线,(会根据定义的资源粘性及位置等来决定 资源是否会切换到左节点)

drbd独立工作的时候也可以,在高可用集群当中使用也可以,而且是更理想的状态???


如何手动使用drbd

image.png

如下图图一如果没有drbd的话,文件系统接口通过内核的api输出给用户空间了(open打开文件,read读文件,write写文件,,这些都是系统调用)

不同的文件系统,系统调用的名称可能不太一样,而且所能够接受的参数类型,参数个数也可能不一样

所以在linux当中,它们通过一种方式把所有文件系统的不同将它们弥补了,磨合起来了,给它隐藏了,靠的是VFS

我们要实现文件的读写,我们要向内核中发起系统调用, (请求内核中的文件系统这个模块)

文件系统在实现文件读写的时候,为了加速(内核工作中内存当中,而磁盘比较慢),,内核会在内存中找一段内存空间,用于buffer和cache,(buffer和cache主要是用来缓存源数据,数据等),,,,,所以对文件的读写是在buffer和cache中完成的

在buffer和cache中完成后,(尤其是写操作)不会立即同步到磁盘上(读无所谓,读只不过是从磁盘上读了一份副本到内存中的,只要内存中不改,,,,等一会儿数据丢了就可以了,因为磁盘上还有)

写是在buffer,cache中完成操作的,过一会儿同步到磁盘上去

非固态磁盘的机械硬盘,有很多磁道和扇区,每写一个数据,都要完成磁道的磁臂的寻道,并且等到磁道对应的扇区再转过来,这样一个操作

所以如果写了两个文件,有三个写操作,写在不同的磁道和扇区

第一个写操作 1号磁盘  32-36扇区

第二个写操作 3号磁盘  4-8扇区

第三个写操作 1号磁盘  38-60扇区


把这三个写操作一个一个的完成,有什么好处和劣势

我们把第一个操作和第三个操作合起来一起操作,可能速度更快点,因为它们距离接近

Disk Scheduler:磁盘调度器,就是合并读请求,合并写请求的,,速度会快,节约寻道的

如果能把随机读写,转化成顺序读写,对于机械式硬盘来讲,性能的提升是非常明显的

( 固态硬盘没有机械臂的概念,还需要按顺序合并写操作????一般来讲不能根据磁盘块的方式来合并了.;;;;对于固态硬盘来讲,读写性能可能不一样,一般来讲,它随机和顺序上没有太大的区别,,,,,,,,,,,,,,,,,,,,,所以磁盘调度器未必适用于固态硬盘 

我们合并IO,最终IO执行的写操作最终还要转化成硬盘上的磁臂的移动,扇区上的数据的读写,这是由驱动完成的

驱动会知道读的扇区的每个扇区的地址,知道怎么找对应的扇区,驱动也知道怎么指挥磁臂上面施加一些能量完成读写操作的

任何应用的驱动一般来讲是在内核中执行的

图一

image.png

如下图图二,DRBD在buffer Cache和 Disk Scheduler中间插了一把,所以当数据真正Disk Scheduler调度之前,它要先经由DRBD的,

DRBD可以理解成过滤器,对那些非DRBD的磁盘的读写操作,它是不关心的,非DRBD的读写是绕过DRBD的,只要是写发往DRBD对应的磁盘设备的,DRBD会复制一份,通过TCP/IP协议栈经过网卡驱动,传给另外一个对应节点上的网卡返回给网卡驱动,解码之后,解码之后交给TCP/IP协议栈,TCP/IP协议栈交由DRBD,DRBD才最终存储在与之对应的磁盘设备上

image.png


由下图DRBD,两条路径,,肯定第1条速度更快

当存储完成后,会返回告诉系统(这里是DRBD服务吧)我存储完了,可以退场了

由于第2条路径的存储所经历的通路非常的长, (peer 同龄人,从节点)


image.png


由下图

三种方法,DRBD的Procotol协议

    1)A协议ASync,异步,,A模型: 当DRBD发给TCP/IP时,;;;;;;;;就向上返回告诉服务器,这个存储操作己完成,,,,DRBD等待本地的存储完成,就向service宣告存储完成了,,,,,,,,,,,,,,,,,,,,,异步模型,只管发出,接不接到,啥时接到,与我无关(不需要事先建立连接),,,,,,,,,,,,,,,,,,,,性能最好

    2)B协议semi sync,半同步,B模型: 当报文发送到达对方的TCP/IP协议栈的时候,;;;;这个存储操作己完成;;;;;;;  (收下报文后,放到哪里?只要跟内存没关系?????,只要操作系统在操作,一定是在内核所在的内存中完成的,包括TCP/IP协议栈,它收到的报文一定是放在内核当中专用于网络缓冲的一段存储空间当中),,,,,,,,,,,,,,,,,,,,,,半同步模型,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

   3)C协议sync,同步,C模型: 必须要等到从节点存储以后;;;;;;这个存储操作己完成;;;;;;;;;;;;;同步模型,发过去,保证对方收到,等到你收到以后,才算完成,;;;;;;;;;;;;;;最靠谱

image.png


对于C模型来讲,我们的数据一定要在远程主机上存了一份,就算主节点故障了,通过从节点得到的数据是一模一样的,,,,,不然的话会出现问题的


我们应该采用C模型

对于数据完整性要求不高的场合,可以用A,但是一般来讲,我们采用C模型



就算我们的本地硬盘是IDE硬盘,理论值 IDE: 133MB/秒        千兆网 约125MB/秒


image.png

DRBD配置:

        1)磁盘        2)可用网络带宽

数据在网络上传输要加密,,,,,,,要CPU参与,,,,,,,会浪费更多的资源,,,,,,,数据会更慢,,,,,,,,但是为了数据的靠谱,,,,,,,,这个是需要做的事情



drbd只能是两个节点,

如下图,三组drbd

image.png



如下图,drbd主从身份是可以切换的

主的向从的请求传输数据的,,,,切换后,主从客户端服务端要调换的

意味着,双方都要监听在端口上,随时等待对方的请求,双方都要启动服务的

drbd的资源:两个节点,作为同一个drbd来讲,自己监听在哪个端口上,对方监听在哪个端口上,自己使用哪块硬盘,对方使用哪块硬盘,自己有多大空间,对方有多大空间,这是一定相同的,,要使用哪个网卡,使用多少带宽,都要事先定义好,这在drbd当中,定义一组drbd设备的定义,叫做drbd的资源

image.png


drbd中的每一个设备都要定义成资源的

drbd的资源与高可用服务的资源是两码事

DRBD Resource: DRBD资源

    1)Resource name资源名称

            唯一的标识一个资源的,可以是任意的字符,只能是纯ascii码字符,不能包含空白字符

    2)DRBD device     DRBD设备

            在双方节点上,此DRBD设备的设备文件;一般为/dev/drbdN,其主设备号(由IANA国际名称分配机构分配好的147?)(用来标识设备类型),次设备号(同一种类型下的不同的设备);;;;;;;;;;;;;;;;比如软raid,每个软raid最终要定义为/dev 下的md0 md1,,,,,md0 md1是虚拟的设备,它底下会定义为多个真实的设备,,,,,,drbd也不是一个真实的设备,,,它是虚拟的,对应的是真实的;;;;drbd是虚拟设备,也需要一个设备名称,称为 /dev/drbd0 /dev/drbd1 /dev/drbd2(比如md设备的名称有  /dev/md0 /dev/md1)

    3)Disk configuration    磁盘配置

              两个节点都要配置块设备,,在双方节点上,各自提供的存储设备.可以是一个分区,可以是任意类型的块设备,也可以是一个LVM

    4)Network configuration    网络配置

            网络带宽,而不是加密,,,,双方数据同步时所使用的网络属性


当这一切定义好以后,我们一启动,相关的drbd服务,资源相应的也就启动起来了,我们只需要把一个节点变为主节点,然后挂载,格式化,使用就可以了(格式化一个节点,另外一个节点所有数据按位对应,,所以会相应的进行格式化的)


image.png

当drbd服务定义好以后,我们要想配置其中一个设备成为主的,另外一个成为从的,需要一大堆的用户空间命令,

主要有三个:

    drbdadm

            较高级别的比较接近用户的管理工具,从/etc/drbd.conf (主配置文件)中读取其配置,可能为空,只是说读取/etc/drbd.d/ 为结尾的所有文件    

    drbdsetup

            比较底层,直接操作数据块,更可能数据位,非常复杂,用得不多,,,设置drbd的

    drbdmeta

            比较底层,直接操作数据块,更可能数据位,非常复杂,用得不多,,,操作drbd元数据的,可不是文件的元数据,是drbd本身为了维护drbd设备所需要用到的一些数据


image.png


image.png

drbd的元数据,可以放在drbd的磁盘上,也可以放在额外的第三方磁盘上,,一般还是存放在drbd本地磁盘内部

(interinode? 自己内部的空间,或者说使用自己内部的元数据)


drbd是内核中的一个模块,要想配置这个模块生效起来,真正提供drbd的功能,它需要借助于用户空间的工具 

drbdadm drbdsetup drbdmeta,drbd工作的时候,可以双主,也可以是主从,

双主的时候使用集群文件系统,

数据同步的时候根据数据同步的位置,可以分为协议A(异步),协议B(半同步),协议C(同步)

drbd要想真正使用起来,我们要配置它们的使用资源

drbd的使用资源至少包含4种属性

drbd资源名称, drbd设备名称, drbd磁盘相关配置, drbd网络相关配置



drbd官方站点

https://www.linbit.com

马哥截图,我这边没看到

image.png

image.png

drbd 8.4 可以支持代理了,多级代理,多处分发了,多级复制,不仅限于两个节点

image.png

drbd是工作在内核当中的,drbd在2.6.33之前是没有直接在内核里面的

drbd在2.6.33起才整合进内核的 内核的main line(主线)

2.6.33以后的内核,不需要再打补丁了,之前的需要打补丁的

红帽6是 2.6.32的版本

红帽5是 2.6.18的版本

[root@node1 ~]# uname -r

2.6.18-371.el5

[root@node1 ~]#

重新编译内核,太麻烦,

有人直接在对应的每一个内核的版本上提供了相应的rpm包,通过安装rpm包以后,向内核提供额外模块

内核与模块的版本号必须要完全匹配

所以要与版本号2.6.18相对应,甚至严格的话要与发行号371相对应


Centos的额外包( extras )给我们提供了drbd的内核相关的rpm包,以及用户空间的工具包


sohu 搜狐 , 163 网易, 阿里云 淘宝 都提供了开源镜像

http://mirrors.sohu.com/

http://mirrors.163.com/

http://mirrors.aliyun.com/centos-vault/   2020年11月30日 centos6各大开源镜像站已经停止维护了 但是阿里源还是可以用的 因为他的centos-vault仓库里放了之前版本的centos的包

Centos是与redhat完全兼容的


extras 是额外的包,不是主线中的包,后面有提供了补充类的包  RPMS就是放RPM包的位置吧

http://mirrors.aliyun.com/centos-vault/5.10/extras/i386/RPMS/

image.png

drbd83.8.3.15-2.el5.centos.i386.rpm   #这里 el5 和 centos 表示 el5和centos都可以使用

官方版本其实已经是84了,这里没有提供更新的版本,上图是用户空间工具


image.png上图上图是内核模块  

PAE            

xen 指的是与内核相匹配的

如果是在虚拟机,在xen虚拟机上使用的,就要xen的版本了

[root@node1 ~]# uname -r        #若显示有PAE的,就选择PAE的,

2.6.18-371.el5

内核模块要与用户空间工具对应起来吧

PAE: ( Physical Address Extension ) 物理地址扩展,让32位平台能够支持大于4G内存的,这是英特尔Amdx86平台上引进的一种技术.


我们这里需要装上内核模块kmod,并且使用modprobe装载进来,然后使用命令行用户空间工具drbd,就可以配置了

我们这里使用的是drbd83的版本 drbd83-8.3.15



配置drbd一主一从,要有前提,还要配置drbd在高可用集群下主从模式互相切换,,,意味着两个节点的限定(如时间同步,主机名称互相解析,ssh双机通信)都要完成的

做个cron吧让时间同步

1)时间同步

2)主机名称互相解析

3)ssh双机通信

接下来可以安装drbd了

image.png

如上图,三个节点 只受跳板机控制

跳板机我们控制它能够基于ssh与三个节点互信(不是互信,只要单信就可以了吧)

如下图,执行一个命令,只需要在跳板机上执行一个循环,让ssh连到每个节点执行一次就可以了

比如在三个节点都执行一个# yum localinstall

让三个(我这里是两个)节点都下载

for I in {1..2}; do ssh node$I 'wget ftp://172.16.0.1/pub/Sources/drbd/a.rpm';  done

自动连到每个节点,让每个节点完成下载

image.png

将来我们完全可以在跳板机上写一大堆脚本,自动化的,能够批量布署各种应用程序


做一个跳板机吧 ,很简单,在 192.168.0.75 上,配置 /etc/hosts


在跳板机 192.168.0.75  上 

[root@localhost ~]# vim /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1               localhost.localdomain localhost

::1             localhost6.localdomain6 localhost6

192.168.0.55 node2.magedu.com node2

192.168.0.45 node1.magedu.com node1


配置跳板机与 node1 node2的互信

在跳板机 192.168.0.75  上 

[root@localhost ~]# ssh-keygen -t rsa -P ''

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Created directory '/root/.ssh'.

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

fc:5c:37:68:85:bb:e3:bb:fc:21:0a:35:26:3b:25:4b root@localhost.localdomain

[root@localhost ~]#

在跳板机 192.168.0.75  上  公钥复制到 node1 (192.168.0.45) 上

[root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1

15

The authenticity of host 'node1 (192.168.0.45)' can't be established.

RSA key fingerprint is ae:fe:80:46:96:5b:2a:94:5e:8e:0c:ec:86:eb:e1:ee.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'node1,192.168.0.45' (RSA) to the list of known hosts.

root@node1's password:这里是密码

Now try logging into the machine, with "ssh 'root@node1'", and check in:


  .ssh/authorized_keys


to make sure we haven't added extra keys that you weren't expecting.


在跳板机 192.168.0.75  上 

[root@localhost ~]# ssh node1 'date'

2020年 12月 18日 星期五 09:26:46 CST

[root@localhost ~]#


在跳板机 192.168.0.75  上  公钥复制到 node2 (192.168.0.55) 上

[root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node2

15

The authenticity of host 'node2 (192.168.0.55)' can't be established.

RSA key fingerprint is ae:fe:80:46:96:5b:2a:94:5e:8e:0c:ec:86:eb:e1:ee.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'node2,192.168.0.55' (RSA) to the list of known hosts.

root@node2's password:这里是密码

Now try logging into the machine, with "ssh 'root@node2'", and check in:


  .ssh/authorized_keys


to make sure we haven't added extra keys that you weren't expecting.


在跳板机 192.168.0.75  上 

[root@localhost ~]# ssh node2 'date'

2020年 12月 18日 星期五 09:28:53 CST

[root@localhost ~]#


在跳板机 192.168.0.75  上 

先是把程序下载到 本地, 然后复制到另外两个节点上


马哥 lftps 是 ftps 的别名 ,,就是执行 lftp , 然后进入到 172.16.0.1:/pub/Sources 目录,

image.png

我是从

http://mirrors.aliyun.com/centos-vault/5.10/extras/i386/RPMS/

下载的

http://mirrors.aliyun.com/centos-vault/5.10/extras/i386/RPMS/drbd83-8.3.15-2.el5.centos.i386.rpm

http://mirrors.aliyun.com/centos-vault/5.10/extras/i386/RPMS/kmod-drbd83-8.3.15-3.el5.centos.i686.rpm


在跳板机 192.168.0.75  上 

[root@localhost ~]# ls

anaconda-ks.cfg                      install.log

Desktop                              install.log.syslog

drbd83-8.3.15-2.el5.centos.i386.rpm  kmod-drbd83-8.3.15-3.el5.centos.i686.rpm

[root@localhost ~]#

在跳板机 192.168.0.75  上  循环复制到了两个节点上

[root@localhost ~]# for I in {1..2};do scp *.rpm node$I:/root ;done;

drbd83-8.3.15-2.el5.centos.i386.rpm           100%  238KB 237.6KB/s   00:00

kmod-drbd83-8.3.15-3.el5.centos.i686.rpm      100%  141KB 141.4KB/s   00:00

drbd83-8.3.15-2.el5.centos.i386.rpm           100%  238KB 237.6KB/s   00:00

kmod-drbd83-8.3.15-3.el5.centos.i686.rpm      100%  141KB 141.4KB/s   00:00

[root@localhost ~]#

先在两个节点 192.168.0.45     192.168.0.55 上挂载 /dev/cdrom 吧


在跳板机 192.168.0.75  上  循环安装

[root@localhost ~]# for I in {1..2}; do ssh node$I 'yum --nogpgcheck -y localinstall *drbd*.rpm'; done        #最终两个节点上安装完成

image.png



至此两个节点上 drbd 软件安装成功


回到 第一个节点 192.168.0.45

[root@node1 ~]# rpm -ql drbd83

/etc/bash_completion.d/drbdadm

/etc/drbd.conf        #主配置文件

/etc/drbd.d/global_common.conf    # 这个是全局通用配置文件???

/etc/ha.d/resource.d/drbddisk        #放的是资源

/etc/ha.d/resource.d/drbdupper        #放的是资源

/etc/rc.d/init.d/drbd        #服务脚本

/etc/udev/rules.d/65-drbd.rules

/etc/xen/scripts/block-drbd

/sbin/drbdadm        #三个命令

/sbin/drbdmeta

/sbin/drbdsetup

/usr/lib/drbd/crm-fence-peer.sh

/usr/lib/drbd/crm-unfence-peer.sh

/usr/lib/drbd/notify-emergency-reboot.sh

/usr/lib/drbd/notify-emergency-shutdown.sh

/usr/lib/drbd/notify-io-error.sh

/usr/lib/drbd/notify-out-of-sync.sh

/usr/lib/drbd/notify-pri-lost-after-sb.sh

/usr/lib/drbd/notify-pri-lost.sh

/usr/lib/drbd/notify-pri-on-incon-degr.sh

/usr/lib/drbd/notify-split-brain.sh

/usr/lib/drbd/notify.sh

/usr/lib/drbd/outdate-peer.sh

/usr/lib/drbd/rhcs_fence

/usr/lib/drbd/snapshot-resync-target-lvm.sh

/usr/lib/drbd/stonith_admin-fence-peer.sh

/usr/lib/drbd/unsnapshot-resync-target-lvm.sh

/usr/lib/ocf/resource.d/linbit/drbd

/usr/sbin/drbd-overview        #命令显示drbd的概览,简要信息

/usr/share/cluster/drbd.metadata

/usr/share/cluster/drbd.sh

/usr/share/doc/drbd83-8.3.15

/usr/share/doc/drbd83-8.3.15/COPYING

/usr/share/doc/drbd83-8.3.15/ChangeLog

/usr/share/doc/drbd83-8.3.15/README

/usr/share/doc/drbd83-8.3.15/drbd.conf

/usr/share/doc/drbd83-8.3.15/file.list

/usr/share/man/man5/drbd.conf.5.gz

/usr/share/man/man8/drbd.8.gz

/usr/share/man/man8/drbdadm.8.gz

/usr/share/man/man8/drbddisk.8.gz

/usr/share/man/man8/drbdmeta.8.gz

/usr/share/man/man8/drbdsetup.8.gz

/var/lib/drbd

[root@node1 ~]#

做个小一点的drbd磁盘吧(1G),这样同步会快点

当然在跳板上脚本循环分区,会快点吧,,我们独立做吧


第一个节点 192.168.0.45 上

image.png

image.png

第一个节点 192.168.0.45 上 (第二个节点 192.168.0.55 同样的做法 )

[root@node1 ~]# fdisk /dev/sdb


The number of cylinders for this disk is set to 2610.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other OSs

   (e.g., DOS FDISK, OS/2 FDISK)


Command (m for help): n

Command action

   l   logical (5 or over)

   p   primary partition (1-4)

l

First cylinder (201-2610, default 201):

Using default value 201

Last cylinder or +size or +sizeM or +sizeK (201-2610, default 2610): +1G


Command (m for help):

Command (m for help): w

The partition table has been altered!


Calling ioctl() to re-read partition table.


WARNING: Re-reading the partition table failed with error 16:                                                        设备或资源忙.

The kernel still uses the old table.

The new table will be used at the next reboot.

Syncing disks.

[root@node1 ~]# partprobe /dev/sdb

Warning: Unable to open /dev/hdc read-write (Read-only file system).  /dev/hdc has been opened read-only.

[root@node1 ~]#

[root@node1 ~]# reboot


Broadcast message from root (pts/0) (Fri Dec 18 10:26:47 2020):


The system is going down for reboot NOW!

[root@node1 ~]#

[root@node1 ~]# fdisk -l


Disk /dev/sda: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          13      104391   83  Linux

/dev/sda2              14        2610    20860402+  8e  Linux LVM


Disk /dev/sdb: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        2610    20964793+   5  Extended

/dev/sdb5               1         200     1606437   8e  Linux LVM

/dev/sdb6             201         323      987966   83  Linux

[root@node1 ~]#


此时千万不要格式化


资源配置

    mydrbd        资源名称,中间不要有空格  给drbd起个名称 

    /dev/drbd0    设备名称,

    /dev/sdb6        磁盘(马哥是 扩展分区,不,马哥也是逻辑分区,,我这是逻辑分区..)


drbd的配置文件

        /etc/drbd.conf     #主配置文件   包含 /etc/drbd.d/  里面的所有配置文件吧

        /etc/drbd.d/global_common.conf     

        /etc/drbd.d/resource.d/            #各个资源的定义,里面任何一个文件都是一个独立的资源



 第二个节点 192.168.0.55 上

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

#

# please have a a look at the example configuration file in

# /usr/share/doc/drbd83/drbd.conf

#



 第一个节点 192.168.0.45 上

[root@node1 ~]# ls /usr/share/doc/drbd83-8.3.15/        #样例配置文件

ChangeLog  COPYING  drbd.conf  file.list  README

[root@node1 ~]#

[root@node1 ~]# cat /usr/share/doc/drbd83-8.3.15/drbd.conf  #样例配置文件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";        #res 是resource的简写

[root@node1 ~]#


[root@node1 ~]# cp /usr/share/doc/drbd83-8.3.15/drbd.conf /etc/drbd.conf    # 复制样例配置文件过去

cp:是否覆盖“/etc/drbd.conf”? y

[root@node1 ~]#

[root@node1 ~]# cd /etc/drbd.d

[root@node1 drbd.d]#

[root@node1 drbd.d]# ls

global_common.conf

[root@node1 drbd.d]#


drbd中的每一个设备都要定义成资源的,,,drbd中每个资源的属性都是相同的,,,将多个资源的共通属性可以抽取出来,放到common当中,如果某个资源没有定义属性,它就会从common中继承(把common中的当作默认);;;;;;;common为drbd资源提供默认属性定义的,,,,,,,,如果不想使用默认属性,就自己定义吧

[root@node1 drbd.d]# cat global_common.conf

global {    #global的

        usage-count yes;        #如果你的当前主要连到互联网上去了,它会自动发送信息给原作者,告诉他,有人用了drbd,,,官方作信息统计,看有多少个装机量;;;;;;;;我们用不着它

        # minor-count dialog-refresh disable-ip-verification

}


common {  #common的

        protocol C;    #如是不定义使用什么协议,就使用C协议


        handlers {    #处理器        万一某一个节点坏了,后来又上线了,怎么办?万一drbd节点脑裂了,怎么办?两个都联系不到对方,都成为主的了,都往里面读写,过一会儿又能联系上了,合并吧,文件系统崩溃,不合并又不行,,,,,,让一方退一下,让一方舍弃它后来做的修改,(谁写得少,谁舍弃,,,谁刚成为主节点,谁舍弃,,,它有各种策略,)

                # These are EXAMPLE handlers only.

                # They may have severe implications,

                # like hard resetting the node under certain circumstances.

                # Be careful when chosing your poison.

````

                # 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";        #degr: degraded 退化,降低身份

                # 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";        #sb split-brain??

                # local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";            #本地io发生错误了,怎么办

                # 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 {       

 # drbd一启动的时候,两个节点要同步,,,主节点联系不到从节点,不能一直等下去       

 # wfc-timeout 等待多长时间超时    

 # degr-wfc-timeout 多长时间等不到的话 ,就降级了,从主的变成从的

                # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb

        }


        disk {        #不同的drbd,它的disk各不相同,这就不用定义了

                # on-io-error fencing use-bmbv no-disk-barrier no-disk-flushes

                # no-disk-drain no-md-flushes max-bio-bvecs

        }


        net {        

                 # 与网络相关的,定义的是带宽  sndbuf-size发送缓冲大小,,,,,,rcvbuf-size接受缓冲大小,,,,,,timeout超时时间,,,,,connect-int: 连接的初始化,,,,,ping-int:ping初始,,,,,,,ping-timeout:ping超时,,,,,,max-buffers最大缓冲        cram-hmac-alg:加密算法  shared-secret:共享密钥

                # sndbuf-size rcvbuf-size timeout connect-int ping-int ping-timeout max-buffers

                # max-epoch-size ko-count allow-two-primaries cram-hmac-alg shared-secret

                # after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg no-tcp-cork

        }


        syncer {        # syncer: 就是同步的意思吧      rate: 速率,每秒多少兆      verify-alg:    加密方式?

                # rate after al-extents use-rle cpu-mask verify-alg csums-alg

        }

}

[root@node1 drbd.d]#


image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png


4 在两个节点上初始化已定义的资源并启动服务:

1)初始化资源,在Node1和Node2 上分别执行:

# drbdadm create-md web            #create-md创建多设备 md 就是multi device;;;;web是资源

2)启动服务,在Node1和Node2上分 别执行:

/etc/init.d/drbd start   (service drbd start)

3)查看启动状态:

# cat /proc/drbd

version: 8.3.8 (api:88/proto:86-94)

GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@bui lder10. centos.org, 2010-06-84 08:04:16

0: cs:Connected ro:Secondary/Secondary ds: Inconsistent/Inconsistent C ----

ns:0 nr:0 dw:0 dr:0 al:0 bm:0 1o:0 pe:0 ua:e ap:0 ep:1 wo:b 005 :505964

也可以使用drbd-overview命令来查看:

# drbd-overview

0:web Connected Secondary/Secondary Inconsistent/Inconsistent C


从上面的信息中可以看出此时两个节点均处于Secondary状态,

于是,我们接下来需要将其中一个节点设置为Primary,在要设置为Primary的节点上执行如下命令:

# drbdsetup /dev/drbd0 primary -o

注:也可以在要设置为Primary的节点上使用如下命令来设置主节点:

# drbdadm -- --overwrite-data-of-peer primary web        #使用两个双短横;;当前节点为主的,覆写相同身份(另一个节点)上的数据,,,在哪个节点上执行这个命令,哪个节点就是主的,这个命令只能在一个节点上执行;;;;;web是资源名称

5、创建文件系统

文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:

# mke2fs -j -L  DRBD /dev/drbd0        #格式化,一定要在主节点上格式化        -L卷标,卷标其实用不用无所谓了

# mkdir /mnt/drbd    

# mount /dev/drbd0 /mnt/drbd         #挂载            #顺序: 记住先设定主节点 ,然后再挂载,再然后能写文件

6、切换Primary和Secondary节点

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

# cp -r /etc/drbd.* /mnt/drbd                #????这一步是什么目的

# umount /mnt/drbd            #顺序: 先写完文件,然后再卸载,再最后把节点设为从节点

# drbdadm secondary web        #web是资源名 这个命令表示把当前节点设为从节点










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

 }

disk 

{

        on-io-error detach;        # detach 拆卸,拆掉

        #fencing resource-only;

}

net {

cram-hmac-alg "sha1" ;    #alg 即 algorithm 数据报文验证时使用的算法sha1

shared-secret "mydrbdlab" ; #这里mydrbdlab是随机码,最好生成一个随机数放在这里

}

syncer 

{

    rate 1000M;        #同步时使用多大的速率 1000兆

}



/etc/drbd.d/web.res

resource web {        #定义资源的时候使用关键字resource      web是资源名(不能空白字符,任意ascii码都可以),与文件名保持一致,将来找的时候好找

    on node1.magedu.com {    #每个节点必须要能够使用名称的方式解析的对方的节点,对于每个节点来讲,即要知道自己的配置,还要知道对方的配置

            device    /dev/drbd0;      # 在node1上,这个设备的文件名是什么      #与下面一样,相同的内容,可以直接放在 web { 下面

            disk    /dev/sda5;  # 在node1上,它提供的是哪一个磁盘分区     #与下面一样,相同的内容,可以直接放在 web { 下面

            address    172.16.100.11:7789; # 监听在本机的哪一个地址的哪一个端口上

            meta-disk internal;     # drbd的元数据放在 internal (这个设备内部)

    }

    on node2.magedu.com {

            device      /dev/drbd0;

            disk  /dev/sda5;

            address    172.16.100.12:7789;

            meta-disk     internal;

     }

}




 第一个节点 192.168.0.45 上

[root@node1 drbd.d]# vim global_common.conf

........................

                 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";   #去掉注释,启用

........................

disk {

                on-io-error detach;        #所有语句要有分号结尾,否则会有语法错误

                # on-io-error fencing use-bmbv no-disk-barrier no-disk-flushes

                # no-disk-drain no-md-flushes max-bio-bvecs

        }

 net {

                # sndbuf-size rcvbuf-size timeout connect-int ping-int ping-timeout max-buffers

                # max-epoch-size ko-count allow-two-primaries cram-hmac-alg shared-secret

                # after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg no-tcp-cork

                cram-hmac-alg "sha1";         #alg 即 algorithm 数据报文验证时使用的算法sha1

                shared-secret "mydrbd7tj45";        #这里mydrbd7tj45是随机码,最好生成一个随机数放在这里

        }

  syncer {

                rate 200M;

                # rate after al-extents use-rle cpu-mask verify-alg csums-alg

        }



[root@node1 drbd.d]# man drbd.conf        #查看关于drbd的配置的帮助文档

#里面内容太多,只要满足基本应用就行了

image.png


配置drbd资源

第一个节点 192.168.0.45 上

[root@node1 drbd.d]# 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";    # .res结尾的 都是资源

[root@node1 drbd.d]#

[root@node1 drbd.d]# vim mydrbd.res        #有个资源叫 mydrbd,,那么配置文件就叫 mydrbd.res 吧,与资源名称相一致

    #定义资源的时候使用关键字resource      mydrbd是资源名

[root@node1 drbd.d]# vim mydrbd.res

resource mydrbd{

        device /dev/drbd0;        #每一个语句使用分号结尾

        disk   /dev/sdb6;

        meta-disk internal;

        on node1.magedu.com{

                address 192.168.0.45:7789;

        }

        on node2.magedu.com{

                address 192.168.0.55:7789;

        }

}


第一个节点 192.168.0.45 上

复制配置文件到 第二个节点 192.168.0.55 上


[root@node1 ~]# scp /etc/drbd.* node2:/etc

drbd.conf                    100%  133     0.1KB/s   00:00

/etc/drbd.d: not a regular file        #不正确


[root@node1 ~]# scp -r  /etc/drbd.* node2:/etc        #加上-r吧

drbd.conf                    100%  133     0.1KB/s   00:00

global_common.conf           100% 1690     1.7KB/s   00:00

mydrbd.res                   100%  188     0.2KB/s   00:00

[root@node1 ~]#



第二个节点 192.168.0.55 上

[root@node2 ~]# 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@node2 ~]#

[root@node2 ~]#



第一个节点 192.168.0.45 上     

在两个节点上初始化已定义的资源并启动服务:

1)初始化资源,在Node1和Node2 上分别执行:


[root@node1 ~]# drbdadm create-md mydrbd             # (第二个节点192.168.0.55同样执行一遍)




















  --==  Thank you for participating in the global usage survey  ==--

The server's response is:


you are the 24744th user to install this version

Writing meta data...

initializing activity log

NOT initialized bitmap

New drbd meta data block successfully created.

success

[root@node2 ~]#


[root@node1 ~]# service drbd start        #启动不了,等待另一个节点 drbd 的启动

Starting DRBD resources: [ d(mydrbd) s(mydrbd) n(mydrbd) ]..........

***************************************************************

 DRBD's startup script waits for the peer node(s) to appear.

 - In case this node was already a degraded cluster before the

   reboot the timeout is 0 seconds. [degr-wfc-timeout]

 - If the peer was available before the reboot the timeout will

   expire after 0 seconds. [wfc-timeout]

   (These values are for resource 'mydrbd'; 0 sec -> wait forever)

 To abort waiting enter 'yes' [  35]:


第二个节点 192.168.0.55 上     

[root@node2 ~]# service drbd start        #这样的话,,,,本节点启动了,,,此时上面 第一个节点192.168.0.45 就能够启动了

Starting DRBD resources: [ d(mydrbd) s(mydrbd) n(mydrbd) ].

[root@node2 ~]#


第一个节点 192.168.0.45 上     

[root@node1 ~]# cat /proc/drbd    #查看状态的命令

version: 8.3.15 (api:88/proto:86-97)

GIT-hash: 0ce4d235fc02b5c53c1c52c53433d11a694eab8c build by mockbuild@builder17.centos.org, 2013-03-27 16:04:08

 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----    #Inconsistent两个节点处于不一致的状态,都是Secondary,将来可以把一个提升为主的

    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:987896

[root@node1 ~]#

[root@node1 ~]# drbd-overview        #也是查看状态的命令

  0:mydrbd  Connected Secondary/Secondary Inconsistent/Inconsistent C r-----

[root@node1 ~]# drbdadm -- --overwrite-data-of-peer primary mydrbd

mydrbd

[root@node1 ~]#

 [root@node1 ~]# cat /proc/drbd    #我这边没有看到同步数据,,,,难道快速的同步完了

version: 8.3.15 (api:88/proto:86-97)

GIT-hash: 0ce4d235fc02b5c53c1c52c53433d11a694eab8c build by mockbuild@builder17.centos.org, 2013-03-27 16:04:08

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

    ns:987896 nr:0 dw:0 dr:987896 al:0 bm:61 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

[root@node1 ~]#        #马哥这边看到同步数据了 

image.png

[root@node1 ~]# watch -n 1 'cat /proc/drbd'    # 没看到同步,,,难道快速的同步完了

image.png

马哥的看到同步了

image.png

马哥说 rate 小的话,同步就会很慢 下图,马哥同步结束了

image.png


第一个节点 192.168.0.45 上     

[root@node1 ~]# drbd-overview    #查看简要信息,一主一从了,,而且当前状态己经更新了 前面 Primary 表示自己,后面 Secondary 表示对方

  0:mydrbd  Connected Primary/Secondary UpToDate/UpToDate C r-----

[root@node1 ~]#


第二个节点 192.168.0.55 上     

[root@node2 ~]# drbd-overview         #查看简要信息,一从一主了, 前面 Secondary 表示自己,后面 Primary 表示对方

  0:mydrbd  Connected Secondary/Primary UpToDate/UpToDate C r-----

[root@node2 ~]# 



格式化

这得在主节点上格式化

第一个节点 192.168.0.45 上     

[root@node1 drbd.d]# mke2fs -j /dev/drbd0        #格式化 drbd ,如若有错,请查看 /node-admin/15759

mke2fs 1.39 (29-May-2006)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

123648 inodes, 246974 blocks

12348 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=255852544

8 block groups

32768 blocks per group, 32768 fragments per group

15456 inodes per group

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376


Writing inode tables: done

Creating journal (4096 blocks): done

Writing superblocks and filesystem accounting information: done


This filesystem will be automatically checked every 29 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@node1 drbd.d]#

[root@node1 drbd.d]# mkdir /mydata3

[root@node1 drbd.d]# mount /dev/drbd0  /mydata3        #挂载

[root@node1 drbd.d]# cd /mydata3

[root@node1 mydata3]# ls

lost+found

[root@node1 mydata3]# cp /etc/inittab ./

[root@node1 mydata3]# pwd

/mydata3

[root@node1 mydata3]# ls

inittab  lost+found


调换一下主从

第一个节点 192.168.0.45 上     

[root@node1 mydata3]# cd

[root@node1 ~]# umount /mydata3        #一定要先卸载,因为从的不能挂载,不能任何访问

[root@node1 ~]# drbdadm secondary mydrbd        #让本节点成为从的(对于mydrbd这个资源来讲,是从的)

[root@node1 ~]# drbd-overview                #此时两个都是从的

  0:mydrbd  Connected Secondary/Secondary UpToDate/UpToDate C r-----

[root@node1 ~]#


让node2成为主的

第二个节点 192.168.0.55 上     

[root@node2 ~]# drbd-overview        #都是从的

  0:mydrbd  Connected Secondary/Secondary UpToDate/UpToDate C r-----

[root@node2 ~]# drbdadm  primary mydrbd        #让本节点成为主的

[root@node2 ~]# mkdir /mydata3

[root@node2 ~]# mount /dev/drbd0 /mydata3        #挂载

[root@node2 ~]# cd  /mydata3

[root@node2 mydata3]# ls        #看到了inittab

inittab  lost+found

[root@node2 mydata3]#


以上的操作是手动切换它俩的主从关系

如果在高可用环境中使用的话,(比如在两个节点上装上corosync(messagin layer),pacemaker),

将drbd配置成pacemaker的一个资源

但是drbd比较独特,是主从类别的资源


普通分类: