IP-SAN-iscsi
硬盘 (做raid ) --》 服务器
直连
硬盘 (做raid ) --》 服务器
网络
存储分类:
DAS 直挂式存储(direct access/attach storage) 比如:机箱里的硬盘
NAS 网络附加存储(network attched storage) 比如:NFS,SAMBA,FTP等
SAN 存储区域网络(storage area network)
分布式存储(云存储)
DAS
优点: 不受网络限制,直接连系统总线
缺点: 能连接的硬盘个数有限,存储空间无法和其它服务器交互
NAS,SAN
优点: 经过网络共享给服务器使用,使用灵活
缺点: 速度会受网络的限制
NAS,SAN都是通过网络共享存储,但NAS共享的一般是目录,而SAN共享的是物理卷
apache
|
nginx---storage --- mysql
|
|
oracle
两种SAN
FC-SAN:早期的SAN,服务器与交换机的数据传输是通过光纤进行的,服务器把SCSI指令传输到存储设备上,不能走普通LAN网的IP协议。
IP-SAN:后期出现的SAN,用IP协议封装的SAN,可以完全走普通网络,因此叫做IP-SAN,最典型的就是热门的ISCSI。
FC-SAN:速度快(2G,8G,16G),成本高,传输距离有一定限制
IP-SAN:速度较慢(但以后会有W兆以太网标准),成本低,传输距离无限制
100M 1000M 10G
IP-SAN的共享技术:
gnbd (global network block device) rhel5可以用,现在已经不再支持了
iscsi 网络scsi,现在做ip-san的主要方式
------------------------------------------------------------------------------------------------------------
iscsi 网络 scsi(small computer system interface)
存储的N个磁盘--》硬RAID--》iscsi或FC--》分区(lvm可选)--》格式化--》挂载使用
172.16.2.10
存储服务端(存储导出端,kvm虚拟机1)
|
| iscsi
|
存储客户端(存储导入端,kvm虚拟机2)
172.16.2.11
实验前准备:(kvm虚拟机,centos7.3平台.使用vmware虚拟机测试会出问题)
1,ip静态
2,关闭iptables,selinux
3,主机名互绑
4,时间同步
5,配置yum(本地源,epel,163)
存储导出端使用虚拟机来模拟(模拟存储可以使用多种形式,如硬盘:/dev/sdb,分区:/dev/sdb1,逻辑卷:/dev/vg/lv01,dd创建的大文件等等)
下面我为了实验方便,就用dd的大文件来模拟存储
# mkdir /data/
# dd if=/dev/zero of=/data/storage1 bs=1M count=500
# dd if=/dev/zero of=/data/storage2 bs=1M count=1000
# dd if=/dev/zero of=/data/storage3 bs=1M count=1500
# dd if=/dev/zero of=/data/storage4 bs=1M count=2000
一共产生四个模拟存储文件(1个500M,1个1000M,1个1500M,1个2000M;这么设计是为了方便后面讨论的)
第一大步:服务器端的配置
下面开始iscsi的共享
1,在iscsi存储服务端安装下面iscsi的服务端软件包
# yum install scsi-target-utils
2,配置主配置文件
# cat /etc/tgt/targets.conf |grep -v "#"
default-driver iscsi
<target iscsi:data1>
backing-store /data/storage1
incominguser li li123 ----存储客户端要求验证才可以通过网络使用这个设备,用户名和密码与系统用户无关
</target>
<target iscsi:data2>
backing-store /data/storage2
incominguser li li123
</target>
<target iscsi:data3>
backing-store /data/storage3 --这个存储共享没有任何验证方式,也就表示任何人可以远程iscsi挂载使用
</target>
<target iscsi:data4>
backing-store /data/storage4
initiator-address 172.16.0.0/16 --指定一个网段内的所有客户端可以使用这个设备
</target>
3,启动服务
# systemctl start tgtd
# systemctl status tgtd
# systemctl enable tgtd
4,验证端口和共享资源是否ok
# lsof -i:3260
# tgt-admin --show
第二大步:
iscsi客户端的配置 ----所有的客户端都要配置,步骤都一样
1,在每个客户端安装iscsi的客户端软件包
客户端配置yum(本地镜像yum)
# yum install iscsi-initiator-utils
2,因为iscsi服务端有两个资源被配置了验证,所以需要修改客户端配置文件才可以通过验证进行登录(如果iscsi服务端没有配置用户名密码验证,则客户端这一小步骤可以不用做)
# vim /etc/iscsi/iscsid.conf
57 node.session.auth.authmethod = CHAP --CHAP (Challenge-Handshake Authentication Protocol )
61 node.session.auth.username = li
62 node.session.auth.password = li123
71 discovery.sendtargets.auth.authmethod = CHAP
75 discovery.sendtargets.auth.username = li
76 discovery.sendtargets.auth.password = li123
3,在登录前必须要先连接并发现资源(discovery)
# iscsiadm -m discovery -t sendtargets -p 172.16.2.10 --使用此命令发现服务端的iscsi共享资源,IP为iscsi存储服务端的IP
172.16.2.10:3260,1 iscsi:data1
172.16.2.10:3260,1 iscsi:data2
172.16.2.10:3260,1 iscsi:data3
172.16.2.10:3260,1 iscsi:data4
4,发现资源成功后,就可以进行资源登录了
只登录其中一个目录:
# iscsiadm -m node -T iscsi:data1 -p 172.16.2.10 -l
直接登录所有发现的目标:
# iscsiadm -m node -l
5,登录成功后,直接使用fdisk -l查看
# fdisk -l |grep sd[a-z]
6,关于取消登录和删除
取消登录其中一个特定目录: --把-l改成-u
iscsiadm -m node -T iscsi:data1 -p 172.16.2.10 -u
取消登录所有目录:
iscsiadm -m node -u
7,用上面的命令取消登录后,如果把服务重启systemctl restart iscsi,它会仍然帮你把这些目录再自动登录上,如果你希望取消登录后,把相关信息完全删除,则需要做下面的操作
删除登录过的特定目录的信息: --把-l改成--op delete
iscsiadm -m node -T iscsi:data1 -p 172.16.2.10 --op delete
删除所有登录过的目录信息:
iscsiadm -m node --op delete
8,把所有登录的targets确认后,就可以启动服务,并做成开机自启动了
# systemctl start iscsi
# systemctl status iscsi
# systemctl enable iscsi
# systemctl start iscsid
# systemctl status iscsid
# systemctl enable iscsid
问题:
# fdisk -l |grep sd[b-z]
# iscsiadm -m node -u
# fdisk -l |grep sd[b-z]
# iscsiadm -m node -l
多登出再登录几次,查看会发现名字顺序可能会变化
下面使用存储多路径来进行绑定
--------------------------------------------------------------------------------------------------------------------
存储多路径(和双网卡绑定类似,相当于存储线路的双线路绑定,和后面要讲的HA集群也是类似)
device-multipath
172.16.2.10 192.168.122.100
存储服务端(存储导出端,虚拟机1)
| |
| |
| |
| |
存储客户端(存储导入端,虚拟机2)
172.16.2.11 192.168.122.101
准备工作:
1,在前面实验的基础上,服务器和客户端各加一个网卡连接到一个新的网络上(我这里是192.168.122.0/24网段)
2,再然后在存储客户端(存储导入端)登出这四个存储,并删除相关信息
# iscsiadm -m node -u
# iscsiadm -m node --op delete
最后要注意如果先前在存储服务端(存储导出端)配置时用了initiator-address 172.16.0.0/16参数进行控制的人需要删除它,或者修改一下(因为我们后面要配置两个网段),然后重启服务
第一步:
在存储客户端(存储导入端)去发现iscsi服务器上的存储。分别使用服务器的两个IP去发现,然后将它们登录
# iscsiadm -m discovery -t sendtargets -p 172.16.2.10
172.16.2.10:3260,1 iscsi:data1
172.16.2.10:3260,1 iscsi:data2
172.16.2.10:3260,1 iscsi:data3
172.16.2.10:3260,1 iscsi:data4
# iscsiadm -m discovery -t sendtargets -p 192.168.122.100
192.168.122.10:3260,1 iscsi:data1
192.168.122.10:3260,1 iscsi:data2
192.168.122.10:3260,1 iscsi:data3
192.168.122.10:3260,1 iscsi:data4
# iscsiadm -m node -l --把发现的targets全部登录
使用fdisk -l |grep sd[a-z]命令能查看到8个存储(但实际是4个存储,分别由两个线路去访问的)
第二步:
在存储客户端(存储导入端)安装device-mapper-multipath的包
# yum install device-mapper* -y
# rpm -qa |grep ^device-mapper
device-mapper-multipath-0.4.9-99.el7_3.3.x86_64
device-mapper-event-1.02.135-1.el7_3.4.x86_64
device-mapper-libs-1.02.135-1.el7_3.4.x86_64
device-mapper-devel-1.02.135-1.el7_3.4.x86_64
device-mapper-1.02.135-1.el7_3.4.x86_64
device-mapper-multipath-libs-0.4.9-99.el7_3.3.x86_64
device-mapper-event-devel-1.02.135-1.el7_3.4.x86_64
device-mapper-event-libs-1.02.135-1.el7_3.4.x86_64
device-mapper-multipath-sysvinit-0.4.9-99.el7_3.3.x86_64
device-mapper-persistent-data-0.6.3-1.el7.x86_64
第三步:
把上面的8个进行多路径绑定,绑成4个来用(同一个存储的两个线路访问的绑定成一个),并且名字可以自定义
# mpathconf --enable --先运行此命令,才会产生/etc/multipath.conf的配置文件
# cat /etc/multipath.conf |grep -v ^# |grep -v ^$
defaults { --看作为全局配置参数
user_friendly_names yes --使用友好名字(默认名为wwid,名字长且难认,友好名可以自定义)
find_multipaths yes
}
blacklist { --黑名单(表示所有在黑名单里的设备不会被绑定成多路径设备)
}
# vim /etc/multipath.conf
blacklist {
devnode "^sda" --除了sda开头的设备,我都做多路径(但不是说所有的如tty1,pts1这些设备也有多路径,他会自己发现)
}
--如果你是使用kvm虚拟机(使用的是virio的磁盘)来做,把sda改成vda
# systemctl start multipathd.service
# systemctl status multipathd.service
# systemctl enable multipathd.service
# multipath -ll --使用这个命令可以看到四个新绑定的设备了(mpatha,mpathb,mpathc,mpathd)这四个设备就是双线路绑定的设备
# multipath -ll
mpathd (360000000000000000e00000000040001) dm-3 IET ,VIRTUAL-DISK --长数字字符串就是wwid
size=2.0G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active --主线路
| `- 8:0:0:1 sdf 8:80 active ready running
`-+- policy='service-time 0' prio=1 status=enabled --备线路(也就是说默认为主备模式)
`- 9:0:0:1 sdh 8:112 active ready running
mpathc (360000000000000000e00000000030001) dm-2 IET ,VIRTUAL-DISK
size=1.5G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 6:0:0:1 sde 8:64 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
`- 7:0:0:1 sdg 8:96 active ready running
mpathb (360000000000000000e00000000020001) dm-1 IET ,VIRTUAL-DISK
size=1000M features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 4:0:0:1 sdc 8:32 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
`- 5:0:0:1 sdd 8:48 active ready running
mpatha (360000000000000000e00000000010001) dm-0 IET ,VIRTUAL-DISK
size=500M features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 2:0:0:1 sda 8:0 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
`- 3:0:0:1 sdb 8:16 active ready running
第四步:
下面我对这8个存储进行自定义绑定(把名字分别绑成data1,data2,这两个做成ha高可用模式;data3,data4这两个做成lb负载均衡模式)
# cat /etc/multipath.conf |grep -v ^# |grep -v ^$
defaults {
user_friendly_names yes
find_multipaths yes
}
multipaths {
multipath {
wwid 360000000000000000e00000000010001 --wwid
alias data1 ----自定义绑定的名字
path_grouping_policy failover ----HA模式
path_selector "round-robin 0"
failback immediate ----主线路挂了再启起来后,会马上切换回来
rr_weight priorities
no_path_retry 5
}
multipath {
wwid 360000000000000000e00000000020001
alias data2
path_grouping_policy failover
path_checker directio
path_selector "round-robin 0"
failback immediate
rr_weight priorities
no_path_retry 5
}
multipath {
wwid 360000000000000000e00000000030001
alias data3
path_grouping_policy multibus
path_checker directio
path_selector "round-robin 0"
failback immediate
rr_weight priorities
no_path_retry 5
}
multipath {
wwid 360000000000000000e00000000040001
alias data4
path_grouping_policy multibus
path_checker directio
path_selector "round-robin 0"
failback immediate
rr_weight priorities
no_path_retry 5
}
}
blacklist {
}
# systemctl restart multipathd.service
# multipath -ll --查看验证,就绑定成了data1,data2,data3,data4这样的名称
# ls /dev/mapper/data*
/dev/mapper/data1 /dev/mapper/data2 /dev/mapper/data3 /dev/mapper/data4
第五步:
测试
将failover和multibus两种模式各拿一个存储出来格式化(可以直接格式化,也可以先分区再格式化,如果分区后/dev/mapper/下看不到设备,则使用partprobe刷新一下),并挂载进行测试
测试过程省略
data1和data2 failover --HA模式 高可用
data3和data4 multibus --LA模式 负载均衡
格式化分区挂载后:
# dd if=/dev/zero of=/data4/test bs=1M count=900
# dd if=/dev/zero of=/data2/test bs=1M count=900
# ifconfig ens33 down 或 ifconfig ens38 down
# iptraf 查看
重启测试
iscsi存储可以自动登录
存储多路径可以自动绑定
注:但写到/etc/fstab里或/etc/rc.local里的自动mount挂载目前还有问题(不能开机自动挂载) ----待解决
#######################################################
课外扩展:
freeNAS
是一套免费的NAS服务器,它能将一部普通PC变成网络存储服务器。该软件基于FreeBSD,Samba 及PHP,支持CIFS (samba), FTP, NFS protocols, Software RAID (0,1,5) 及 web 界面的设定工具。用户可通过Windows、Macs、FTP、SSH 及网络文件系统 (NFS) 来访问存储服务器;FreeNAS可被安装于硬盘或移动介质USB Flash Disk上。FreeNAS 服务器前途无量;它是组建简单网络存储服务器的绝佳选择,免去安装整套Linux或 FreeBSD 的烦恼。
笔记目录/arch/san_iso/FreeNAS-9.2.1.7-RELEASE-x64.iso --目前的最新版本
openfiler
Openfiler 由rPath Linux驱动,它是一个基于浏览器的免费网络存储管理实用程序,可以在单一框架中提供基于文件的网络连接存储 (NAS) 和基于块的存储区域网 (SAN)。Openfiler 支持 CIFS、NFS、HTTP/DAV 和 FTP
/arch/san_iso/openfileresa-2.99.1-x86_64-disc1.iso --目前的最新版本