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

存储类型设备php


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



#主板上有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,是否会出现资源的争用?node

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


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



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


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

      增大网络带宽,好比使用万兆以太网网络链接NAS存储;sql


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

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(以太网传输)等


wKioL1NbFG3jVXrUAABkOUlZHW8555.jpg


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


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


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



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




DRBD服务器


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


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


工做机制

wKioL1NbGhmT3PWVAAHNggmK-64754.jpg


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



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



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


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

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


  (二)DRBD 的工做模型


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


  (三)DRBD 的角色



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



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


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


  (五) DRBD的组成部分


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



配置DRBD --主从模式


  (一)必备步骤


#一、同步时间
#二、解析主机名
   node11.linux.com node11  192.168.1.97
   node12.linux.com node12  192.168.1.98
#三、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.html
drbd-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


     node十一、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/sda
node十一、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 两个文件在node十一、node12上必须相同



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


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



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


wKiom1NbJzrhJiqXAACfMyzVR14889.jpg




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


wKioL1NbJ8mzxvGhAAELmh2Ho3E292.jpg



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


wKiom1NbKHvRSmaiAABUpU-LAqw753.jpg

     此时尚未主节点与从节点,而且数据不一致


    (七)设置主节点



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


wKiom1NbKj3xnOx6AAFwG-D1dlY256.jpg



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


wKiom1NbKzPiPIBvAAEmyS3DFT0662.jpg



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

wKioL1NbK9LCFsa-AAB2DvqLuDw109.jpg



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


wKioL1NbLDLzzppZAABYSSoNHDs431.jpg


   (八) 格式化磁盘



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


wKiom1NbLY-SbLdFAAAh43r60RQ385.jpg


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


    根据上边node十一、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/
node十一、node12 启动corsync服务
#service corosync start
#crm status 查看当前节点状态


wKiom1NbObLDkMqJAAE8o1rkaSw434.jpg


   (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

wKioL1NbOenguQXgAAC9VBxOLpQ200.jpg



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

wKiom1NbOsPSBsTaAAHckRERiwA720.jpg



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

wKiom1NbO6mCygkKAABevIbOUPQ929.jpg



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
切记不要提交commit
6)定义顺序约束(必定是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


wKioL1NbPiTQ4rLuAAN9ZWSsmQg652.jpg


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



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


wKiom1NbP4Pi6MO-AAH2P684x-Y652.jpg



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


wKioL1NbP_mDOg0KAAFk0qQ8Ws8853.jpg


wKiom1NbQDqiCBhEAAAmpro9kVk727.jpg


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



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


wKioL1NbQOeSy7qqAACu-OY0gkg476.jpg



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

wKiom1NbQXWRwSX8AABWfKeq7xU339.jpg


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



拓展篇+


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




PS:我的水平有限,不足之处请指出!

相关文章
相关标签/搜索