文件共享 or 生产力,NAS弱爆了
今天咱们继续聊共享存储,说一个大家不常接触的内容:iSCSI。
这个东西不属于NAS的范畴,属于咱们之前提到的SAN(Storage Area Network,存储区域网络)。说实话,在普通用户家里搞一个SAN没太大必要,而且大多数普通用户往往连网线还玩不明白呢,再弄个光纤通道交换机成本上划不来,维护起来也比较麻烦。
但有的东西你家里可以没有,却需要了解一下,毕竟这些东西都是技术领域的天花板,保不齐哪些爱折腾的用户还会搞那么一搞。
当很多人在讨论万兆网络的时候,现在SAN的FC通道已经达到了256G,即便是走较慢的以太网SAN的通道也可以达到100Gbps,也就是十万兆,在这个领域中只要你投的起设备,你就可以得到几乎逆天的存储速度。
对比大家的NvME SSD只能说这东西是民用产品,毕竟在读取速度过3000,商家就可以标记上“读速高达”多少多少的宣传语
很多人就会认为SSD的速度快到无边。当然了,现在貌似最快的SSD驱动器读速已经破万。似乎给普通用户一个感觉SSD真快。
是这样吗?如果不考虑成本上一个SAN结果是不一样的。在今年最新的SAN上已经可以为每个端口提供49700MB/S的数据流量了这就是SAN的一个带宽优势。
今天咱们来搭一个特别简单的SAN服务器,连计算机上,看一下和NAS的共享到底有什么不同。
用的系统比较小众:ESOS,叫做“企业级存储系统(Enterprise Storage OS)”。2012年由当年的存储巨头昆腾开发。现在也由昆腾的团队维护,最新的更新版本是在2023年5月发布。目前地球上一共也没跑够几百套ESOS系统,这点可以到ESOS站点上的使用状态上去查下,大家也可以图个新鲜来玩玩看。
先说怎么部署:
部署的准备要求你有一个独立的电脑,电脑上有硬盘有网卡即可,当然了,如果想真的玩SAN,那么阵列卡、HBA卡在这套系统上都有支持。虽然ESOS用的人少,但硬件上的支持算是来者不惧。
其次,有一个闲置的4G以上的U盘,ESOS和UNraid一样,都是U盘启动安装部署的。
电脑、硬盘、网卡、U盘,准备好之后,我们就可以开始部署ESOS了。
第一步:下载一套ESOS的安装包。
这里得说一下,似乎ESOS 4.X的windows安装程序是有问题的,iN这边有linux的机器,因此就没过份的去强求非得在Windows上把这个安装包生成了。直接在linux里搞就可以了
在linux中输入命令
wget https://download.esos-project.com/packages/4.x.x/esos-4.2.1_z.zip --content-disposition
下载最新的ESOS安装包
下载后unzip 解压到当前目录
第二步:生成ESOS引导u盘
进入ESOS目录后,在目录中有install.sh和install.vbs两个安装命令,可以分别用来在Linux和windows中利用命令行进行安装。
说是安装,其实是利用这个命令生成一个引导U盘。
在此之前我们需要利用lsscsi命令确定一下U盘的路径例如iN的这个机器,没插入U盘时候利用lsscsi命令来看就是两个盘符/dev/sda和/dev/sr0。
插入U盘后再去键入lsscsi命令后,会发现出现了一个/dev/sdb的盘符路径,这就是一个U盘,记住这个路径。在命令行中输入“sudo ./install.sh”
稍等一下,你就可以看到输入U盘路径的提示,这一步按输入“/dev/sdb”,剩下的就是等待引导U盘的建立完成。
第三步:设置ESOS系统
当ESOS的引导U盘生成后,用这个U盘来引导启动一台计算机。
iN的建议是你要有一台闲置的计算机,这台计算机内的资料全部备份完毕,硬盘最好做个初始化。原因是ESOS是一个存储系统,会重置这个系统管理下的所有硬盘信息。
引导成功后利用默认用户名"root",密码"esos"可以登陆进入系统
这是一个基于TUI界面的系统,不同于GUI,所有的系统界面完全是由字符终端生成的用户界面。有点类似于Bios的感觉。但这也就是ESOS的全部了。基本上对于ESOS的设置管理很久也未必会做一次,因此这个界面咱们可以将就。
进入界面的第一步就是做一下系统的网络设置,按s进入系统设置菜单,选择网络设置:
第一项设置一下整体的网络配置:
这里就根据个人的实际情况将ESOS的主机名、子域、网关和DNS地址设置一下,例如:
OK之后系统对网络做一个基本设置:
然后再设置一下网卡的IP地址:还是S进入系统设置,选择网络设置:
这时候在本地的网卡都会列在界面中。选择一块网卡进入:
设置静态地址,这里有一个要说明的点就是广播地址“Broadcast”,在IP网络中广播地址是一个子网主机ID全为1的特殊地址
打个比方,如果你的网络地址是192.168.10.100,子网掩码是255.255.255.0,那么你的网络地址的前三个数字就是网络ID也叫子网ID,因此就是192.168.10.0,如果计算广播地址就可以计算为最后的一个数字0全部为二进制1,也就是11111111,换算成10进制就是255,因此你的广播地址是192.168.10.255.
在这个iN的安装范例里面,由于iN家里的网络设置为了16位子网掩码(255.255.0.0),因此后两个数字都是主机ID,要计算广播地址就成了172.16.255.255。
其次,注意到右上角的MTU了吗?默认值是1500,其实如果要获得更高的性能,并且交换机支持的话,可以在这里设置巨型帧——例如9000。但是这就牵扯到带外管理(用另一套网络来管理设备)的事情了,因此咱们还保留一下1500。这样做性能会打那么一点点折扣。
在设置好网络参数之后,ESOS就可以远端访问和远端管理了。
直接可以SSH登陆,和直接接入键盘显示器没有任何区别。所以,显示器、键盘什么的都可以从这台“存储服务器”上拆掉了。
第四步:设置ESOS存储
当你从远端登陆了ESOS后你会发现——这个系统依旧“空空如也”似乎什么东西都没有的感觉。
目前我们能看到的界面主要有两个区域,第一个Taget(目标)概览,第二个会话(session)概览
Taget是ESOS可以对外提供的存储目标,Session则是接入到ESOS系统中的客户连接。
在顶部菜单中 Hardware RAID 、Software RAID 、LVM 、File Systems对应了一个存储服务器所需要规划的四个大的功能点、硬件的RAID、软件的RAID、逻辑卷管理和文件系统管理。
在这台机器上iN就只挂了一个SSD硬盘,因此更深的东西咱们就在以后找机会再来讲,今天的目标是让这个系统跑起来。
简要说说,如果你打开文件系统的菜单,你可以利用文件系统的功能建立基于磁盘文件的虚拟盘。
这时候在系统中接入的硬盘可以被暴露出来了:
在设置文件系统的时候,ESOS可以支持四种文件系统:
其实还可以下载其他的ESOS子版本对类似于ZFS这样的系统进行支持。在今天的例子里面我们选择Btrfs,这是一种基于二叉树的支持写入复制的高性能块文件系统。
定义完毕文件系统之后,系统挂载的整块硬盘就可以承载虚拟磁盘的文件了
我们还需要建立虚拟磁盘:
选择刚刚建立的文件系统:
定义虚拟磁盘的名称和尺寸
在这个例子里面我们先建立2个40G的虚拟磁盘。
现在在文件系统-虚拟磁盘文件列表中我们可以查看到这两块虚拟磁盘。
这里要注意的是,这是虚拟磁盘文件,虽然已经存在在系统中,但是还不能被外界所直接使用。如果我们在命令行上查看,我们会发现,这两个“磁盘”仅仅是/mnt下的两个文件。
但建立了虚拟磁盘之后,我们就可以开始建立虚拟驱动器了。也就是菜单的第二行Devices部分。
驱动器(Device)是ESOS真正可以作为目标的系统对象,咱们来仔细说一下:
在建立驱动器的过程中,我们可选的项目很多,其中包括
dev_disk
dev_disk_perf
vcdrom
vdisk_blockio
vdisk_fileio
vdisk_nullio
dev_changer
dev_tape
dev_tape_perf
其中,dev_disk和dev_disk_perf 是指系统挂载的物理盘直接连接;
vcdrom是以iso文件模拟光盘驱动器,光盘的ISO文件我们可以在ESOS的命令行界面直接拉取:
vdisk_blockio和vdisk_fileio是以“块I/O”或者“文件I/O”挂载虚拟磁盘文件
vdisk_nullio是进行性能测试使用的非存储目标
dev_changer,dev_tape和dev_tape_perf是ESOS挂载备份用磁带库(changer)和磁带机(tape)的设备入口。
刚刚我们建立了两个虚拟磁碟机文件,所以可以选择vdisk_fileio将磁盘文件挂载为虚拟驱动器。
这里面有几个设置项
Block Size,这是文件系统与存储设备交互时使用的基本数据单元的大小。
NV Cache,表示是否使用非易失性缓存
Removable,是否为可移动介质,也就是说是否可以从系统里面像U盘一样弹出
Write Through,直接写入标志,直写入意味着数据将直接写入磁盘,而非直写入可以获得最大的写入性能优化,但如果在写入过程中断电有可能丢失数据。
Read Only,这是只读标记,开启后磁盘数据被保护,不能写入
Rotational,“旋转”,这个选项比较有意思,是定义你的存储介质是否是一个旋转的机械盘。按照诚实的方法来做,固态盘选No,机械盘选Yes。
结合现在演示机器的情况,我们就设置成这样:
设置完毕之后,我们就可以在驱动器信息中看到刚刚设置的两个驱动器。
现在存储器一层的事情做好了。
如果是要做iscsi,我们就要开始定义这个存储服务器上的target。
第五步:设置ESOS存储目标,“目标”这个词汇是咱们IT圈子直接翻译人家原文“Target”的,更贴切的翻译其实是“靶子”
“目标”和“靶子”在英文里面都是一个词汇。咱们就不深究翻译问题了。在一个SAN级别的存储服务器中,所有的存储资源都是以“靶标”的形式暴露出来的,远端的主机(Host)去将数据投射到“靶标”上。
如果不设置“靶标”,那么一个存储服务器中插入再多的硬盘也没有任何意义——只是一堆硬盘而已。
所以在让其他主机能够接入到存储之前需要我们先设置“靶子”。
“靶子”很简单设置,给个名字就可以了,一般的规则是写明这是一个IQN(iSCSI Qualified Name,ISCSI全局名称)。
IQN力求要做到全球唯一,所以基本上大家的规则是以“IQN”开头,后面接年份-月.反向域名:唯一标识符这样的写法。写法是一个非强制标准,如果愿意遵守可以避免很多潜在的撞名问题,在小区域内使用不愿意遵守其实也没太大的事情。
因此我们的IQN写为:iqn.2024-04.esos.esosHost:w25011
靶子立起来了,谁来开枪呢?
第六步,设置发起器
发起器(Initiator)这个概念有点反常识的感觉,不过我们顺着来解释,一般人都可以理解发起器到底是怎么回事。
存储本身是依托于计算机设备的。
按照计算机的架构来说计算机是分为输入设备、输出设备、运算器、控制器和存储器五个部分的。但是这里的“存储器”是指“内存”。当然了计算机的输入设备也不是键盘、鼠标、触摸屏、输出设备也并不是指显示器和音箱。除了这五个设备之外,计算机上所有的设备不论是不是在机箱里面实际上都叫做外设。
各自外设通过总线连接到计算机中完成各自的功能。
虽然一个SAN存储是带有CPU、内存且有操作系统的,但对于计算机而言,存储本身是一个外设,和插在USB接口上的移动硬盘没什么区别。因此我们讲了这么半天的ESOS存储服务器本身对计算机而言是一个辅助设备。虽然它可以立起来“靶子”,但还得让“枪”来打,这就是“发起器”的概念了,主动权在计算机这杆“枪”上而不是在“靶子”上。
所以我们先要建立一个发起器。切换到Windows上,在服务器管理器程序中选择“iscsi发起程序”
windows系统使用iscsi发起程序来建立自己的发起程序。
打开后,可以开启配置窗口:
我们进入到配置选项卡,可以看到发起程序的默认设置:
这里面有一个发起程序的默认名称,建议点击“更改”按钮修改一下:
现在windows界面中的“iqn.2024-04.rihome:win25”就是在存储网络中Windows这杆枪的IQN名字了。
在ESOS中添加一个组:
选择这个组内要包含的target,一个存储组可以容纳大量target。
为组命名:
命名后添加发起器:
选择target:
关联到组:
然后填入刚刚在Windows中设置的发起器IQN:
至此,我们将靶子(Target)立起放在了比赛通道(Group)中,也为这个通道注册了一名比赛的枪手(Initiator)。
枪手举起枪了,你却发现……并没有刚刚的虚拟驱动器什么事情。
嗯,没错,靶子只是一个精神象征而已,我们还需要把驱动器关联到target上。
这里“Map to Host Group”要把磁盘也放在比赛的通道里面去。它才是实质的东西。
先选择已经存在的磁盘
再选择taget
再选择刚刚设置好的组
为这个磁盘在Target中设置一个逻辑单元号,默认是0,但iN一般从1开始设置。同时确定这是不是一个只读盘,这里设置为No。
这时候磁盘就和Target以及主机的访问组进行了关联。
再进入target菜单中将tagert打开:
从列表中选择要打开的target:
选择Enable(允许)后按下OK:
最后确认一下target列表中状态(state)被改变为Enable
这时候,ESOS的设置就已经完毕,回到Windows的ISCSI发起程序,你会发现刚刚在ESOS中设置好的target已经出现在窗口中(这就是最前提到的广播的功效)。
如果没有的话,在目标中输入ESOS服务器的IP地址
然后选择快速连接,我们就可以直接连接到ESOS的目标中
至此,ESOS建立的ISCSI就被成功的接入到Windows系统中。
但是,此刻你如果去看“我的电脑”中是不会包括刚刚接入的磁盘的。
原因是这个磁盘好比你刚买的接入到windows系统中的新驱动器一样。
我们还需要做 最后一步 挂载iscsi驱动器。
打开计算机管理:
在磁盘管理菜单中我们可以看到这块我们规划好的40G磁盘。目前属于脱机状态。
有键点击磁盘,选择联机
联机后,再右键点击初始化磁盘
选择一个分区表格式,点确定。
在磁盘分区上点一下右键选择建立卷,这里建立的是简单卷
然后格式化硬盘,最终这块Iscsi硬盘就以E盘的面目被挂载在了Windows中。
而在Esos端我们也可以看到“会话”(Session)区域已经出现了一个会话。
至此,这块远端的硬盘就可以使用了。
看起来颇费周章的操作,只给Windows 添加了一个来自于远端的虚拟硬盘。这样做有什么好处呢?
其实这就是生产力。我们来做个测试:
现在D盘中有一个Ubuntu的安装包:
如果我们将之拷贝到一个SMB共享目标中:
我们会发现在千兆网络中,文件的传输操作是基本跑满千兆的,90~110MB左右的传输速率。
但是如果我们将文件往iscsi的E盘拷贝呢???
是这样!
原因很简单。SMB是以文件封装的方式进行数据传输。系统传输开销很大效率较低。
而在iscsi下,是通过网络直接发送磁盘的操作命令和磁盘数据块进行文件传输。即便是很小的带宽(1Gbps),在系统级别上仍然可以高速的运作。
这个挂载硬盘是不是比大家想象的速度要快得多呢?做为生产力工具来挂载的iscsi在同等配置水平上基本上速度是可以超过NAS共享文件夹几倍的,NAS是不是弱爆了?
当然了,在一般情况下一个iscsi只可以为一个主机所使用,这是iscsi的硬伤,但是,真正的生产力环境下我们可以通过后台复制的方式让几个不同的iscsi驱动器之间的数据完全同步,这样就可以解决所谓的共享问题。那么问题来了,会不会让存储服务器上的空间需求爆炸性的增长呢?实际上也不会,存储服务器上使用的Btrfs或者ZFS文件系统本身就是块级存储,相同的数据不会二次占用额外的空间。因此即便是有几百个iscsi目标放在一个存储服务器里面,存放了几百份相同的文件,实际上也仅仅占用一份文件的空间。
具体的iscsi同步的事情,我们找时间再详细聊,今天就到这里吧。
猫皮
校验提示文案
魔女买买买
校验提示文案
devorak
校验提示文案
lixaoyao
校验提示文案
值友3499685077
校验提示文案
wainyang
校验提示文案
太空骑师
校验提示文案
筋斗积雨云
校验提示文案
77群主
校验提示文案
HH5819
校验提示文案
QiaoMax
校验提示文案
值友8085969305
校验提示文案
segafans
校验提示文案
zzbzerg
校验提示文案
hh7856
校验提示文案
伯母我是你女儿的男友
校验提示文案
智力不够
校验提示文案
闲嗑瓜子
校验提示文案
南音_
校验提示文案
请叫我狼先生
校验提示文案
薏仁做事薏仁当
校验提示文案
devorak
校验提示文案
值友3317404419
校验提示文案
值友3876814152
校验提示文案
SaltFishFantasy
校验提示文案
值友5234774375
校验提示文案
darkblue
校验提示文案
保密
校验提示文案
值友8085969305
校验提示文案
alston88
校验提示文案
tym4242
校验提示文案
张老板儿啊
校验提示文案
灵KOYB
校验提示文案
松江土著
校验提示文案
猫皮
校验提示文案
值友4850216016
校验提示文案
值友5874900852
校验提示文案
我是你光哥呀
校验提示文案
口___口
校验提示文案
zcola
校验提示文案