一、分布式文件系统和单机文件系统的区别:
单机文件系统的分区只能被一台主机所挂载,不能同时被多台主机挂载使用,因为单机文件系统是通过系统内核层的锁机制来完成的,所以一个系统上可以有多个进程访问,但只能在一个时间点上有一个进行写操作。
分布式文件系统和单机最大区别就是,它的锁机制是在不同的主机内核层可以相互通信,保证只有一个进程写操作的。
分布式锁的实现要通过分布式程序来完成,可以通过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