配置iSCSI实现Linux的远程块存储

news2024/11/30 10:56:28

文章目录

  • 一 名词解释
  • 二 需求
  • 三 环境准备
  • 四 搭建流程
    • 1 服务端准备硬盘并分区
    • 2 服务端安装软件包,并启动服务
    • 3 服务端 `5个create` 操作
      • 3-1 定义块设备,创建后备存储。
      • 3-2 为目标创建IQN
      • 3-3 创建一个ACL来控制特定的客户端访问
      • 3-4 为每个后备存储创建一个LUN,激活后备存储,由ACL自动分配
      • 3-5 创建门户来指定(服务端)本地要侦听的IP和端口
      • 3-6 保存配置信息并退出
      • 3-7 查看服务端整体配置信息
    • 4 客户端安装软件,修改IQN信息,启动服务
    • 5 发现目标和登录目标
    • 6 客户端挂载文件系统

一 名词解释

术语描述
启动器一个ISCSI客户端,通常以软件提供,必须为其授予唯一名称
目标一个ISCSI存储资源,针对来自ISCSI服务器的连接而配置,必须为其授予唯一名称
ACL访问权限控制列表,使用IQN来验证启动器是否有访问权限
发现查询目标服务器,以便列出配置的目标
IQNISCSI限定名称,全球唯一名称,其强制命名格式可以识别启动器和目标
登录向目标或LUN进行身份验证,从而开始使用客户端块设备
LUN逻辑单元号,带有编号的块设备连接到目标,并且通过目标来使用,一般一个目标只提供一个LUN
节点任意ISCSI启动器或目标,通过IQN来标识
门户目标或启动器上用于建立连接的IP地址和端口
TPG目标门户组,某个特定ISCSI目标将要侦听的接口IP和TCP端口的集合

二 需求

1)在服务端创建一个1GB大小的分区用作后备存储。
2)创建名为iqn.2022-11.com.example:serverx的新 ISCSI 目标,并且仅限于iqn.2022-11.com.example:desktopx的客户端。
3)发现并登录到新目标。
4)在新磁盘上创建 XFS 文件系统,并将其持久挂载到 /iscsidisk上。

三 环境准备

服务端IP10.0.0.11 主机名:server
客户端IP10.0.0.12 主机名:client
使用红帽旗下的 centos7.6 系统

[root@server tools]# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.6 (Maipo)
[root@server tools]# uname -r
3.10.0-957.el7.x86_64

关闭了防火墙和 selinux

[root@server tools]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
[root@server tools]# getenforce
Disabled

四 搭建流程

1 服务端准备硬盘并分区

Linux磁盘分区和管理

准备一块10G的硬盘,添加硬盘并让系统检测到,再进行一次分区,分区为1个G。
如果不清楚如何磁盘分区,可以参考笔者的写过的文章(上面是链接),此处不作重点阐述,只进行命令的展示。

[root@server ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x6e73b1a0.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +1G
Partition 1 of type Linux and of size 1 GiB is set

Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x6e73b1a0

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@server ~]# partprobe /dev/sdb

2 服务端安装软件包,并启动服务

[root@server ~]# yum install -y targetcli
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
epel

================================                                                                                            
中间信息省略
================================

Installed:
  targetcli.noarch 0:2.1.53-1.el7_9                                                                                             

Dependency Installed:
  pyparsing.noarch 0:1.5.6-9.el7             python-configshell.noarch 1:1.1.26-1.el7      python-kmod.x86_64 0:0.9-4.el7     
  python-rtslib.noarch 0:2.1.74-1.el7_9      python-urwid.x86_64 0:1.1.1-3.el7            

Complete!

安装后,启动服务,开机后自动启动服务,并检查服务状态

[root@server ~]# systemctl start target
[root@server ~]# systemctl enable target
Created symlink from /etc/systemd/system/multi-user.target.wants/target.service to /usr/lib/systemd/system/target.service.
[root@server ~]# systemctl status target
● target.service - Restore LIO kernel target configuration
   Loaded: loaded (/usr/lib/systemd/system/target.service; enabled; vendor preset: disabled)
   Active: active (exited) since Sun 2022-11-27 20:15:37 CST; 9s ago
 Main PID: 13609 (code=exited, status=0/SUCCESS)

Nov 27 20:15:36 server systemd[1]: Starting Restore LIO kernel target configuration...
Nov 27 20:15:37 server target[13609]: No saved config file at /etc/target/saveconfig.json, ok, exiting
Nov 27 20:15:37 server systemd[1]: Started Restore LIO kernel target configuration.

3 服务端 5个create 操作

首先进入targetcli交互式模式

[root@server ~]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> 

