Linux运维 第五阶段(五)drbd

Linux运维 第五阶段(五)drbd

 

一、相关概念:

drbddistributed replicated block devicewww.linbit.com,通过网络将不同主机上磁盘中的分区做成镜像,块级别镜像,可理解为主机级别的RAID,默认只能通过一个node挂载,而备node不能挂载使用)

 

DASSCSI总线,支持7-16个设备,controller内置在主板上的芯片,adapter通过PCI插槽或PCI-E连接的卡,如RAID卡)

NASfile-server

SANSCSI报文借助FCTCP/IP隧道,可实现远距离传输)

在有些场景下,DASNASSAN都不适用,采用DRBD

 

RAID1mirror,两磁盘空间一样大,两磁盘内部之间是按位逐一对应起来,关键这两块磁盘要在同一主机

 

drbd:是内核功能,内核模块,类似ipvs,需要时载入内核并启用规则drbd能将两个主机上的两个磁盘分区做成镜像设备,通过网络将两磁盘分区按位对应起来

 

drbd有主从primary/secondary概念:

在某一时刻仅允许当前的primary-node挂载,有读写操作,而secondary绝不能挂载(也就是同一时刻两个node中一个为primary,另一个必定是secondary);

仅允许两个node(要么主从,要么双主);

作为主从资源可自动切换

 

drbd支持双主模型(dual master),两个node可同时挂载,前提要基于CFScluster filesystemDLMdistributed lock manager)完成(OCFS2GFS2);dual master对效率提升并没有帮助(不是并行读写,是阻止了另一node写),只是实现了多机可以使用同一个FS

 

在高可用集群场景中,使用pacemakerdrbd被定义为资源(drbd作为高可用集群服务),若使用双主模型FS要格式化为CFSDLM要定义为集群资源

 

wKiom1ZkD1riR7lCAAB8oOHezLc810.jpg

service<-->FS(用户空间进程向内核请求FS相关的系统调用,APIopen()read()write()等),通过内核的API输出给用户空间)

注:不同的FS,系统调用的名称会不一样,所接受的参数也会不一样,参数个数也不一样,通过VFS将不同的FS弥合起来

FS<-->buffer cache<-->disk scheduler(内核会在内存中找一段空间,用于buffer cache(缓存源数据、数据等),对文件的读写是在buffer cache中完成的;对于读,buffer cache中放的是文件的附本,这段内存若被清空,下次访问到该文件再读取即可;对于写,先存在buffer cache中,过一会系统会安排自动同步到磁盘上,若是机械硬盘要等到对应的磁道和扇区转过来才开始写,若有多个写操作通过disk scheduler将相邻的磁道或扇区上的操作进行合并和排序,从而提高性能)

注:disk scheduler,磁盘调度器,合并读请求,合并写请求,将多个IO合并为较少IO,对于机械式硬盘,将随机读写转为顺序读写,性能提升会非常明显

disk<-->driver(任何驱动一般都在内核中执行(至关重要),驱动完成具体的读写操作,驱动知道读或写的地址在哪(哪个磁道,哪个扇区))

drbd(可理解为过滤器,对于非drbd的操作它不管,不做任何处理)

 

三种数据同步协议(返回告知app已完成):

A模型(发至本地的TCP/IP协议栈时就返回成功,异步async,对于性能来说此模型靠谱,性能靠谱)

B模型(发至对方TCP/IP协议栈返回成功,半同步semi-sync

C模型(存储到对方磁盘后返回成功,同步sync,数据靠谱,默认使用C模型)

 

考虑到的问题?千兆网卡,加密传输

 

一个主机内只要不是相同的分区可以做多个drbd,各自都要定义好用哪个磁盘,通过哪个网络,要不要加密,占据多少带宽,如某个drbdprimary,secondary角色会随时转换,每个主机上都要运行app并监听在socket上(双方的port,使用的硬盘,使用的网卡要规划好)

 

定义一组drbd设备(drbd的资源),drbd resource包含四个属性:

resource name(可以是除空白字符外的任意ASCII码字符);

drbd device(在双方node上,此drbd设备的设备文件一般为/dev/drbdNUM,其主设备号为147,次设备号用于标识不同的设备,类似RAID/dev/md{0,1});

disk configuration(磁盘,在双方node上,各自提供的存储设备);

network configuration(双方数据同步时所使用的网络属性)

 

user space administration tools

drbdadmhigh-level,类似ipvsadm,从/etc/drbd.conf中读取配置,这个文件仅定义了要读取/etc/drbd.d/下的*.conf*.res所有文件)

drbdsetuplow-level(底层,选项和参数使用复杂),没drbdadm简单)

drbdmetalow-level,底层,操作drbd的源数据(与文件的源数据不是一回事),是维护drbd设备所用到的源数据,drbd的源数据可放在本地磁盘内(internal一般使用)也可放在另一磁盘)

 

 

二、操作:

环境redhat5.8 i386 2.6.18-308.el5,两个节点node1node2

