存儲設備詳解及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:我的水平有限,不足之處請指出!

相關文章
相關標籤/搜索