3-1 定义块设备,创建后备存储。

block1 是创建的后端存储名称, /dev/sdb1是块存储设备

/> cd /backstores/block 
/backstores/block> create block1 /dev/sdb1
Created block storage object block1 using /dev/sdb1.

3-2 为目标创建IQN

/backstores/block> cd /iscsi 
/iscsi> create iqn.2022-11.com.example:serverx
Created target iqn.2022-11.com.example:serverx.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.

3-3 创建一个ACL来控制特定的客户端访问

此处的IQN是客户端/etc/iscsi/initiatorname.iscsi文件里面的内容,表示本地服务端允许哪些客户端可以访问的白名单。

/iscsi> cd iqn.2022-11.com.example:serverx/tpg1/acls 
/iscsi/iqn.20...erx/tpg1/acls> create iqn.2022-11.com.example:desktopx
Created Node ACL for iqn.2022-11.com.example:desktopx

3-4 为每个后备存储创建一个LUN,激活后备存储,由ACL自动分配

/iscsi/iqn.20...erx/tpg1/acls> cd /iscsi/iqn.2022-11.com.example:serverx/tpg1/luns 
/iscsi/iqn.20...erx/tpg1/luns> create /backstores/block/block1 
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.2022-11.com.example:desktopx

3-5 创建门户来指定(服务端)本地要侦听的IP和端口

此处指的是服务端开放给客户端可以找到的IP和端口,因此写的是服务端自己的IP和选择开放的端口,注意不要和本地的端口冲突。本机(服务端)的IP是10.0.0.11,因此开放的IP和端口是10.0.0.11 3260

/iscsi/iqn.20...erx/tpg1/luns> cd /iscsi/iqn.2022-11.com.example:serverx/tpg1/portals
/iscsi/iqn.20.../tpg1/portals> create 10.0.0.11 3260
Using default IP port 3260
Could not create NetworkPortal in configFS
/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260
Deleted network portal 0.0.0.0:3260
/iscsi/iqn.20.../tpg1/portals> create 10.0.0.11 3260
Using default IP port 3260
Created network portal 10.0.0.11:3260.

可以看到,由于本地的端口冲突,我删除了0.0.0.0 3260的IP和端口,添加了自己设置的内容。

3-6 保存配置信息并退出

使用ctrl+D即可保存退出。

/> exit
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json

3-7 查看服务端整体配置信息

在这里插入图片描述

4 客户端安装软件,修改IQN信息,启动服务

安装软件包

[root@client iscsi]# yum install -y iscsi-initiator-utils
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
epel                                                                                                     

==================
中间信息省略
==================

Updated:
  iscsi-initiator-utils.x86_64 0:6.2.0.874-22.el7_9                                                                             

Dependency Updated:
  iscsi-initiator-utils-iscsiuio.x86_64 0:6.2.0.874-22.el7_9                                                                    

Complete!

修改IQN信息。

(如果客户端ISCSI服务原本是开启的,修改完配置文件后,需要重启 iscsid服务。)

[root@client tools]# cd /etc/iscsi/
[root@client iscsi]# cp initiatorname.iscsi initiatorname.iscsi.bak
[root@client iscsi]# cat initiatorname.iscsi
InitiatorName=iqn.2022-11.com.example:desktopx

启动服务,实现服务的开机自动启动,检查服务状态

