存储设备详解及DBDR+pacemaker的实现

时间:2021-02-27 12:45:08

存储类型设备


  1、 DAS :Direct Attach Storage 直接附加存储,块级别设备



#主板上有CPU,运算器,控制器,存储器,自重内存属于非持久性存储(cup的临时存储),硬盘 (持久性存储)           硬盘                     接口
IDE (ATA):133MB/S 并行接口
SATA : 600MB/s 串行接口
SCSI : 640MB/s 并行接口
SAS : 6Gbps 串行接口
USB : 480MB/s USB3.0
# 接口:不同的存储设备使用的总线不同,从而有自己特定的连接接口连接到主板总线上,由控制器控制;
# I/0控制器:控制硬件设备完成电气动作,将cpu和内存中的数据信号转换为能够在总线线缆上传输的电气信号,从而实现数据转换传输并存储;
# 知识点:HBA,即主机总线适配器英文“Host Bus Adapter”缩写。是一个在服务器和存储装置间提供输入/输出(I/O)处理和物理连接的电路板和/或集成电路适配器。

板载的为控制器(controler ),不是板载而是外部 扩展的则为适配器 (adapter)
如果主板上PCI PCI-E扩展槽,适配器板卡插在这些插槽上;
总结:适配器或者板载的控制器连接的存储都是DAS设备--------因为其直接连在了主板总线上,由主机主板提供电源。


    思考:两个节点同时使用同一个DAS,是否会出现资源的争用?

#任何一个客户机挂载一个块级别的存储设备,对数据和元数据的操作时是在内存中实现的,然后由内存同步到磁盘当中,所以两个主机无法看到彼此的操作,因此存在对资源的争用情况;------因为块级别设备等级太低,-------如此一来可能会导致数据的损坏;


 2、NAS :Network Attached Storage 网络附加存储 ,文件系统级别



#NFS文件系统被主机识别为一个文件系统,不同于DAS,DAS被主机识别为块设备可以直接分区格式化,而NFS不可以!                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           #接口:文件API,文件共享服务器,文件系统级别,却无法对其分区格式化,已经是现成的文件系统,直接挂载使用#能够提供NAS的协议:NFS协议,SMB协议(samba)#在网络上传输的是封装好的文件,使用TCP/IP协议封装数据传输的。#缺陷:基于网络封装传输,存在性能问题


     思考:如何提高NAS存储的吞吐量?

      增大网络带宽,比如使用万兆以太网网络连接NAS存储;


  3 SAN :Storage Area Network 存储区域网络,块级别

SCSI:Small Computer System Interface 小计算机系统接口#窄带的SCSI:共8个接口,7个用于连接硬盘,1个用于做终结器#宽带的SCSI:共16个接口,15个用于连接硬盘,1个用于做终结器#不论窄带还是宽带,终结器接口一般为第7个思考:如何标记SCSI一个总线上的每个磁盘?# 每个硬盘设定为一个target,使用target id 标识其位置SCSI机制思考:文件如何存放到对应的磁盘上?#文件由内核封装为数据块 ,内核调用主机上的适配器或者控制器 与磁盘通过总线中特定线缆通信,(线缆上运行的为scsi协议),使用scsi协议将数据块封装了scsi报文首部(包括目标地址),然后经过scsi线缆传输到特定目标地址的磁盘上;SAN机制 ----由SCSI机制拓展而来# 数据块设备借助一个特定底层传输隧道(以太网、光缆) 替代scsi 线缆,从而将数据传输到特定网络的存储磁盘上;# 文件存储的信号传输 :包括 FC(光纤传输),FCoE(光信号在以太网传输),iSCSI(以太网传输)等


存储设备详解及DBDR+pacemaker的实现


思考:initiator请求端,target目标端;如果目标端的磁盘数量不够用如何解决?


#将target作为一个大的逻辑单元,分隔为多个lun(Logical Unit Number),一个lun就作为一个存储磁盘使用;


思考:SAN存储的架构中,能否实现两个主机同时对一个target或者一个lun读写?



#SAN虽然实现了DAS的远距离传输(借助于FC,Internet等特定介质)----但是它依然是块级别。两个节点同时读写,依然会导致数据损坏;---------SAN和NAS的区别体现于此;




