zoukankan      html  css  js  c++  java
  • Linux新手随手笔记2.7-使用ISCSI服务部署网络存储

    ISCSI=internet+SCSI 硬盘接口

    iSCSI技术介绍

    硬盘是计算机硬件设备中重要的组成部分之一,硬盘存储设备读写速度的快慢也会对服务器的整体性能造成影响。硬盘存储结构、RAID磁盘阵列技术以及LVM技术等都是用于存储设备的技术,尽管这些技术有软件层面和硬件层面之分,但是它们都旨在解决硬盘存储设备的读写速度问题,或者竭力保障存储数据的安全。

    为了进一步提升硬盘存储设备的读写速度和性能,人们一直在努力改进物理硬盘设备的接口协议。当前的硬盘接口类型主要有IDE、SCSI和SATA这3种。

    IDE是一种成熟稳定、价格便宜的并行传输接口。

    SATA是一种传输速度更快、数据校验更完整的串行传输接口。

    SCSI是一种用于计算机和硬盘、光驱等设备之间系统级接口的通用标准,具有系统资源占用率低、转速高、传输速度快等优点。

    不论使用什么类型的硬盘接口,硬盘上的数据总是要通过计算机主板上的总线与CPU、内存设备进行数据交换,这种物理环境上的限制给硬盘资源的共享带来了各种不便。后来,IBM公司开始动手研发基于TCP/IP协议和SCSI接口协议的新型存储技术,这也就是我们目前能看到的互联网小型计算机系统接口(iSCSI,Internet Small Computer System Interface)。这是一种将SCSI接口与以太网技术相结合的新型存储技术,可以用来在网络中传输SCSI接口的命令和数据。这样,不仅克服了传统SCSI接口设备的物理局限性,实现了跨区域的存储资源共享,还可以在不停机的状态下扩展存储容量。

    下面将讲解一下iSCSI技术在生产环境中的优势和劣势。首先,iSCSI存储技术非常便捷,在访问存储资源的形式上发生了很大变化,摆脱了物理环境的限制,同时还可以把存储资源分给多个服务器共同使用,因此是一种非常推荐使用的存储技术。但是,iSCSI存储技术受到了网速的制约。以往,硬盘设备直接通过主板上的总线进行数据传输,现在则需要让互联网作为数据传输的载体和通道,因此传输速率和稳定性是iSCSI技术的瓶颈。随着网络技术的持续发展,相信iSCSI技术也会随之得以改善。

    既然要通过以太网来传输硬盘设备上的数据,那么数据是通过网卡传入到计算机中的么?这就有必要向大家介绍iSCSI-HBA卡了(见图)。与一般的网卡不同(连接网络总线和内存,供计算机上网使用),iSCSI-HBA卡连接的则是SCSI接口或FC(光纤通道)总线和内存,专门用于在主机之间交换存储数据,其使用的协议也与一般网卡有本质的不同。运行Linux系统的服务器会基于iSCSI协议把硬盘设备命令与数据打包成标准的TCP/IP数据包,然后通过以太网传输到目标存储设备,而当目标存储设备接收到这些数据包后,还需要基于iSCSI协议把TCP/IP数据包解压成硬盘设备命令与数据。

    创建RAID磁盘阵列

    我们先关闭虚拟机添加4块网卡,然后准备做一个RAID10.

    使用mdadm命令创建RAID磁盘阵列。其中,-Cv参数为创建阵列并显示过程,/dev/md0为生成的阵列组名称,-n 4参数为创建RAID 10磁盘阵列所需的硬盘个数,-l 10参数为RAID磁盘阵列的级别,在命令后面要逐一写上使用的硬盘名称,我们这里用通配符表示。

    在上述命令成功执行之后,得到一块名称为/dev/md0的新设备,这是一块RAID 10级别的磁盘阵列,如果你想创建RAID 5的就修改相应参数然后加一个备份盘后面加-x 1 代表有一块备份盘。

    然后我们查看一下,已经初始化完成了,有了md0这个一块设备。

    配置iSCSI服务端

    iSCSI技术在工作形式上分为服务端(target)与客户端(initiator)。iSCSI服务端即用于存放硬盘存储资源的服务器,它作为前面创建的RAID磁盘阵列的存储端,能够为用户提供可用的存储资源。iSCSI客户端则是用户使用的软件,用于访问远程服务端的存储资源

    我们下面安装一下iSCSI服务端程序以及配置命令工具

    第一个是ISCSI服务端的程序,第二个是命令配置工具。

    然后我们重启ISCSI服务端程序。并且添加启动项。

    配置iSCSI服务端共享资源。targetcli是用于管理iSCSI服务端存储资源的专用配置命令,它能够提供类似于fdisk命令的交互式配置功能,将iSCSI共享资源的配置内容抽象成“目录”的形式,我们只需将各类配置信息填入到相应的“目录”中即可。这里的难点主要在于认识每个“参数目录”的作用。当把配置参数正确地填写到“目录”中后,iSCSI服务端也可以提供共享资源服务了。

    在执行targetcli命令后就能看到交互式的配置界面了。在该界面中可以使用很多Linux命令,比如利用ls查看目录参数的结构,使用cd切换到不同的目录中。/backstores/block是iSCSI服务端配置共享设备的位置。我们需要把刚刚创建的RAID 10磁盘阵列md0文件加入到配置共享设备的“资源池”中,并将该文件重新命名为disk0,这样用户就不会知道是由服务器中的哪块硬盘来提供共享存储资源,而只会看到一个名为disk0的存储设备。

    下面我们介绍一下每个目录的作用,这就是难点,只要记住每个目录的作用那么就简单很多了。

    cd /backstores/block定义我们共享的数据,我们给他创建为disk0,那么我们给用户分享的时候他所看到的的就是disk0,而不会看到我们的/dev/md0.相当于起个别名。

     

    然后我们cd /退回到根目录

    然后我们再进入 iscsi目录里面,然后使用create命令创建出来随机的一个字符串,这个就是我们用户待会所看到的名称。大家注意复制的时候一定不要把后面的点复制上,没有点,也就是句号。然后我们进入到我们创建的这个目录里面。然后我们进入到tpg1目录,他下面有3个子目录,第一个是acls,luns,portals。我们进入到luns目录,这就是我们共享出去的那个设备的信息,我们设备的信息就是我们刚才创建的那个disk0,我们现在将我们创建出的disk0加入到我们iscsi共享里面。

    然后我们cd回上一级,再进入acls目录。这个指的就是谁能够去访问,谁可以去访问。client代表用户的名称。我们建议这个么写,在刚刚系统生成的iSCSI target后面追加上类似于:client的参数,这样既能保证客户端的名称具有唯一性,又非常便于管理和阅读字符串加上client。设置访问控制列表(ACL)。iSCSI协议是通过客户端名称进行验证的,也就是说,用户在访问存储共享资源时不需要输入密码,只要iSCSI客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可,因此需要在iSCSI服务端的配置文件中写入一串能够验证用户信息的名称。acls参数目录用于存放能够访问iSCSI服务端共享存储资源的客户端名称。

    然后我们再回到上一级,然后进入portals目录。设置iSCSI服务端的监听IP地址和端口号。位于生产环境中的服务器上可能有多块网卡,那么到底是由哪个网卡或IP地址对外提供共享存储资源呢?这就需要我们在配置文件中手动定义iSCSI服务端的信息,即在portals参数目录中写上服务器的IP地址。接下来将由系统自动开启服务器192.168.10.10的3260端口将向外提供iSCSI共享存储资源服务

    我们查看一下,然后退出。

    然后清空我们的防火墙并且保存规则,还有重启的我们的iscsi服务。如果你觉得不安全就不用都清空防火墙,可以设置firewalld防火墙策略,使其放行3260/tcp端口号的流量,命令如下。

    [root@linuxprobe ~]# firewall-cmd --permanent --add-port=3260/tcp 
    success 
    [root@linuxprobe ~]# firewall-cmd --reload 
    success
    这养我们就配置好了这iscsi,接下来我们配置客户端。
    配置Linux客户端

    前面讲到,iSCSI协议是通过客户端的名称来进行验证,而该名称也是iSCSI客户端的唯一标识,而且必须与服务端配置文件中访问控制列表中的信息一致,否则客户端在尝试访问存储共享设备时,系统会弹出验证失败的保存信息。

     然后我们打开客户端/etc/iscsi/initiatorname.iscsi文件,将我们再服务器生成的acl生成的那个字符串加client客户端名称的字段加进来,这是为了验证,一定不能错。

    然后ping一下我们的服务器,看是否通畅。

    对了这里忘了说了,RHEL7是默认安装了iSCSI客户端服务程序initiator的,如果没安装,请yum安装。yum install iscsi-initiator-utils 

    然后我们重启服务并且加入启动项。

    我们现在查看一下我们客户端dev目录这几个设备。然后我们说两个步骤。第一个是发现,第二个是登录。我们现在用到的一个命令是iscsiadm,他用来管理我们的iscsi设备。

    -m指的是我们的动作,discovery是探索发现,先探索一下在我们对方的主机上有哪些共享信息。

     然后我们再登录验证一下。-T后面指的就是我们共享的名称,我们复制上面的,-p就是我们服务端的地址192.168.10.10。后面是-l就是登录的意思,我么也可以写成长格式,--login。

    我们马上就可以看到我们dev目录多出来一个设备,我们就可以像使用我们自己的设备一样去使用它,不如挂载,分区等等。

    下面进入标准的磁盘操作流程

    然后我们进行格式化挂载等一些操作,先进行sdb设备格式化,然后我们创建个挂载目录进行挂载

    从此以后,这个设备文件就如同是客户端本机主机上的硬盘那样工作。需要提醒大家的是,由于udev服务是按照系统识别硬盘设备的顺序来命名硬盘设备的,当客户端主机同时使用多个远程存储资源时,如果下一次识别远程设备的顺序发生了变化,则客户端挂载目录中的文件也将随之混乱。为了防止发生这样的问题,我们应该在/etc/fstab配置文件中使用设备的UUID唯一标识符进行挂载,这样,不论远程设备资源的识别顺序再怎么变化,系统也能正确找到设备所对应的目录。

    blkid命令用于查看设备的名称、文件系统及UUID。可以使用管道符进行过滤,只显示与/dev/sdb设备相关的信息:

    由于/dev/sdb是一块网络存储设备,而iSCSI协议是基于TCP/IP网络传输数据的,因此必须在/etc/fstab配置文件中添加上_netdev参数,表示当系统联网后再进行挂载操作,以免系统开机时间过长或开机失败

    当我们要给其他用户使用的时候,必须吧这个卸载掉,我们这样做。

    使用-u参数。

    查看马上就没有了。

    配置Windows客户端

    首先确保网络通信。

    双击选择是。

    然后添加服务器IP然后点击快速链接

    准备连接iSCSI服务端的共享存储资源。由于在iSCSI服务端程序上设置了ACL,使得只有客户端名称与ACL策略中的名称保持一致时才能使用远程存储资源,因此需要在“配置”选项卡中单击“更改”按钮,把iSCSI发起程序的名称修改为服务端

    这里不记得一定要回去看,别瞎写。去服务器看。

    然后返回去再点击连接。发现已连接。

    然后我们看一下,多了一个盘。

    然后我们就分区吧,这个应该会吧,我就不解释了,直接截图了。

    下一步下一步之后就是这个样子。

    大功告成,是不是很酷。

  • 相关阅读:
    【Nginx学习】安装及常用命令
    【Nginx学习】基础知识
    【Nginx学习】Xshell7连接CentOS7艰难轶事
    【LeetCode刷题】5343. 多次求和构造目标数组:妙解
    【LeetCode刷题】1353. 最多可以参加的会议数目
    【转载】priority_queue用法
    【LeetCode刷题】供暖器:妙解
    【妙解】重复的子字符串
    【转载学习】基金理财学习
    【转载】sync_with_stdio + cin.tie
  • 原文地址:https://www.cnblogs.com/hshyx/p/10863525.html
Copyright © 2011-2022 走看看