第416集集群架构-iSCSI块存储服务 | 字数总计: 4.6k | 阅读时长: 18分钟 | 阅读量:
集群架构 - iSCSI块存储服务 1. iSCSI技术介绍 1.1 硬盘接口类型 为了进一步提升硬盘存储设备的读写速度和性能,人们一直在努力改进物理硬盘设备的接口协议。当前的硬盘接口类型主要有IDE、SCSI和SATA这3种。
接口类型
说明
特点
IDE
集成驱动电子设备
成熟稳定、价格便宜的并行传输接口
SATA
串行ATA接口
传输速度更快、数据校验更完整的串行传输接口
SCSI
小型计算机系统接口
系统资源占用率低、转速高、传输速度快等优点
1.2 SCSI接口特点 SCSI (Small Computer System Interface) 是一种用于计算机和硬盘、光驱等设备之间系统级接口的通用标准,具有以下优点:
系统资源占用率低 : CPU占用率低
转速高 : 支持高转速硬盘
传输速度快 : 数据传输速度快
扩展性强 : 支持多设备连接
1.3 iSCSI技术概述 iSCSI (Internet Small Computer System Interface) 技术在工作形式上分为服务端target与客户端initiator。
iSCSI架构 :
iSCSI服务端 (Target) : 用于存放硬盘存储资源的服务器
iSCSI客户端 (Initiator) : 用户使用的软件,用于访问远程服务端的存储资源
1.4 iSCSI工作原理 iSCSI协议将SCSI命令封装在TCP/IP数据包中,通过IP网络传输,实现远程存储访问。
工作流程 :
客户端发起连接请求
服务端验证客户端身份
建立iSCSI会话
客户端可以像使用本地磁盘一样使用远程存储
1.5 iSCSI优势
优势
说明
成本低
使用现有IP网络,无需专用存储网络
易管理
基于IP网络,管理简单
扩展性强
可以轻松扩展存储容量
兼容性好
支持多种操作系统
2. 配置iSCSI服务端 2.1 安装iSCSI服务
软件包说明 :
targetd : iSCSI服务端守护进程
targetcli : iSCSI服务端配置管理工具
2.2 启动iSCSI服务 1 2 3 4 5 6 7 8 [root@iscsi-server ~] [root@iscsi-server ~] [root@iscsi-server ~]
2.3 配置iSCSI服务共享资源 targetcli是用于管理iSCSI服务端存储资源的配置命令,将iSCSI共享资源的配置内容抽象成”目录”的形式,我们只需将各类配置信息填入到相应的”目录”中即可。
进入targetcli配置界面 1 2 3 4 5 6 7 8 [root@linux-node1 ~] targetcli shell version 2.1.fb46 Copyright 2011-2013 by Datera, Inc and others. For help on commands, type 'help' . />
创建块存储对象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 /> cd backstores/block /backstores/block> create disk0 /dev/sdb Created block storage object disk0 using /dev/sdb. /backstores/block> cd / /> ls o- / ..................................................................... [...] o- backstores .......................................................... [...] | o- block .............................................. [Storage Objects: 1] | | o- disk0 ..................... [/dev/sdb (20.0GiB) write-thru deactivated] | | o- alua ............................................... [ALUA Groups: 1] | | o- default_tg_pt_gp ................... [ALUA state: Active/optimized] | o- fileio ............................................. [Storage Objects: 0] | o- pscsi .............................................. [Storage Objects: 0] | o- ramdisk ............................................ [Storage Objects: 0] o- iscsi ........................................................ [Targets: 0] o- loopback ..................................................... [Targets: 0]
说明 :
disk0: 存储对象名称(可自定义)
/dev/sdb: 要共享的块设备
2.4 创建iSCSI target名称及配置共享资源 iSCSI target名称是由系统自动生成,用于描述共享资源的唯一字符串。
客户端在扫描iSCSI服务端时即可看见该字符串,因此我们无需记忆该字符串。
系统在生成这个target名称后,还会在/iscsi参数目录中创建一个与其字符串同名的新”目录”用来存放共享资源。
创建iSCSI target 1 2 3 4 5 6 7 8 9 /> cd iscsi /iscsi> create Created target iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73. Created TPG 1. Global pref auto_add_default_portal=true Created default portal listening on all IPs (0.0.0.0), port 3260.
iSCSI名称格式 :
将存储对象添加到LUN 1 2 3 4 5 6 /iscsi> cd iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73/tpg1/luns /iscsi/iqn.20...a73/tpg1/luns> create /backstores/block/disk0 Created LUN 0.
LUN说明 :
LUN (Logical Unit Number): 逻辑单元号
每个LUN对应一个存储对象
2.5 设置访问控制列表(ACL) iSCSI协议是通过客户端名称进行验证,用户在访问存储共享资源时不需要输入密码,只要iSCSI客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可。
acls参数目录用于存放能够访问iSCSI服务端共享存储资源的客户端名称。
1 2 3 4 5 6 7 /iscsi/iqn.20...a9756a73/tpg1> cd acls /iscsi/iqn.20...a73/tpg1/acls> create iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73:client Created Node ACL for iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73:client Created mapped LUN 0.
ACL说明 :
ACL (Access Control List): 访问控制列表
只有ACL中的客户端名称才能访问存储资源
客户端名称格式与服务端target名称类似
2.6 设置iSCSI服务端的监听IP地址和端口号 1 2 3 4 5 6 7 8 9 10 /iscsi/iqn.20...d80/tpg1/acls> cd .. /iscsi/iqn.20...c356ad80/tpg1> cd portals /iscsi/iqn.20.../tpg1/portals> create 192.168.56.11 Using default IP port 3260 Created network portal 192.168.56.11:3260.
说明 :
默认端口: 3260
可以指定多个IP地址和端口
0.0.0.0表示监听所有网卡
2.7 配置后检查配置信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 /iscsi/iqn.20.../tpg1/portals> cd / /> ls o- / ..................................................................... [...] o- backstores .......................................................... [...] | o- block .............................................. [Storage Objects: 1] | | o- disk0 ....................... [/dev/sdb (20.0GiB) write-thru activated] | | o- alua ............................................... [ALUA Groups: 1] | | o- default_tg_pt_gp ................... [ALUA state: Active/optimized] | o- fileio ............................................. [Storage Objects: 0] | o- pscsi .............................................. [Storage Objects: 0] | o- ramdisk ............................................ [Storage Objects: 0] o- iscsi ........................................................ [Targets: 1] | o- iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73 . [TPGs: 1] | o- tpg1 ........................................... [no-gen-acls, no-auth] | o- acls ...................................................... [ACLs: 1] | | o- iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73:client [Mapped LUNs: 1] | | o- mapped_lun0 ............................. [lun0 block/disk0 (rw)] | o- luns ...................................................... [LUNs: 1] | | o- lun0 .................. [block/disk0 (/dev/sdb) (default_tg_pt_gp)] | o- portals ................................................ [Portals: 1] | o- 0.0.0.0:3260 ................................................. [OK] /> saveconfig Configuration saved to /etc/target/saveconfig.json /> exit
重要提示 : 不要使用Ctrl+C结束targetcli进程,应使用exit命令退出,否则配置可能丢失。
2.8 重启服务并配置防火墙 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@liyanzhao ~] [root@liyanzhao ~] success [root@linux-node1 ~] success [root@linux-node1 ~] 3260/tcp
iSCSI端口说明 :
3. 配置Linux客户端 3.1 安装iSCSI客户端服务程序 1 2 yum install iscsi-initiator-utils
软件包说明 :
iscsi-initiator-utils : iSCSI客户端工具集
包含iscsiadm、iscsid等工具
3.2 配置客户端initiator名称 编辑iSCSI客户端中的initiator名称文件,将服务端的访问控制列表名称填写进来。
1 2 3 4 5 [root@liyanzhao ~] InitiatorName=iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73:client
说明 :
客户端名称必须与服务端ACL中配置的名称完全一致
格式: InitiatorName=客户端名称
3.3 重启客户端iscsid服务 1 2 3 4 5 6 7 8 [root@liyanzhao ~] [root@liyanzhao ~] [root@liyanzhao ~]
3.4 发现iSCSI服务端共享存储资源 iSCSI客户端访问并使用共享存储资源的步骤很简单:发现、登录、挂载、使用。
iscsiadm是用于管理、查询、插入、更新或删除iSCSI数据库配置文件的命令行工具。
1 2 3 4 5 6 [root@liyanzhao ~] 192.168.56.11:3260,1 iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73
命令参数说明 :
-m discovery: 发现模式
-t st: 发送目标发现类型
-p IP地址: 指定iSCSI服务端IP地址
3.5 登录iSCSI服务端 iscsiadm命令发现远程服务器上可用的存储资源后,然后使用iscsiadm登录ISCSI服务端。
1 2 3 4 5 6 7 8 9 10 [root@liyanzhao ~] -T iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73 \ -p 192.168.56.11 --login Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73, portal: 192.168.56.11,3260] Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73, portal: 192.168.56.11,3260]: successful
命令参数说明 :
-m node: 节点模式
-T target名称: 指定要连接的target
-p IP地址: 指定服务端IP地址
--login 或 -l: 执行登录操作
3.6 格式化并挂载iSCSI存储 iSCSI客户端成功登录之后,会在客户端主机上多出一块名为/dev/sd[x]的设备文件,进行格式化挂载即可。
查看当前磁盘 1 2 3 4 5 6 7 8 [root@liyanzhao ~] NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part / sdb 8:16 0 20G 0 disk sdc 8:32 0 20G 0 disk
说明 : 新出现的设备可能是sdb、sdc等,根据实际情况确定。
格式化并挂载 1 2 3 4 5 6 7 8 9 10 11 12 [root@liyanzhao ~] [root@liyanzhao ~] [root@liyanzhao ~] [root@liyanzhao ~] /dev/sdc 20G 33M 20G 1% /iscsi
3.7 开机自动挂载 1 2 3 4 5 6 7 8 9 10 [root@liyanzhao ~] /dev/sdc: UUID="0b5f71ea-90f9-45c5-a7cb-6a22f5460a67" TYPE="xfs" [root@liyanzhao ~] UUID=0b5f71ea-90f9-45c5-a7cb-6a22f5460a67 /iscsi xfs defaults 0 0 [root@liyanzhao ~]
注意 : 由于iSCSI是网络存储,建议在fstab中添加_netdev选项,确保网络就绪后再挂载。
1 2 UUID=0b5f71ea-90f9-45c5-a7cb-6a22f5460a67 /iscsi xfs defaults,_netdev 0 0
3.8 卸载iSCSI共享设备资源 1 2 3 4 5 6 7 8 9 10 [root@liyanzhao ~] [root@liyanzhao ~] -T iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73 \ -p 192.168.56.11 -u Logging out of session [sid: 1, target: iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73, portal: 192.168.56.11,3260] Logout of [sid: 1, target: iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73, portal: 192.168.56.11,3260]: successful
命令参数说明 :
3.9 Linux客户端管理命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 iscsiadm -m discoverydb -t st -p 192.168.56.11 iscsiadm -m session iscsiadm -m node iscsiadm -m node -T target名称 -p IP地址 --op delete iscsiadm -m node -T target名称 -p IP地址 --op update -n node.startup -v automatic
4. 配置Win客户端 使用Windows系统的客户端也可以正常访问iSCSI服务器上的共享存储资源,而且操作原理及步骤与Linux系统的客户端基本相同。
4.1 运行iSCSI发起程序 在Windows 7操作系统中已经默认安装了iSCSI客户端程序,我们只需在控制面板中找到”系统和安全”标签,然后单击”管理工具”。
操作步骤 :
打开”控制面板”
选择”系统和安全”
单击”管理工具”
进入到”管理工具”双击”iSCSI发起程序”,在第一次运行iSCSI发起程序时,系统会提示Microsoft iSCSI服务端未运行,单击”是”按钮即可自动启动并运行iSCSI发起程序。
4.2 扫描发现iSCSI服务端 必须先扫描发现iSCSI服务端上可用的存储资源。
操作步骤 :
在iSCSI发起程序的”目标”窗口栏写入iSCSI服务端的IP地址
单击”快速连接”
在弹出的”快速连接”提示框中可看到共享的硬盘存储资源,单击”完成”按钮即可。
回到”目标”选项卡页面,可以看到共享存储资源的名称已经出现。
4.3 配置客户端名称 由于在iSCSI服务端程序上设置了ACL使得只有客户端名称与ACL策略中的名称保持一致时才能使用远程存储资源,因此需要在”配置”选项卡中单击”更改”按钮,把iSCSI发起程序的名称修改为服务端ACL中配置的客户端名称。
操作步骤 :
切换到”配置”选项卡
单击”更改”按钮
修改iSCSI发起程序名称
确认修改
在确认客户端发起程序的名称修改正确后即可返回到”目标”选项卡页面中,然后单击”连接”按钮进行连接请求,成功连接到远程共享存储资源的页面。
4.4 访问iSCSI远程共享存储资源 右键单击桌面上的”计算机”图标,打开计算机管理程序。
操作步骤 :
右键”计算机” → “管理”
打开”计算机管理”窗口
选择”存储” → “磁盘管理”
4.5 对磁盘进行初始化操作 在磁盘管理界面中,可以看到新检测到的iSCSI磁盘设备。
初始化步骤 :
初始化磁盘 : 右键新磁盘 → “初始化磁盘”
创建分区 : 右键未分配空间 → “新建简单卷”
启动”新建简单卷向导”
设置分区大小
分配驱动器号(盘符)
选择文件系统(NTFS)和卷标
完成初始化
等待初始化完成 : 系统会自动格式化磁盘并完成初始化
注意事项 :
选择合适的分区表类型(MBR支持2TB以下,GPT支持更大容量)
选择合适的文件系统(Windows通常使用NTFS)
初始化过程可能需要一些时间
4.6 Windows客户端管理 查看iSCSI连接状态 :
在iSCSI发起程序中查看”目标”选项卡
显示”已连接”状态表示连接成功
断开iSCSI连接 :
在”目标”选项卡中,选择已连接的target
单击”断开”按钮
删除target :
在”目标”选项卡中,选择target
单击”删除”按钮
5. iSCSI服务管理 5.1 服务端管理命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 systemctl start targetd systemctl stop targetd systemctl restart targetd systemctl status targetd systemctl enable targetd
5.2 targetcli管理命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 targetcli ls saveconfig exit
5.3 客户端管理命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 iscsiadm -m discovery -t st -p IP地址 iscsiadm -m node -T target名称 -p IP地址 --login iscsiadm -m node -T target名称 -p IP地址 -u iscsiadm -m session iscsiadm -m node iscsiadm -m node -T target名称 -p IP地址 --op update -n node.startup -v automatic
6. iSCSI故障排查 6.1 常见问题 问题1: 无法发现target 排查步骤 :
1 2 3 4 5 6 7 8 9 10 11 12 systemctl status targetd ss -lntup | grep 3260 firewall-cmd --list-ports ping 服务端IP telnet 服务端IP 3260
问题2: 登录失败 排查步骤 :
1 2 3 4 5 6 7 8 9 10 11 cat /etc/iscsi/initiatorname.iscsitargetcli /> cd /iscsi/iqn.../tpg1/acls /acls> ls journalctl -u targetd -f tail -f /var/log/messages
问题3: 无法识别磁盘 排查步骤 :
1 2 3 4 5 6 7 8 9 10 11 iscsiadm -m session echo "- - -" > /sys/class/scsi_host/host0/scanrescan-scsi-bus.sh lsblk fdisk -l
6.2 错误代码
错误信息
说明
解决方法
Connection refused
连接被拒绝
检查服务端服务和防火墙
Login failed
登录失败
检查initiator名称和ACL配置
No route to host
无法到达主机
检查网络连通性
Timeout
连接超时
检查网络和防火墙规则
7. iSCSI安全加固 7.1 安全建议
使用CHAP认证 : 启用用户名密码认证
限制访问IP : 使用防火墙限制访问来源
使用专用网络 : 将iSCSI流量隔离到专用网络
定期更新 : 保持软件最新版本
7.2 启用CHAP认证 1 2 3 4 5 6 7 8 9 targetcli /> cd /iscsi/iqn.../tpg1 /tpg1> set attribute authentication=1 /tpg1> set attribute generate_node_acls=0 /tpg1> cd acls/iqn.../client /client> set auth userid=用户名 /client> set auth password=密码 /> saveconfig
7.3 防火墙配置 1 2 3 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.56.0/24" port port="3260" protocol="tcp" accept' firewall-cmd --reload
8. iSCSI性能优化 8.1 网络优化 1 2 3 4 5 6 7 8 9 10 11 cat >> /etc/sysctl.conf <<EOF # iSCSI优化 net.ipv4.tcp_timestamps = 1 net.ipv4.tcp_sack = 1 net.ipv4.tcp_window_scaling = 1 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 EOF sysctl -p
8.2 存储优化
8.3 客户端优化 1 2 3 4 5 node.session.timeo.replacement_timeout = 120 node.conn[0].timeo.noop_out_interval = 5 node.conn[0].timeo.noop_out_timeout = 5
9. iSCSI实战案例 9.1 案例1: 多客户端共享存储 需求 : 多个客户端共享同一个iSCSI存储。
配置步骤 :
1 2 3 4 5 6 7 8 9 10 11 12 targetcli /> cd /iscsi/iqn.../tpg1/acls /acls> create iqn.2003-01.org.linux-iscsi.client1 /acls> create iqn.2003-01.org.linux-iscsi.client2 InitiatorName=iqn.2003-01.org.linux-iscsi.client1 InitiatorName=iqn.2003-01.org.linux-iscsi.client2
9.2 案例2: 多路径配置 需求 : 配置iSCSI多路径以提高可用性和性能。
配置步骤 :
1 2 3 4 5 6 7 8 yum install device-mapper-multipath -y mpathconf --enable vim /etc/multipath.conf
实战优化