高可用集群之分布式文件系统

时间:2022-12-22 16:24:50

一、分布式文件系统和单机文件系统的区别:


单机文件系统的分区只能被一台主机所挂载,不能同时被多台主机挂载使用,因为单机文件系统是通过系统内核层的锁机制来完成的,所以一个系统上可以有多个进程访问,但只能在一个时间点上有一个进行写操作。

分布式文件系统和单机最大区别就是,它的锁机制是在不同的主机内核层可以相互通信,保证只有一个进程写操作的。

分布式锁的实现要通过分布式程序来完成,可以通过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、客户端安装软件

[root@node5.dtedu.com ~]# yum install iscsi-initiator-utils


2.1安装目录介绍

[root@node5.dtedu.com ~]# 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。

[root@node5.dtedu.com ~]# echo "InitiatorName=`iscsi-iname -p iqn.2017-04.com.dtedu`" >/etc/iscsi/initiatorname.iscsi 

[root@node5.dtedu.com ~]# cat /etc/iscsi/initiatorname.iscsi 


InitiatorName=iqn.2017-04.com.dtedu:d027acd590fb



2.3客户端发现服务器端的磁盘设备。

[root@node5.dtedu.com ~]# 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挂载。

[root@node5.dtedu.com ~]# 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设备的情况,或者设备配置有变化的情况。通常会有以下错误信息:

[root@node5.dtedu.com ~]# 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、关键是删除此目录的内容

[root@node6.dtedu.com ~]# 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