DRBD


DRBD:Distributed Replicated Block Device 分布式复制块设备 ,块级别存储


#DRBD 属于内核中的一种功能,实现本身无法复制的数据文件能够在内核级别进行传输复制,不再依赖于程序本身。#DRBD 属于块级别的存储,本地一份数据,异地一份镜像数据,类似于RAID1,不过RAID1属于同一台机器,DRBD可以理解为两个位于网络连接的DAS设备。


工作机制

存储设备详解及DBDR+pacemaker的实现


如上图所示:DRBD工作在了内核中,借助于网络实现跨主机存储,生成按位对应的镜像。块设备级别,即可以对其进行分区格式化



   (一)DRBD 的工作协议及与之对应的复制工作模式



A 协议#异步模式 DRBD---TCP/IP 即可B 协议#半同步模式 NIC---NIC---NII Driver---TCP/IP即可C 协议#同步模式 DRBD--TCP/IP--NIC Driver---TCP/IP--DRBD--Disk Scheduler --DiskDriver --Disk Storage


   默认工作模式为C协议 同步模式,从而保障了数据的安全,同时带来了网络I/0性能的降低,需要强大的网络带宽

   生产环境中,本人认为数据安全放在第一位,使用C协议同步模式;当然可以自行定夺!


  (二)DRBD 的工作模型


主从模型#主节点的可以读写;从节点不可以读写,因为其无法挂载双主模型#资源必须以克隆资源的形式存在,分别存在于每个节点上;此时该资源作为高可用资源存在,一般在文件系统的高可用上使用;


  (三)DRBD 的角色



primary:主节点,可读写secondary:从节点,不能挂载更不可能读写#缺点:DRBD在角色的切换比较慢!并且需要手动实现角色的升级与角色降级,不过考虑到DRBD的性价比,比起那些昂贵的存储设备,可以选择



  (四)DRBD 发生集群分裂后的处理


针对两个节点来讲#方法一:以谁的数据最新为准#方法二:以谁的数据最老为准#方法三:以谁的数据变化最少为准#方法四:以谁的数据变化最大为准以上四种方法根据情况而使用


  (五) DRBD的组成部分


用户空间工具+内核模块(2.6.33及以后版本的内核)#用户空间工具(drbdadm):跟内核版本关系松散,只要能使用于Centos 6及对应硬件平台就可以#内核模块:必须与当下的内核版本严格对应;



配置DRBD --主从模式


  (一)必备步骤


#1、同步时间#2、解析主机名   node11.linux.com node11  192.168.1.97   node12.linux.com node12  192.168.1.98#3、ssh交换密钥#以上步骤请参照我的博客:


   (二)安装drbd用户工具,drbd-kmdl内核工具


drbd 工具包下载#http://rpm.pbone.net/index.php3/stat/4/idpl/21657218/dir/redhat_el_6/com/drbd-8.4.3-33.el6.x86_64.rpm.htmldrbd-kmdl 内核工具包下载#ftp://fr2.rpmfind.net/linux/atrpms/el6-x86_64/atrpms/stable/drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm


     node11、node12两个节点安装


#rpm -ivh drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm


   (三)编辑配置文件


node11 上操作#cd  /etc/drbd.d#vim global_common.conf handlers  { --------处理器(特定条件下执行的脚本或者程序)                    pri-on-incon-degr  -------主节点降级后的动作,开启                    pri-lost-after-sb  -------集群脑裂后的动作,开启                    local-io-error     -------本地io错误后的动作,开启                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               starup { ---------------启动时                  wfc-timeout   120;    ------等待时间,开启                  degr-wfc-timeout 240;------降级等待时间,开启                   outdated-wfc-timeout ------超时等待时间,开启                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              options {  --------------调优时使用                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                disk     { --------------定义磁盘设备                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       on-io-error   detach; ------一旦io错误就拆除,开启     net    {                protocol   C ; --------使用C协议,同步复制模式,开启                cram-hamc-alg "sha1"; ------消息认证机制,加密使用sha1                shared-secret "2597758"; ------共享的密码     syncer {     ------------------定义数据占用的带宽                 rate 1000M


   (四)创建磁盘分区


