一、分佈式文件系統和單機文件系統的區別:
單機文件系統的分區只能被一臺主機所掛載,不能同時被多臺主機掛載使用,因爲單機文件系統是通過系統內核層的鎖機制來完成的,所以一個系統上可以有多個進程訪問,但只能在一個時間點上有一個進行寫操作。
分佈式文件系統和單機最大區別就是,它的鎖機制是在不同的主機內核層可以相互通信,保證只有一個進程寫操作的。
分佈式鎖的實現要通過分佈式程序來完成,可以通過zookeeper(分佈式應用程序協調服務)來完成,也可以通過高可用來完成,也就是在多個節點(使用分佈式文件系統的主機)間建立一個高可用信息通信層,比如corosync、cman,通過cman或者corosync來實現分佈式鎖的通信功能。分佈式鎖管理器(DLM),是在系統的內核層中實現的功能,這種功能也並不是所有系統都有,有的需要安裝,DLM和高可用的信息通信層程序(corosync,cman)配合完成分佈式鎖功能
這時使用的文件系統就不能是ext3、ext4這樣的單機文件系統了,否則無法實現分佈式文件系統的功能了,那麼常見的分佈式文件系統就是GFS2、OCFS2啦。
centos6.5實現高可用的方式:
1、corosync+pacemaker
corosync1.0使用cman的投票系統,而到了corosync2.0則使用了自己的投票系統。實際上的cman已經取代了corosync的地位。
2、heartbearv3+pacemaker
3、cman+rgmanager
4、cman+pacemaker
二、常見硬盤接口講解:
IDE:並行、133MB/S
/dev/hd
SCSI:小型機系統接口
並行,多類型接口,Ultra320 320MB/S,SCSI總線是scsi設備間傳輸數據的通路。scsi設備通過scsi總線和scsi控制器通信,這個控制器就是一個scsi的板卡,總線分爲寬總線和窄總線之分,這個也是和控制器有關的,那窄總線來說可以最多接8個scsi設備,這個scsi設備並非狹義的硬盤可以是其他設備,所以這裏被稱爲target,而target下面可以最多接32個LU(邏輯單元)設備,這個LU 設備往往是硬盤。
數據的存儲是由scsi控制器來進行編碼存儲的。也就是說數據在scsi總線上傳輸是有總線協議的,這裏就是scsi協議。這個協議就包括如何編碼,定義各個接口針的用途等等。
SATA:最爲IDE的下一代產品,串行接口(6G/bps,實際速率也不到768MB/S)
SAS:最爲SCSI的下一代產品,同樣是串行接口
SSD:固態硬盤,接口有SATA,PCI-E,當然PCI-E的接口直接連接在總線上,速度更快。
三、存儲模型講解
1、DAS存儲
2、SAN存儲
存儲區域網,爲多臺主機提供公共存儲空間,但不能使用相同的存儲空間。常見類型有FC-SAN、ISCSI-SAN,IP-SAN(所有使用ip協議的都稱爲ipsan,包括iscsi)PCOE。
FC-SAN,就是在主機和存儲設備直接通過光纖進行連接,這時主機上需要光纖HBA卡,SAN交換機,用於專門在光纖上通訊,光信號到SAN交換機之後轉換爲scsi存儲設備可以接受的信號,然後有sCSI控制器進行編碼存儲。
iSCSI-SAN,則是對光纖存儲的廉價處理方法,因爲光纖適配器和交換機成本都很高,所以纔有了ISCSI的方法,此方式是以太網傳輸方法,在主機端(initiator)先在內核中增加模塊來封裝scsi協議,這個就是iSCSI啦,然後封裝tcp、ip等層協議。存儲端同樣提供iscsi的服務,端口是3260。將主機端發送過來的tcp/ip報文進行解封,然後到iSCSI協議時會知道是發給存儲的,然後再有scsi控制器進行存儲。這個存儲端可以是非scsi接口設備,而主機端掛載存儲端的分區後被識別爲“本地硬盤”,這就是塊級別設備的特徵,主機端可以對這個“硬盤”進行分區格式化的操作。iscsi的HBA卡,TOE卡,都是將由內核完成的iscsi協議封裝和驅動交給這個卡來完成,以減少CPU的負載。
FCOE:是cisco專有的存儲協議,性能和iscsi差不多。
infiniband:應用於高端存儲中,性能高於FC-SAN。
3、NAS
通過nfs、cifs、smb等協議提供網絡文件共享的協議。
四、linux實現iscsi服務
1、安裝軟件
服務器端:centos6.5本身是自帶這個scsi-target-utils軟件包的,服務內核本身就支持,utils只是管理工具。啓動的服務名是tgtd服務,配置文件是/etc/tgt/target.conf文件,監聽的端口是3260。
客戶端:安裝iscsi-initiator-utils,本地有一個iscsi數據庫用來存儲記錄之前記錄的服務器鏈接,保證數據不丟失,由於客戶端和服務器端存在持續鏈接,所以同樣需要一個服務來管理鏈接,服務名是iscsi(iscsid)
客戶端和服務器端的安全認證:
基於ip的認證:
基於用戶的認證:CHAP認證
注意:同高可用及負載均衡一樣,都需要時間同步、關閉iptables、關閉enlinux等功能。
1.1服務器端:
[root@localhost ~]# yum install scsi-target-utils
1.2管理工具的使用tgtadm
服務器端要使用iscsi存儲服務,需要先創建“target”,然後創建“lun”,之後纔可以被客戶端使用。
三種模式:target
選項:show(顯示)、new(創建)、update(更新,修改)、bind(綁定訪問地址)、unbind(解除綁定),delete.
logicalunit
選項:new、delete
account
選項:show(顯示)、new(創建)、update(更新,修改)、bind(綁定訪問地址)、unbind(解除綁定),delete.
選項和參數縮寫對照
-L ——— lld<driver>
-o——— op
-m——— mode
-t———— tid
-T————targetname
-l———— lun
-b————backing-store
-E————bstype
-I———— initiator-address
知識點:
IQN:用來標識iscsi裏面每一個target的設備名稱,也稱爲完全限定名。命名方式:iqn.<date.code>.<reverse_domain>.<string>,其中日期是創建的年月比如2012-21,然後是域名的反寫形式,如com.dtedu.www
創建一個target,需要先啓動tgtd服務。
[root@localhost ~]# service tgtd start
Starting SCSI target daemon: [ OK ]
[root@localhost ~]# tgtadm -L iscsi -m target -o new -t 1 -T iqn.2017-04.com.dtedu.tgt1:disk1
查看target創建情況。
[root@localhost ~]# tgtadm -L iscsi -m target -o show
Target 1: iqn.2017-04.com.dtedu.tgt1:disk1
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: null
Backing store path: None
Backing store flags:
Account information:
ACL information:
創建一個LUN,當然可以創建多個LUN,每個LUN編號不同,也可以將lun指向不同的target上。
[root@localhost ~]# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 1 -b /dev/sdb
[root@localhost ~]# tgtadm -L iscsi -m logicalunit -o new -t 2 -l 1 -b /dev/sdc
顯示創建的LUN
[root@localhost ~]# tgtadm -L iscsi -m target -o show
Target 1: iqn.2017-04.com.dtedu.tgt1:disk1
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 10737 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: rdwr
Backing store path: /dev/sdb
Backing store flags:
Account information:
ACL information:
對客戶端訪問進行授權
ip地址授權
[root@localhost ~]# tgtadm -L iscsi -m target -o bind -t 1 -I 10.40.0.0/24
ACL information:
10.40.0.0/24
用戶名授權
incominguser:服務器端提供的用戶名密碼
outgoinguser:客戶端創建並提供的用戶名密碼
服務器端:
[root@localhost ~]# tgtadm -L iscsi -m account -o new --user gongbing --password 123123
[root@localhost ~]# tgtadm -L iscsi -m account -o bind --user gongbing -t 1
[root@localhost ~]# tgtadm -L iscsi -m target -o bind -t 1 -I 192.168.1.0/24
[root@localhost ~]# tgtadm -L iscsi -m target -o show
Account information:
gongbing
ACL information:
192.168.1.0/24
客戶端:(/etc/iscsi/iscsi.conf)
# *************
# CHAP Settings
# *************
# To enable CHAP authentication set node.session.auth.authmethod
# to CHAP. The default is None.
node.session.auth.authmethod = CHAP
# To set a CHAP username and password for initiator
# authentication by the target(s), uncomment the following lines:
node.session.auth.username = gongbing服務器端提供的用戶名密碼驗證信息
node.session.auth.password = 123123
# To set a CHAP username and password for target(s)
# authentication by the initiator, uncomment the following lines:
#node.session.auth.username_in = username_in客戶端提供給服務器端用於驗證的用戶名密碼信息。
#node.session.auth.password_in = password_in
2、客戶端安裝軟件
[[email protected] ~]# yum install iscsi-initiator-utils
2.1安裝目錄介紹
[[email protected] ~]# rpm -ql iscsi-initiator-utils
/etc/NetworkManager
/etc/NetworkManager/dispatcher.d
/etc/NetworkManager/dispatcher.d/04-iscsi
/etc/iscsi
/etc/iscsi/iscsid.conf客戶端配置文件
/etc/logrotate.d/iscsiuiolog
/etc/rc.d/init.d/iscsi
/etc/rc.d/init.d/iscsid
/sbin/brcm_iscsiuio
/sbin/iscsi-iname
/sbin/iscsiadm
/sbin/iscsid
/sbin/iscsistart
/sbin/iscsiuio
/usr/lib64/libiscsi.so.0
/usr/lib64/python2.6/site-packages/libiscsimodule.so
/usr/share/doc/iscsi-initiator-utils-6.2.0.873
/usr/share/doc/iscsi-initiator-utils-6.2.0.873/README
/usr/share/man/man8/iscsi-iname.8.gz
/usr/share/man/man8/iscsiadm.8.gz
/usr/share/man/man8/iscsid.8.gz
/usr/share/man/man8/iscsistart.8.gz
/usr/share/man/man8/iscsiuio.8.gz
/var/lib/iscsi此目錄保存的是服務器端到客戶端創建的鏈接信息及用戶賬戶等,如果出現問題可以刪除目錄下內容,iscsi會重新相關內容。
/var/lib/iscsi/ifaces
/var/lib/iscsi/isns
/var/lib/iscsi/nodes
/var/lib/iscsi/send_targets
/var/lib/iscsi/slp
/var/lib/iscsi/static
/var/lock/iscsi
命令講解:iscsiadm
模塊化命令:
discovery
node
-t type:類型目前只是用st
-p IPAdress:port
-l 表示登錄
2.2爲客戶端自定義命名iqn,需要命令iscsi-iname。
[[email protected] ~]# echo "InitiatorName=`iscsi-iname -p iqn.2017-04.com.dtedu`" >/etc/iscsi/initiatorname.iscsi
[[email protected] ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2017-04.com.dtedu:d027acd590fb
2.3客戶端發現服務器端的磁盤設備。
[[email protected] ~]# iscsiadm -m discovery -t st -p 192.168.1.200:3260
192.168.1.200:3260,1 iqn.2017-04.com.dtedu.tgt1:disk1
2.4客戶端將遠程設備連接到本地,然後在mount掛載。
[[email protected] ~]# iscsiadm -m node -T iqn.2017-04.com.dtedu.tgt1:disk1 -p 192.168.1.200:3260 -l
Logging in to [iface: default, target: iqn.2017-04.com.dtedu.tgt1:disk1, portal: 192.168.1.200,3260] (multiple)
Login to [iface: default, target: iqn.2017-04.com.dtedu.tgt1:disk1, portal: 192.168.1.200,3260] successful.
2.5卸載已經掛載的遠程scsi設備
iscsiadm -m node -T iqn.2017-04.com.dtedu.tgt1:disk1 -p 192.168.1.200 -u
2.6刪除iscsi客戶端的數據庫,(下次就不會自動發現了)
iscsiadm -m node -T iqn.2017-04.com.dtedu.tgt1:disk1 -p 192.168.1.200 -o delete
2.7服務器端取消對某一個網段的授權訪問規則。
[root@localhost ~]# tgtadm -L iscsi -m target -o unbind -t 1 -I 192.168.4.206
[root@localhost ~]# tgtadm -L iscsi -m target -o show
Target 1: iqn.2017-04.com.dtedu.tgt1:disk1
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 10737 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: rdwr
Backing store path: /dev/sdb
Backing store flags:
Account information:
ACL information:
192.168.4.0/24
2.8刪除服務器端的LUN
[root@localhost ~]# tgtadm -L iscsi -m logicalunit -o delete -t 1 -l 1
2.9刪除服務器端的target
[root@localhost ~]# tgtadm -L iscsi -m target -o delete -t 1
注意:
此問題常常出現在非第一次發現遠程scsi設備的情況,或者設備配置有變化的情況。通常會有以下錯誤信息:
[[email protected] ~]# iscsiadm -m discovery -t st -p 192.168.4.200 -d 3
iscsiadm: Max file limits 1024 4096
iscsiadm: starting sendtargets discovery, address 192.168.4.200:3260,
iscsiadm: connecting to 192.168.4.200:3260
iscsiadm: connected local port 55596 to 192.168.4.200:3260
iscsiadm: connected to discovery address 192.168.4.200
iscsiadm: login response status 0000
iscsiadm: discovery process to 192.168.4.200:3260 exiting
iscsiadm: disconnecting conn 0x15b5a78, fd 3
iscsiadm: No portals found
[root@localhost ~]# tail /var/log/messages
May 2 07:01:20 localhost tgtd: conn_close(101) connection closed, 0xcf6568 1
May 2 07:05:44 localhost tgtd: conn_close(101) connection closed, 0xcf6568 1
解決辦法:
1、卸載掛載的scsi設備,並刪除。
2、關鍵是刪除此目錄的內容
[[email protected] ~]# vi /var/lib/iscsi/send_targets/192.168.4.200,3260/st_config
通過/etc/tgt/targets.conf進行配置:
<target iqn.2017.05.com.dtedu.tgt2:disk2>
backing-store /dev/sdb
initiator-address 192.168.4.0/24
incominguser gongbing 123123
outgoinguser liu 123123
</target>
注意現實中,常常使用的iscsi解決方法是通過freeNAS(freebsd核心,獨立的類似操作系統)、OpenFilter(centos核心,)、Nexenta