DBDR+pacemaker

存储类型设备


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


     

 

        思考: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设备。

   

               工作机制

       

             

     

如上图所示: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 --主从模式


  (一)必备步骤

     

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

 

     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/sda
node11、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
  管理工具  创建设备 资源名


     


   


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


     


     

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


     

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


    (七)设置主节点

       

       

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

   

     

   

 

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


   


   

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

   

   

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



   (八) 格式化磁盘


   

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


   


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 查看当前节点状态

   

   


   (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

   

   

   

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

   

   

   

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
                                                                                                                                                                                                 
                                                                                                                                                                                            

   


 

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

   

   

   

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

   

   

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


     


   

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

   

     


     


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

     

     

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


     


     

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

     


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



拓展篇+

   

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

     

 


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

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

DBDR+pacemaker,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。