[root@client iscsi]# systemctl start iscsid
[root@client iscsi]# systemctl enable iscsid
[root@client iscsi]# systemctl status iscsid
● iscsid.service - Open-iSCSI
   Loaded: loaded (/usr/lib/systemd/system/iscsid.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2022-11-27 21:01:33 CST; 8min ago
     Docs: man:iscsid(8)
           man:iscsiuio(8)
           man:iscsiadm(8)
 Main PID: 101685 (iscsid)
   Status: "Ready to process requests"
   CGroup: /system.slice/iscsid.service
           └─101685 /sbin/iscsid -f

Nov 27 21:01:33 client systemd[1]: Starting Open-iSCSI...
Nov 27 21:01:33 client systemd[1]: Started Open-iSCSI.

5 发现目标和登录目标

发现目标

[root@client iscsi]# iscsiadm -m discovery -t sendtargets -p 10.0.0.11
10.0.0.11:3260,1 iqn.2022-11.com.example:serverx

登陆目标

[root@client iscsi]# iscsiadm -m node -T iqn.2022-11.com.example:serverx -p 10.0.0.11 -l
Logging in to [iface: default, target: iqn.2022-11.com.example:serverx, portal: 10.0.0.11,3260] (multiple)
Login to [iface: default, target: iqn.2022-11.com.example:serverx, portal: 10.0.0.11,3260] successful.

ps.如果想要删除这些目标的发现,则执行下面命令,先登陆退出,再删除。
(当你完成本文的需求后,想要删除的话,可以执行下面两个命令操作)。

[root@client ~]# iscsiadm -m node -T iqn.2022-11.com.example:serverx -p 10.0.0.11 --logout
Logging out of session [sid: 1, target: iqn.2022-11.com.example:serverx, portal: 10.0.0.11,3260]
Logout of [sid: 1, target: iqn.2022-11.com.example:serverx, portal: 10.0.0.11,3260] successful.
[root@client ~]# iscsiadm -m node -o delete

6 客户端挂载文件系统

查看当前磁盘信息,会发现多了一块盘

[root@client iscsi]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   20G  0 disk 
├─sda1          8:1    0  200M  0 part /boot
└─sda2          8:2    0 19.8G  0 part 
  ├─rhel-root 253:0    0 18.3G  0 lvm  /
  └─rhel-swap 253:1    0  1.5G  0 lvm  [SWAP]
sdb             8:16   0    1G  0 disk 
sr0            11:0    1  4.2G  0 rom  
[root@client iscsi]# ll /dev/sdb
brw-rw---- 1 root disk 8, 16 Nov 27 21:12 /dev/sdb

首先创建文件系统

[root@client iscsi]# mkfs -t xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

检查文件系统创建的信息

[root@client iscsi]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb    8:16   0   1G  0 disk 

创建挂载点,并进行设备的临时挂载

[root@client iscsi]# mkdir /iscsidisk
[root@client iscsi]# mount /dev/sdb /iscsidisk

将挂载信息写入配置文件,实现永久挂载

[root@client iscsi]# tail -1 /etc/fstab 
/dev/sdb                /iscsidisk              xfs     defaults        0 0

最后将所有目录重新挂载,再次确认

[root@client iscsi]# mount -a
[root@client iscsi]# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root   19G  4.1G   15G  23% /
devtmpfs               470M     0  470M   0% /dev
tmpfs                  487M     0  487M   0% /dev/shm
tmpfs                  487M  8.1M  479M   2% /run
tmpfs                  487M     0  487M   0% /sys/fs/cgroup
/dev/sda1              197M  143M   55M  73% /boot
tmpfs                   98M     0   98M   0% /run/user/0
/dev/sdb              1014M   33M  982M   4% /iscsidisk

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于C#的校园闲置物品共享系统的开发和实现(Asp.net+Web)

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1选题背景 1 1.1.1校园闲置物品共享系统的开发背景 1 1.1.2学生闲置物品交易活动的现状 1 1.2 校园闲置物品共享系统的研究方向和内容 1 1.2.1研究方向 1 1.2.2研究内容 2 1.3 校园闲置物品共享系统的设计目标 2 1.4 校园闲置物品共…

Visual Studio Code(vs code) 安装c# .net环境 solution

Visual Studio Code(vs code) 安装c# .net环境 solution 一、安装.net必要环境 1.安装环境 https://dotnet.microsoft.com/zh-cn/download 我这里选择的是 .net 6.0 ;版本 .net SDK x86 2.在vs code拓展 搜索.net 全名:.NET Core Extension Pack 作者&#xf…

操作系统的发展与分类

文章目录世界上第一台通用电子计算机操作系统的发展阶段1. 手工操作阶段(无操作系统的计算机系统)2. 批处理阶段:同时处理多道程序3. 分时操作系统(Time Sharing System)4. 实时操作系统(Real Time System&…

毫米波传感器原理介绍:测距

因为本篇是第一篇关于毫米波雷达传感器设备的介绍,我便多啰嗦两句。近几年随着无人驾驶等领域在国内的火热,做支撑实现无人驾驶的智能设备也多了起了,首当其冲的便是无人驾驶的眼睛“摄像头”,同样作为一种辅助手段的雷达技术也被…

HTMLDOM中的API之btoa和atob

btoa() btoa() 方法可以将一个二进制字符串(例如,将字符串中的每一个字节都视为一个二进制数据字节)编码为 Base64 编码的 ASCII 字符串。 示例: let encodedData window.btoa("Hello, world"); // 编码 let decode…

【C++笔试强训计划】第一天

遇事不决,可问春风,春风不语,即随本心 欢迎来到我的笔试强训计划专栏,这是计划正式开始的第一天。另外,我想说的是:博主本身水平有限,本专栏只作为学习笔记分享记录使用,对于一些题目…

Linux中如何获得进程的运行时堆栈

关于这个话题,我们一般是为了处理一下生产环境中程序出现死循环或者死锁等问题。我们一般想到的方法就是gdb attach上一个运行中的进程。但是这个需要手动交互。通过网上查找和实践,可以有以下几种选择: 第一种:pstack 进程ID …

【电商】管理后台--采购管理(执行层)

采购,从表面上看是公司花钱的部门,实则担负了寻找、管理供应商的重任,确保公司绝大部分的供应链成本可以保质、保量的完成。 现在很多电商企业,都不自己生产产品,产品的来源基本上都是从供应商那里采购,所以…

【服务器搭建】教程四:域名怎样进行备案?快来看~

前言 购买一台服务器,再来个域名,搭建一个自己的个人博客网站,把一些教程、源码、想要分享的好玩的放到网站上,供小伙伴学习玩耍使用。我把这个过程记录下来,想要尝试的小伙伴,可以按照步骤,自己…

你好,法语!A2知识点总结(1)

1.语式及时态 语式: 1.1直陈式: -直陈式现在时 1)动词变位: 以er结尾的动词为第一组动词 变位规则: 去er,得到词根,加上相应词尾 e es e ons ez ent 第二组动词变位 以ir结尾为第二组动词…

LeetCode 图解 | 141.环形链表

141.环形链表题目描述思路分析快慢指针思想代码实现题目描述 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内…

Nuxt 3.0.0正式发布,集成Element Plus和Ant Design Vue脚手架

发布说明 Nuxt 是使用简便的 Web 框架,用于构建现代和高性能的 Web 应用,可以部署在任何运行 JavaScript 的平台上。 Nuxt 3.0 11天前正式发布了稳定版,3.0 基于 Vue 3,为 TypeScript 提供了 “一等公民” 支持,并进行…

【Unity3D】卷轴特效

1 原理 当一个圆在地面上沿直线匀速滚动时,圆上固定点的运动轨迹称为旋轮线(或摆线、圆滚线)。本文实现的卷轴特效使用了旋轮线相关理论。 以下是卷轴特效原理及公式推导,将屏幕坐标 (x) 映射到纹理坐标 (u)。 注意:屏…

Controller Area Network(CAN)简介

文章目录前言-什么是通讯?一、CAN是什么?二、CAN的应用示例CAN网络细分三、CAN发展历史四、汽车网络汇总总结前言-什么是通讯? “通讯是两个或两个以上参与者之间交换信息的有意识活动,目的是通过符号和语义规范的共享系统来发送…

微服务系列之初探“微服务架构”

随笔 有时你必须对你想得到的东西充满敬畏。 参考书籍: “凤凰架构”“微服务架构设计模式” 在了解微服务架构之前我们有必要解答“什么是架构”、“什么是架构的风格”这两个问题,同时需要带着“架构并不是被发明出来的,而是持续演进的…

[AI] LRTA*ls(k)搜索算法

LRTA*LS[K]一、LRTA*(K)算法的缺点二、LRTA∗LS(k)LRTA*_{LS}(k)LRTA∗LS​(k)算法1、选择局部空间2、更新局部空间论文在这里! 一、LRTA*(K)算法的缺点 LRTA*(K)算法每次要更新队列Q里的state,但有三点缺陷: 如果state y进入 Q&#xff0c…

【网络工程】6、防火墙介绍及配置实操

接上篇《5、路由器介绍及配置实操》 之前我们讲解了网络设备路由器的介绍,以及完成了路由器的相关配置实操。本篇我们来讲解防火墙的基础知识以及相应的实操案例。 一、什么是防火墙? 防火墙是一个安全产品,它可以把安全的内网和不安全的外网…

【前端】jQuery-概述+基本使用+常用API

目录 一、jQuery概述 1.1JavaScript库 1.2jQuery的概念 二、jQuery的基本使用 2.1jQuery的下载 2.2jQuery的使用步骤 2.3jQuery的入口函数 2.4jQuery的顶级对象$ 2.5jQuery对象和DOM对象 三、jQuery常用API 3.1jQuery选择器 3.1.1jQuery基础选择器 3.1.2jQuery层级选…

Linux下C语言实现HTTP文件服务器和TCP协议实现网络数据传输

在实际开发中经常用到web框架,比如Servlet,SpringBoot等,这些开发框架提高了我们的开发效率,节省了开发时间。但是这会令我们技术人员处于浮云之上,看不到其本质。说实话,Java语言那么流行,其本…

springboot-自动配置

一、简介 在搭建springboot应用的时候,无需像之前spring的时候,要一堆繁琐的配置文件之类的。一个main的方法,就能把springboot的项目run起来。和其他框架整合也是非常的简单,只需要使用到Enablexxxxx注解就可以搞起来。 二、原理…