高可用集羣之分佈式文件系統(續一)

一、分佈式文件系統和單機文件系統的區別:


單機文件系統的分區只能被一臺主機所掛載,不能同時被多臺主機掛載使用,因爲單機文件系統是通過系統內核層的鎖機制來完成的,所以一個系統上可以有多個進程訪問,但只能在一個時間點上有一個進行寫操作。

分佈式文件系統和單機最大區別就是,它的鎖機制是在不同的主機內核層可以相互通信,保證只有一個進程寫操作的。

分佈式鎖的實現要通過分佈式程序來完成,可以通過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 設備往往是硬盤。

ECCCFFA1DD8143A78BE48A34358C00FD

數據的存儲是由scsi控制器來進行編碼存儲的。也就是說數據在scsi總線上傳輸是有總線協議的,這裏就是scsi協議。這個協議就包括如何編碼,定義各個接口針的用途等等。

SATA:最爲IDE的下一代產品,串行接口(6G/bps,實際速率也不到768MB/S)

SAS:最爲SCSI的下一代產品,同樣是串行接口

3DC118DA47EA491882DC39FB5FA58804

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的負載。

8E7A1D4540AC48E3A728C266F102FB29

52460635349544A194AABE06D454D808

FCOE:是cisco專有的存儲協議,性能和iscsi差不多。

infiniband:應用於高端存儲中,性能高於FC-SAN。

3、NAS

通過nfs、cifs、smb等協議提供網絡文件共享的協議。

BBB52618E8D54920A5948A15A4F7C0DF

37EFFC610C894360A3B09C8DC7FCE126

四、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

















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章