#两个节点都要创建分区,提供组件drbd设备的磁盘#fdisk /dev/sda n +5G w#partx -a /dev/sdanode11、node12分别创建一个5G大小的/sda9


   (五) 配置资源



node11 上配置#cd  /etc/drbd.d#vim mystore.res 内容如下                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   resource mystore {               on node11.linux.com {                     device   /dev/drbd0;                     disk     /dev/sda9;                     address  192.168.1.97:7789;                     meta-disk internal;                }                on node12.linux.com {                      device  /dev/drbd0;                      disk    /dev/sda9;                      address  192.168.1.98:7789;                      meta-disk  internal;               }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     }#resource name :可以使用除空白字符外的任意ACSII表中的字符;#drdb设备       :drbd的设备的访问路径,设备文件 /dev/drbd##disk          :各节点为组成此drbd设备所提供的块设备#网络属性       :节点间为了实现跨主机磁盘镜像而使用网络配置###只有在使用drbdadm工具时(或者启动服务时)才会读取配置文件;对于多个资源的公共配置,可以提取出来只配置一次,通常保存在common中;此外还有global配置;除此以外以上的资源不会被使用;


    以上global.common.conf 和 mystore.res 两个文件在node11、node12上必须相同



#scp  golobal_common.conf mysqtore.res node12:/etc/drbd.d/


   (六)两个设备上初始化资源,启动drbd服务



1)初始化资源,在node11、node12上分别执行# drbdadm create-md mystore  管理工具  创建设备 资源名


存储设备详解及DBDR+pacemaker的实现




2) 启动drbd服务,第一次读取配置文件(node11,、node12)# service drbd start


存储设备详解及DBDR+pacemaker的实现



3)各节点查看当前的role# drbd-overview


存储设备详解及DBDR+pacemaker的实现

     此时还没有主节点与从节点,并且数据不一致


    (七)设置主节点



node12 上设置为主节点# drbdadm primary --force mystore# watch -n 1 'cat /proc/drbd' 查看主节点数据同步情况


存储设备详解及DBDR+pacemaker的实现



node11 上查看# watch -n 1 'cat /proc/drbd'


存储设备详解及DBDR+pacemaker的实现



主节点降级,node12上操作#drbdadm secondary mystore#drbd-overview

存储设备详解及DBDR+pacemaker的实现



从节点升级,node11上操作#drbdadm primary mystore#drbd-overview


存储设备详解及DBDR+pacemaker的实现


   (八) 格式化磁盘



node11 (此时node11为主节点)# mke2fs -t ext4 /dev/drbd0   格式化磁盘# mkdir /mysqldata            创建目录# mount /dev/drbd0 /mysqldata  挂载磁盘到目录# cd /mysqldata                进入目录# touch 1.txt                  创建文件# umount /mysqldata            -----------卸载/mydata# drbdadm  secondary mystore   ------------主节点先降级node12# drbdadm primary  mystore       -------------从节点先升级# mkdir /mysqldata                     # mount /dev/drbd0  /mysqldata    -------------挂载/dev/drbd0 到 /mydata# cd /mysqldata# ls


存储设备详解及DBDR+pacemaker的实现


DRBD+Pacemaker 实现DRBD在文件系统上的高可用


    根据上边node11、node12实现的DRBD结构,下边我们来实现DRBD在文件系统上的高可用


    (1)安装程序包


#yum -y install corosync pacemaker#yum -y install crmsh-1.2.6-4.el6.x86_64.rpm pssh-2.3.1-2.el6.x86_64.rpm注意:安装pacemaker之前确保没有安装hearbeat,否则会冲突


   (2)保证集群资源开机不能启动


#cat /proc/drbd     ------查看node11当前角色#umount /mysqldata  --------卸载#drbdadm secondary mystore  --------角色降级,保证当前两个节点没有升级角色#service drbd stop     -----停止drbd服务#chkconfig drbd off    -----开机不启动

   (3)配置corosync


