存儲類型設備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(以太網傳輸)等
思考: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設備。
工做機制:
如上圖所示: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 管理工具 建立設備 資源名
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在文件系統上的高可用
根據上邊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 查看當前節點狀態
(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:我的水平有限,不足之處請指出!