准备软件包(http://mirrors.163.com/centos/5/extras/i386/RPMS/):

drbd83-8.3.15-2.el5.centos.i386.rpm(工具包)

kmod-drbd83-8.3.15-3.el5.centos.i686.rpm(内核模块)

注:内核2.6.33后才整合到内核中,centos提供了内核模块及用户空间的工具包

准备环境(参照集群第二篇heartbeatV2)有:时间同步、ssh双机互信、主机名、/etc/hosts文件、两节点都准备一个2G分区,不要格式化

 

node1-side

#scp /root/*.rpm  root@node2:/root/

#for I  in  {1..2};do ssh  node$I  ‘yum -y  --nogpgcheck  localinstall /root/*.rpm’;done

#rpm -ql  drbd83

/etc/drbd.conf

/etc/drbd.d/global_common.conf

/etc/ha.d/resource.d/drbddisk

/etc/ha.d/resource.d/drbdupper

/sbin/drbdadm

/sbin/drbdmeta

/sbin/drbdsetup

/usr/sbin/drbd-overview(显示drbd简要信息)

#cp /usr/share/doc/drbd83-8.3.15/drbd.conf  /etc/drbd.conf

#vim /etc/drbd.conf

include"drbd.d/global_common.conf";

include "drbd.d/*.res";*.res是定义的资源)

 

#vim /etc/drbd.d/global_common.conf

global {

         usage-count no;(主机若在互联网上,开启此项会自动发信息给原作者用于统计装机量等)

}

common {(提供默认属性定义,多个node中的资源若相同可放在common段)

         protocol C;(数据同步协议,ABC三种模型)

         handlers{(处理程序,若drbd故障如脑裂,要让某一方舍弃,通过脚本实现不同的策略,如谁写的少谁舍弃或谁刚成为主节点谁舍弃等策略)

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

         }

         startup{drbd设备刚启动时要同步,若当前主联系不上从,此处定义timeoutdegrade降级的timeout等)

                   #wfc-timeout 120;

# degr-wfc-timeout 120;

         }

         disk{(不同的drbddisk不同)

                   on-io-error detach;

                   #fencing resource-only;

         }

   net {

       cram-hmac-alg "sha1";(定义加密)

       shared-secret "mydrbd";

    }

   syncer {

       rate 1000M;

    }

}

 

#vim /etc/drbd.d/mydrbd.res

resource mydrbd  {

 device  /dev/drbd0;

  disk  /dev/sdb1;

 meta-disk  internal;

 on  node1.magedu.com  {

  address  192.168.41.129:7789;

  }

 on  node2.magedu.com  {

  address  192.168.41.130:7789;

}

}

 

#scp -r  /etc/drbd*  node2:/etc/

#drbdadm help

#drbddam create-md  mydrbd(初始化drbd,两个节点都要初始化)

 

node2-side

#drbdadm create-md  mydrbd

 

node1-side

[root@node1 ~]# cat  /proc/drbd(查看状态inconsistent为不一致状态)

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

GIT-hash:0ce4d235fc02b5c53c1c52c53433d11a694eab8c build [email protected], 2013-03-27 16:04:08

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

[root@node1 ~]# drbd-overview(查看状态)

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

[root@node1 ~]# drbdadm  --  --overwrite-data-of-peer  primary  mydrbd(将当前node设为主,注意该命令只在一个node上执行,也可用命令#drbdsetup  /dev/drbd0 primary  -o

[root@node1 ~]# drbd-overview(有了主从,且数据同步正在进行,也可用命令#watch  -n  1  ‘cat  /proc/drbd’实时查看状态)

 0:mydrbd  Sync Source Primary/Secondary UpToDate/Inconsistent C r---n-

         [==>.................]sync'ed: 16.3% (1760348/2096348)K

[root@node1 ~]# drbd-overview

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

 

node2-side

[root@node2 ~]# drbd-overview(以下显示的Secondary/Primary,前面的属于自己的状态,后面的是另一node的状态)

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

 

node1-side

[root@node1 ~]# mke2fs -j /dev/drbd0

[root@node1 ~]# mkdir /mydata

[root@node1 ~]# mount /dev/drbd0 /mydata

[root@node1 ~]# ls /mydata

lost+found

[root@node1 ~]# cp /etc/issue /mydata

[root@node1 ~]# umount /mydata(注意:重要,将当前node转为从之前要先卸载FS

[root@node1 ~]# drbdadm secondary mydrbd(将当前node转为从)

[root@node1 ~]# drbd-overview

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

 

node2-side

[root@node2 ~]# drbdadm primary mydrbd(将当前node转为主)

[root@node2 ~]# drbd-overview

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

[root@node2 ~]# mkdir /mydata

[root@node2 ~]# mount /dev/drbd0 /mydata

[root@node2 ~]# ls /mydata

issue lost+found

 

 

 

 

以上是学习《马哥运维课程》做的笔记。


本文出自 “Linux运维重难点学习笔记” 博客,谢绝转载!

你可能感兴趣的:(linux运维)