1. 为什么你需要iSCSI共享存储?
如果你管理过几台服务器,肯定遇到过这样的头疼事:A服务器上的硬盘快满了,B服务器上却还有大量闲置空间,数据没法直接挪过去用。或者,你想给几台虚拟机提供一个共同的“数据仓库”,让它们都能读写同一份数据,比如搭建一个高可用的数据库集群。这时候,iSCSI 就该登场了。
简单来说,iSCSI就是一种“网络硬盘”技术。它能把一台服务器(我们叫它Target,目标器)上的物理硬盘、分区或者逻辑卷,“伪装”成一块通过网络访问的虚拟硬盘。其他服务器(我们叫它Initiator,启动器)通过标准的以太网,就能像使用本地硬盘一样,去挂载和使用这块“网络硬盘”。
这带来的好处是显而易见的:
- 集中管理:所有存储资源都在一台或几台存储服务器上,备份、扩容、维护都方便。
- 灵活分配:可以根据需要,给不同的主机分配不同大小的“虚拟硬盘”(LUN)。
- 成本低廉:利用现有的IP网络,无需投资昂贵的光纤交换机(FC-SAN),特别适合中小企业和实验室环境。
- 跨平台:Windows、Linux、VMware等主流系统都原生支持iSCSI客户端,兼容性极好。
我过去在搭建虚拟化平台和数据库集群时,iSCSI是构建共享存储的首选方案。它没有想象中那么复杂,跟着我的步骤,从零开始搭建一套可用的iSCSI存储环境,半小时内你就能搞定。
2. 搭建iSCSI服务器端(Target)
我们先把提供存储的那台服务器配置好。这里我以CentOS/RHEL 7/8为例,其他发行版命令可能略有不同,但思路完全一致。
2.1 环境准备与磁盘规划
首先,确保你的存储服务器有一块或多块额外的硬盘或分区用于共享。千万别把系统盘共享出去,那会出大问题。你可以用 lsblk 或 fdisk -l 命令查看现有磁盘。
假设我们有一块额外的硬盘 /dev/sdb,我们打算分两个区出来做共享:
# 使用fdisk或parted对/dev/sdb进行分区,这里简单演示创建两个主分区
sudo fdisk /dev/sdb
# 在fdisk交互界面中,依次输入 n (新建), p (主分区), 1 (分区号1), 回车 (起始扇区), +10G (大小)
# 然后输入 t (修改类型), 1 (选择分区1), 8e (Linux LVM类型,虽然不是必须,但好管理)
# 同样步骤创建第二个分区,比如再分10G
# 最后输入 w 保存并退出
sudo partprobe /dev/sdb # 让内核重新读取分区表
现在你应该能看到 /dev/sdb1 和 /dev/sdb2 这两个分区了。它们就是我们待会儿要共享出去的“原材料”。
2.2 安装与启动target服务
CentOS/RHEL的存储服务软件包叫 targetcli,它是一个非常友好的交互式配置工具。
sudo yum install -y targetcli # CentOS 7/8
# 如果是RHEL 8,可能需要启用并订阅相关仓库
# 如果是Ubuntu/Debian,软件包是 `targetcli-fb`
sudo systemctl enable target --now # 启动并设置开机自启
sudo systemctl status target # 检查服务状态,确认是 active (running)
安装启动后,直接输入 targetcli 就能进入它的专属配置Shell。这个Shell有自己的目录结构,别和系统根目录搞混了。
2.3 核心配置四步曲
进入 targetcli 后,跟着我做下面四步,像搭积木一样就把服务端配好了。
第一步:创建后端存储对象(Backstore) 这步是把我们准备好的物理分区(/dev/sdb1)注册到iSCSI服务里,并给它起个名字,比如 disk_shared1。
/> cd /backstores/block
/backstores/block> create disk_shared1 /dev/sdb1
Created block storage object disk_shared1 using /dev/sdb1.
你可以用 ls 命令查看创建好的对象。这里 block 类型表示我们用的是块设备,还有 fileio(文件镜像)、ramdisk(内存盘)等其他类型,但最常用、性能最好的就是 block。
第二步:创建iSCSI目标(Target) Target是给客户端看的“入口”或“门户”。它有一个全球唯一的名称,格式是 iqn.年月.域名反写:自定义标识。
/> cd /iscsi
/iscsi> create iqn.2023-05.com.example.www:storage.target1
Created target iqn.2023-05.com.example.www:storage.target1.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
命令执行后,系统自动创建了一个目标门户组(TPG 1),并默认在所有IP的3260端口上监听。iqn.2023-05.com.example.www:storage.target1 这个字符串很重要,客户端就靠它来找到你。
第三步:在Target中创建LUN并关联存储 LUN(逻辑单元号)可以理解为Target这个“柜子”里的一个个“抽屉”。客户端最终挂载到的是具体的L


915

被折叠的 条评论
为什么被折叠?