提供配置文件并编辑#cd  /etc/corosync#cp corosync.conf.example corosync.conf#vim corosync.conf  做如下修改secauth: on       bindnetaddr: 192.168.0.0       mcastaddr: 226.94.1.1       to_syslog: no       timestamp: off     service {        name: pacemaker        ver: 0}      aisexec {       user: root       group: root}



提供aukeys,保证各个节点信息传递安全# mv /dev/random/  /dev/random.bak# ln /dev/urandom /dev/random# coronsync-keygen# rm /dev/random# mv /dev/random.bak /dev/random



将corosync.conf  authkeys 文件拷贝到node12上一份,保证两个节点相同#scp corosync.conf authkeys node12:/etc/corosync/node11、node12 启动corsync服务#service corosync start#crm status 查看当前节点状态


存储设备详解及DBDR+pacemaker的实现


   (3)添加集群资源



1)集群资源默认属性配置#crm# crm(live)# configure# crm(live)configure# #property stonith-enabled=false# crm(live)configure##property no-quorum-policy=ignore# crm(live)configure##property default-resource-stikiness=100# crm(live)# configure# show

存储设备详解及DBDR+pacemaker的实现



2)设置drbd资源(mystore)设置为主资源类型# crm(live)configure# primitive mysqlstore ocf:linbit:drbd params drbd_resource=mystore op monitor role=Master interval=30s timeout=20s op monitor role=Slave interval=60s timeout=20s op start timeout=240s op stop timeout=100s# crm(live)configure# verify# crm(live)configure# commit# crm(live)configure# show

存储设备详解及DBDR+pacemaker的实现



3)将drbd|(mystore)的主资源类型设置为主从资源类型# crm(live)configure# master ms_sqlstore mysqlstore meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify="True"# crm(live)configure# verify# crm(live)configure# commit# crm(live)configure# show

存储设备详解及DBDR+pacemaker的实现



4)再定义一个主资源:文件系统资源mysqlfs,并且其必须要和主从资源的主节点上的资源在一起# crm(live)configure# primitive mysqlfs ocf:heartbeat:Filesystem params device=/dev/drbd0 directory=/mysqldata fstype=ext4 op monitor interval=40 timeout=60 op start timeout=60s op stop timeout=60s on-fail=restart# crm(live)configure#verify切记,此处不要提交commit



5)定义排列约束(定义mysqlfs主资源必须和 my_mysqlstore主从资源的主节点在一起)# crm(live)configure# colocation mysqlfs_with_ms_msyqlstore_master inf: mysqlfs ms_sqlstore:Master# crm(live)configure#verify切记不要提交commit6)定义顺序约束(一定是ms_sqlstore主从资源有一个节点先升级为主节点后,再挂载文件系统)# crm(live)configure# order mysqlfs_after_ms_sqlstore_master inf: ms_sqlstore:promote mysqlfs:start# crm(live)configure#verify# crm(live)configure#show


存储设备详解及DBDR+pacemaker的实现


# crm(live)configure#show xml  ---自我排查是否有错误# crm(live)configure#commit    ---提交事务



7)查看当前的资源及节点状态# crm status


存储设备详解及DBDR+pacemaker的实现



8)node11上查看# mount   --------查看当前已挂在的文件系统# cd /mysqldata# ls


存储设备详解及DBDR+pacemaker的实现


存储设备详解及DBDR+pacemaker的实现


     这个时候我们将node11设为备用,查看node12是否会自动升级为主节点,并挂载文件系统



9)node11 设为备用# crm node standby node11.linux.com# crm status


存储设备详解及DBDR+pacemaker的实现



node12 上查看挂载情况# cd /mysqlsta# ls

存储设备详解及DBDR+pacemaker的实现


   node12 已经由从节点自动升级为了主节点,并将文件系统挂载了本地。基于文件系统的drbd高可用已经成功实现



拓展篇+


如果加一个mysql 资源,将mysql的数据存放在 /mysqldata目录中,成为一个mysql集群,需要注意什么?#VIP、 mysql资源代理、  mysqlfs文件系统资源  都要和ms_sqlstore:Master在一起 (定位为组资源即可)




PS:个人水平有限,不足之处请指出!

本文出自 “西风瘦猪” 博客,请务必保留此出处http://jungege.blog.51cto.com/4102814/1403350