1. 项目背景与iSCSI协议核心价值
在数据中心和中小型企业的IT基础设施里,存储一直是个既基础又核心的议题。你可能遇到过这样的场景:一台应用服务器(比如跑着SQL Server的Windows Server)的本地磁盘空间告急,或者你需要为多台服务器提供一个集中、统一且高性能的存储池,用于存放虚拟机文件、数据库文件或者共享的应用数据。直接加硬盘?对于物理服务器来说,扩容麻烦,而且存储分散不便于管理。上专业的SAN(存储区域网络)?那意味着要采购昂贵的光纤交换机(FC Switch)和HBA卡,成本和技术门槛一下子就上去了。
这时候,iSCSI(Internet Small Computer System Interface)技术就成了一种非常务实且高性价比的选择。它本质上是一种基于IP网络的SCSI指令封装协议,允许你将远端的存储设备(比如一台专门配置了硬盘的服务器)通过网络“伪装”成一块本地硬盘,挂载到你的服务器上。对操作系统和应用来说,这块“网络硬盘”和本地连接的SAS、SATA硬盘在使用体验上几乎没有区别,你可以对它进行分区、格式化、创建文件系统,就像对待一块真实的物理磁盘一样。
我之所以选择在Windows Server 2012这个平台上深入聊聊iSCSI,是因为这个版本是一个承上启下的关键节点。它内置的iSCSI发起程序和目标服务器角色已经相当成熟和稳定,图形化管理工具(Server Manager)也足够友好,非常适合从零开始学习和部署。相比于更早的版本,它在性能和可靠性上有不少改进;而相比于后续的Server 2016/2019,它的配置逻辑又足够经典和清晰,理解了2012上的操作,迁移到新版会非常顺畅。这次我们要做的,就是在一台Windows Server 2012上,将它配置成iSCSI目标服务器(即存储提供方),然后在另一台服务器或客户端上,使用iSCSI发起程序去连接并使用这块网络存储。整个过程会涉及到IQN(iSCSI限定名称)的理解、认证配置、LUN(逻辑单元号)的创建与管理等核心环节。
2. 实验环境规划与先决条件准备
动手配置之前,清晰的规划能避免后续很多混乱。我们先来搭一个最小化的实验环境,这在实际的测试或学习场景中非常有用。
2.1 网络拓扑与IP规划
我建议采用最简单的双机直连或同交换机环境。你需要两台虚拟机(或物理机):
- iSCSI目标服务器:我们称之为
SRV-ISCSI-TGT。角色:提供存储空间。安装Windows Server 2012 R2 Standard或Datacenter。 - iSCSI发起客户端:我们称之为
SRV-ISCSI-INIT。角色:使用存储空间。可以是另一台Windows Server 2012,也可以是Windows 10/11等客户端系统,它们都内置了iSCSI发起程序。
注意:强烈建议为iSCSI流量单独规划一个网络。即使是在实验环境,也最好为两台机器添加第二块虚拟网卡(NIC),并配置一个与业务网络(如192.168.1.0/24)不同的专用子网(如10.10.10.0/24)。这样做可以避免iSCSI的存储流量与日常的管理、应用流量竞争带宽,提升存储性能的稳定性和可预测性。在生产环境中,这通常是强制要求。
假设我们规划一个专用存储网络:
SRV-ISCSI-TGT存储网卡IP:10.10.10.10/24SRV-ISCSI-INIT存储网卡IP:10.10.10.20/24确保两台机器在10.10.10.0/24这个网段内可以互相ping通。
2.2 系统与磁盘准备
在目标服务器SRV-ISCSI-TGT上,我们需要准备用于共享的物理存储。如果你用的是虚拟机,最简单的方法是添加几块新的虚拟硬盘(VHD/VHDX)。例如,可以添加三块硬盘:
- 一块 50GB, 用于模拟未来存放数据库文件。
- 一块 100GB,用于模拟存放虚拟机VHDX文件。
- 一块 30GB,用于模拟存放普通文件共享。
这些硬盘在添加到虚拟机后,在Windows磁盘管理里会显示为“脱机”和“未初始化”的状态,先不用管,我们后续通过iSCSI目标服务器角色来管理它们。
2.3 理解核心概念:IQN与LUN
在配置过程中,你会反复遇到两个术语:IQN和LUN。彻底理解它们,配置时就不会迷糊。
IQN (iSCSI Qualified Name):这是iSCSI世界里的“身份证号”,全球唯一,用于标识一个iSCSI节点(目标或发起方)。它的格式是固定的:
iqn.yyyy-mm.<reversed domain name>:optional-identifieryyyy-mm: 表示该命名空间被创建的年份和月份。<reversed domain name>: 通常是你的域名倒写(如com.example)。如果没有域名,可以用任意有意义的字符串,实验环境常用local或test。optional-identifier: 自定义的标识符,用于具体说明这个目标或发起方是什么。- 举例:
iqn.1991-05.com.microsoft:srv-iscsi-tgt-target。这表示一个由Microsoft(域名为microsoft.com,倒写为com.microsoft)在1991年5月定义的命名空间下的,名为srv-iscsi-tgt-target的目标。
LUN (Logical Unit Number):逻辑单元号。你可以把它理解为目标服务器上共享出来的“磁盘柜”里的“抽屉编号”。当发起方连接到一个iSCSI目标后,可能会看到多个存储卷,每个卷都有一个LUN编号(通常是0, 1, 2...)。发起方通过LUN号来区分和访问不同的存储空间。在Windows iSCSI目标服务器里,你创建的每一个“iSCSI虚拟磁盘”都会绑定一个LUN。
3. 在Windows Server 2012上部署与配置iSCSI目标服务器
现在,我们开始在SRV-ISCSI-TGT这台机器上,把存储空间通过iSCSI协议共享出去。
3.1 安装“iSCSI目标服务器”角色
Windows Server 2012将iSCSI目标功能作为一个服务器角色来提供,安装非常方便。
- 打开服务器管理器。
- 点击“管理”->“添加角色和功能”。
- 在“选择安装类型”步骤,保持默认的“基于角色或基于功能的安装”,点击下一步。
- 在“选择目标服务器”步骤,确保当前服务器(
SRV-ISCSI-TGT)被选中,点击下一步。 - 在“选择服务器角色”步骤,在角色列表中找到并勾选“文件和存储服务”->“文件和iSCSI服务”->“iSCSI目标服务器”。
(示意图:勾选iSCSI目标服务器角色)
- 在弹出的“添加角色和功能向导”窗口中,点击“添加功能”。
- 后续步骤全部点击“下一步”,直到“确认安装选择”。确认无误后,点击“安装”。
- 安装完成后,无需重启服务器,点击“关闭”即可。
3.2 创建iSCSI虚拟磁盘(LUN)
角色安装好后,我们开始创建要共享出去的“虚拟磁盘”。这个虚拟磁盘文件(.vhdx)会保存在目标服务器本地的一个NTFS或ReFS卷上,但其内容将通过网络提供给发起方。
- 在服务器管理器中,点击左侧导航栏的“文件和存储服务”。
- 点击“iSCSI”。
- 右侧面板会显示iSCSI目标服务器的仪表板。在“iSCSI虚拟磁盘”区域,点击“任务”->“新建iSCSI虚拟磁盘...”。这会启动一个向导。
- 选择位置:首先选择将这个虚拟磁盘文件(.vhdx)存放在服务器的哪个物理卷上。例如,选择你的
D:盘。点击下一步。 - 指定名称:为这个虚拟磁盘起一个名字,比如
DB_Data.vhdx。这个名字仅用于在目标服务器上管理这个文件。 - 指定大小:设置虚拟磁盘的容量,比如
50 GB。你可以选择“动态扩展”或“固定大小”。- 动态扩展:.vhdx文件初始很小,随着写入数据而增长,直到达到设定上限。节省初始空间,但可能有轻微性能开销。
- 固定大小:立即创建一个50GB的.vhdx文件。性能更优,但一次性占用磁盘空间。 对于生产环境的关键应用(如数据库),我通常选择“固定大小”以获得更稳定可预测的性能。实验环境可以用“动态扩展”节省空间。点击下一步。
- 分配iSCSI目标:这一步是关键,决定谁可以访问这个磁盘。
- 如果是第一次创建,可能没有现成的目标。我们选择“新建iSCSI目标”,然后点击下一步。
- 指定目标名称:给这个iSCSI目标起个名字,比如
TargetForDBServer。这个名字是管理用的友好名称,不是IQN。 - 指定访问服务器:这是配置访问控制的核心。你需要在这里添加允许连接的发起方。
- 点击“添加...”按钮。
- 添加发起方有两种主要方式:
- 输入选定类型的值:在下拉框中选择“IQN”。
- 从发起计算机获取:这是更常用的方法。你需要先去发起方计算机(
SRV-ISCSI-INIT)上,打开iSCSI发起程序,在“配置”选项卡里,复制它的“发起程序名称”(即它的IQN)。然后回到目标服务器这个界面,将复制好的IQN粘贴进来。 - 假设我们从发起方获取到的IQN是
iqn.1991-05.com.microsoft:srv-iscsi-init,将其粘贴添加进来。
- 你还可以添加IP地址或DNS名称作为标识符,但IQN是最标准的方式。点击“确定”。
- 启用身份验证(可选但建议):为了安全,可以启用CHAP(挑战握手认证协议)。
- 勾选“启用CHAP”。设置一个“机密”(即密码)。这个密码需要在发起方连接时提供。
- 高级:还可以启用“反向CHAP”,即目标服务器也验证发起方,实现双向认证。生产环境建议启用。实验环境可以先跳过。
- 确认设置:检查所有配置,尤其是IQN是否正确。点击“创建”。
- 向导完成后,你就成功创建了一个iSCSI虚拟磁盘,并为其关联了一个iSCSI目标,该目标只允许你指定的那个IQN的发起方连接。
重复以上步骤,你可以创建多个不同大小、分配给不同目标的iSCSI虚拟磁盘。
3.3 高级配置:iSCSI目标属性与管理
创建完成后,在“iSCSI”管理界面,你可以看到已创建的虚拟磁盘和目标。
- 点击某个iSCSI目标,在下方可以看到其属性。在“属性”面板中,你可以:
- 查看IQN:系统会自动为目标生成一个IQN,格式如
iqn.1991-05.com.microsoft:targetname-[GUID]。发起方连接时需要使用这个目标IQN。 - 修改连接:可以添加或移除允许连接的发起方IQN。
- 配置身份验证:可以事后启用或修改CHAP设置。
- 查看IQN:系统会自动为目标生成一个IQN,格式如
- 对于iSCSI虚拟磁盘,你可以右键点击进行“扩展”(增加容量)、“断开连接”(强制断开所有发起方连接)或“删除”等操作。
4. 在客户端配置iSCSI发起程序并连接存储
现在,我们切换到需要使用存储的客户端机器SRV-ISCSI-INIT上。
4.1 启动并配置iSCSI发起程序
Windows客户端和服务器都内置了iSCSI发起程序,但默认可能未启动。
- 按
Win + R,输入iscsicpl.exe并回车,打开“iSCSI发起程序”属性窗口。如果提示服务未运行,点击“是”启动它。 - 在“配置”选项卡,你可以看到本机的“发起程序名称”(即你的IQN)。这个就是之前需要复制到目标服务器“访问服务器”列表里的那个字符串。你可以点击“更改”来修改它,但通常保持默认即可。
- 切换到“发现”选项卡。这里用于告诉发起程序,去哪里寻找iSCSI目标。
- 点击“发现门户...”按钮。
- 输入目标服务器的IP地址(我们规划的是
10.10.10.10)和端口(默认是3260,保持不变)。 - 如果目标服务器启用了CHAP,可以点击“高级...”进行配置,填入在目标端设置的CHAP用户名和密码。点击“确定”。
- 切换到“目标”选项卡。稍等片刻,或者点击“刷新”,你应该能看到在“已发现的目标”列表中,出现一个目标,其IQN就是之前在目标服务器上创建的那个(例如
iqn.1991-05.com.microsoft:targetfordbserver-[GUID]),状态是“不活动”。
4.2 连接目标并初始化磁盘
- 在“目标”选项卡中,选中发现的目标,点击“连接...”。
- 在弹出的连接窗口中:
- 勾选“将此连接添加到收藏目标列表”,这样系统重启后会自动尝试重新连接。
- 如果配置了CHAP,勾选“启用CHAP登录”并填入密码。
- 点击“高级...”可以进行更详细的设置,比如指定用于iSCSI连接的本地网卡(如果有多块网卡,务必选择连接到存储网络
10.10.10.20的那一块),以及配置IPSec加密(一般内网不需要)。点击“确定”完成连接。
- 连接成功后,目标状态会变为“已连接”。此时,打开“计算机管理” -> “磁盘管理”,系统很可能会弹出“初始化磁盘”的对话框,提示你检测到新磁盘。
- 选择磁盘分区样式(MBR或GPT,对于大于2TB的磁盘必须选GPT),点击“确定”。
- 初始化后,磁盘会显示为“未分配”空间。右键点击该空间,选择“新建简单卷...”,按照向导分配驱动器号、格式化(建议NTFS),完成后,在“此电脑”中就能看到一块新的网络驱动器了,使用起来和本地硬盘完全一样。
5. 性能调优、排错与生产环境考量
基础配置完成后,这块网络磁盘就能用了。但如果想获得更好的性能,或者遇到问题,就需要了解一些进阶知识。
5.1 性能优化建议
iSCSI的性能瓶颈通常在于网络和磁盘IO。
- 网络层面:
- 专用网络:再次强调,为iSCSI划分独立的VLAN或使用独立网卡。
- 巨型帧:在存储网络交换机和服务器网卡上启用Jumbo Frame(巨型帧,通常设为9000字节),可以显著降低CPU开销并提升大块数据吞吐量。关键点:路径上的所有设备(发起方网卡、交换机、目标方网卡)都必须支持并启用相同大小的巨型帧,否则会导致通信问题。
- 多路径:如果服务器有多个存储网络端口,可以配置MPIO(多路径I/O)。这不仅能提供负载均衡和带宽聚合,更重要的是提供了链路冗余。在Windows Server上,需要额外安装“多路径I/O”功能,并在iSCSI发起程序中配置。
- 服务器层面:
- 目标服务器磁盘:存放iSCSI虚拟磁盘文件(.vhdx)的物理磁盘,其性能直接决定了网络存储的最终性能。使用SSD或高性能RAID阵列(如RAID 10)能带来质的提升。
- 发起方缓存:在iSCSI发起程序属性 -> “卷和设备”选项卡,选中已连接的设备,点击“设备属性”,在“RADiUS”选项卡下可以启用缓存。但这有一定风险,需根据应用场景权衡。
5.2 常见问题排查
- 问题:发起方无法发现目标。
- 检查防火墙:确保目标服务器(
10.10.10.10)的TCP 3260端口在Windows防火墙(以及任何第三方防火墙)上是放行的。可以在目标服务器上运行netsh advfirewall firewall add rule name="iSCSI Service" dir=in action=allow protocol=TCP localport=3260来快速添加规则。 - 检查网络连通性:在发起方用
ping 10.10.10.10和telnet 10.10.10.10 3260(如果telnet客户端已安装)测试基础网络和端口。 - 检查IQN配置:确认发起方的IQN是否已被正确添加到目标服务器的“访问服务器”列表中。
- 检查防火墙:确保目标服务器(
- 问题:连接成功,但磁盘管理里看不到新磁盘。
- 扫描磁盘:在发起方的“磁盘管理”中,点击“操作” -> “重新扫描磁盘”。
- 检查LUN映射:在目标服务器上,确认虚拟磁盘已正确创建并关联到了允许该发起方连接的目标上,且LUN状态正常。
- 检查多路径软件冲突:如果安装了第三方多路径或存储管理软件,可能会接管磁盘识别,需要在其管理界面中查看。
- 问题:传输速度慢,不稳定。
- 排除网络竞争:用
ping -t 10.10.10.10持续ping,看延迟是否稳定,有无丢包。不稳定的延迟和丢包是iSCSI性能杀手。 - 检查巨型帧:在发起方和目标方的网卡属性、交换机端口上,确认巨型帧设置一致且已启用。
- 检查网卡负载:在任务管理器的“性能”选项卡中,观察存储网卡的利用率是否已接近瓶颈。
- 排除网络竞争:用
5.3 生产环境部署要点
在真实业务中部署iSCSI,除了性能,更要考虑可靠性和可维护性。
- 高可用性:单台iSCSI目标服务器是单点故障。可以考虑使用Windows Server Failover Cluster(故障转移群集)来构建高可用的iSCSI目标服务器,或者采用专业的存储设备(它们通常也支持iSCSI协议并提供双控制器等高可用架构)。
- 备份与快照:iSCSI虚拟磁盘文件(.vhdx)本身是文件,可以通过文件级备份来保护。但更常见的做法是在发起方(使用存储的服务器)上,利用卷影复制服务(VSS)或应用自身的备份功能来备份数据。一些高级的存储系统也支持在目标端对LUN做快照。
- 监控:使用Windows性能监视器(PerfMon)跟踪关键计数器,如
LogicalDisk(*)\Disk Read/Write Bytes/sec(针对发起方看到的磁盘),Network Interface(*)\Bytes Total/sec(针对存储网卡),以及服务器本身的CPU和内存使用情况。 - 安全加固:务必使用CHAP认证,甚至双向CHAP。严格限制访问控制列表(ACL),只允许必要的发起方IQN连接。将iSCSI存储网络置于逻辑隔离的网络区域。
通过以上从规划、配置到优化、排错的完整流程,你应该能够独立完成一个Windows Server 2012 iSCSI存储环境的搭建。这套方法不仅适用于实验和学习,其核心思想和步骤也完全适用于更新版本的Windows Server以及生产环境的初步评估。记住,存储是数据的家,稳定和性能永远是第一位的,在每一步操作前多思考一下冗余和回退方案,会让你的运维工作更加从容。