任务背景

  1. 随着某些业务数据的增大, 公司服务器硬盘空闲空间越来越小, 服务器上也无法再拓展硬盘, 所以我们考虑使用**网络存储方式远程共享存储给服务器使用**。

存储架构.png

任务要求

实现存储通过远程共享给应用服务器使用

任务拆解

1, 需要知道存储有哪些方式可以通过网络共享给服务器使用,如何选择合理的方式

2, 需要知道存储共享给服务器后是一种什么形式,是一个目录呢, 还是一个块设备

3, 使用什么样的软件来实现

4, 配置实现

学习目标

  • 能够区分DAS,NAS,SAN三种存储分类
  • 能够区分文件存储类型与块存储类型
  • 能够使用iscsi实现IP-SAN

知识储备

存储介绍

存储(storage)是什么? 存放数据的方法或过程

存储介质.png

简单来说,存储就是存放数据的介质。

我们在这里不是学习这些硬件知识,而是学习Linux平台下的存储技术

在前面学习的架构基础上再加上远程存储

存储架构.png

存储引入草稿图.png

存储的作用

  1. 保存数据
  2. 文件共享
  3. 数据备份

Linux存储分层(了解)

问题: linux上如何挂载ntfs格式的移动硬盘?

linux内核支持ntfs,但centos7系统并没有加上此功能,解决方法两种:

  • 重新编译内核,在内核加上支持ntfs(此方法不推荐,因为编译内核会造成内核运行不稳定, 没有过硬的实力不要做)
  • 安装软件,为内核加上支持ntfs的模块
安装
# yum install epel-release  -y
# yum install ntfs-3g        

挂载命令
# mount.ntfs-3g /dev/sdb1 /mnt

一个新的硬盘在linux系统里使用一般来说就三步:(分区,格式化)-挂载-使用

Linux存储五层:

linux存储分层.png

上面比较难理解的是虚拟文件系统: 又名VFS (Virtual File System),作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统,即为各类文件系统提供了一个统一的操作界面和应用编程接口。

简单来说,就是使用上层应用程序不用关注底层是什么文件系统, 统一使用。

存储的分类

网络存储方式远程共享存储给服务器使用

存储的分类(重点)

存储分类 描述
DAS 直连式存储 (direct access/attach storage) 如:机箱里的disk,或通过接口直连到系统总线上的disk(如U盘,移动硬盘)
NAS 网络附加存储(network attched storage) 通过交换机,路由器连接起来,共享的是目录。如:nfs,samba,ftp
SAN 存储区域网络(storage area network) 通过交换机,路由器连接起来的高速存储网络,共享的是块设备

DAS: 直接连接系统,不受网速限制,速度快; 扩展容量有上限。

NAS与SAN: 通过网络设备连接的远程存储,速度受网络影响; 但扩展方便,几乎无上限。

NAS和SAN都是通过网络(通过了网络设备,如路由器,交换机等)的,

  • 但NAS共享的是应用层的目录,
  • 而SAN共享的是/dev/sdb1或/dev/sdb这种块设备

NAS.png

SAN.png

  • NAS设备

image-20201021171110858.png

file server端 必须对自己的分区或硬盘进行格式化,建立文件系统再共享给客户端,客户端然后挂载在本地的文件系统来使用

  • SAN 设备(不适合做数据共享)

image-20201021171220979.png

共享输出方不需要为共享设备建立文件系统,由使用方在本地建立文件系统

image-20201021171800036.png

NAS 方便数据共享,方便数据备份,SAN 不方便数据共享,不方便数据备份

存储类型的分类

存储类型分类 描述
文件存储 NAS都属于这一类。简单来说就是mount后直接使用的
块存储 SAN都属于这一类。简单来说就是类似/dev/sdb这种,要分区,格式化后才能mount使用
对象存储 通俗来讲,就是存储是什么形式,怎么做的都不用关注。使用的人只要直接使用程序接口去访问, 进行get下载与put上传就好

文件存储: 类似一个大的目录,多个客户端都可以挂载过来使用。

  • 优点: 利于数据共享
  • 缺点: 速度较慢

块存储: 类似一个block设备,客户端可以格式化,挂载并使用,和用一个硬盘一样。

  • 优点: 和本地硬盘一样,直接使用,速度较快
  • 缺点: 数据不共享

对象存储: 一个对象我们可以看成一个文件, 综合了文件存储和块存储的优点。

  • 优点: 速度快,数据共享
  • 缺点: 成本高, 不兼容现有的模式

如果两台nginx服务器想要实现web家目录里的数据一致, 请问怎么做?

存储架构2.png

小结:

  • 存储要通过远程的方法共享
  • 有可能要考虑数据共享的问题
  • 存储分类:DAS,NAS,SAN
  • 存储类型分类: 文件存储,块存储, 对象存储

文件存储NAS介绍和实现

1、文件存储NAS 介绍

  • 对现有存储NAS 介绍
  • 文件系统输出方需要创建文件系统
  • 文件系统挂在方在其现有文件系统中挂载使用即可
  • 结合RAID可以实现数据高效备份机制
  • 结合LVM可以轻松实现存储空间的扩展
  • 可用于文件系统网关或SAN的网关

2、 文件存储nas 实现案例

nas 可通过nfs (网络存储系统)、CIFS(通用互联网文件系统比如samba)等文件系统来实现。本例通过nfs 实现

CIFS(通用互联网文件系统比如samba) 可以把linux 系统的文件系统目录共享给windows ,反之亦然

2.1 环境准备

  • 2台主机
  • 主机通过局域网连接
  • 主机 centos7.6

2.2 拓扑结构

image-20201021173940482.png

2.3 准备前 两台主机都要做

[root@nfsserver ~]# hostnamectl set-hostname nfsserver
[root@nfsclient ~]# hostnamectl set-hostname nfsclient
[root@nfsserver ~]# cat /etc/hosts
192.168.136.131   nfsserver
192.168.136.130   nfsclient
[root@nfsserver ~]# date
2020年 10月 21日 星期三 17:58:58 CST
[root@nfsclient ~]# date
2020年 10月 21日 星期三 18:00:13 CST
[root@nfsclient ~]# firewall-cmd --state
not running
[root@nfsclient ~]# getenforce
Disabled

[root@nfsserver ~]# ping nfsserver
[root@nfsserver ~]# ping nfsclient

2.4 实现步骤

  • nfsserver
第一步: 安装nfs-utils
[root@nfsserver ~]# yum -y install nfs-utils rpcbind

[root@nfsserver ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 475M     0  475M    0% /dev
tmpfs                    487M     0  487M    0% /dev/shm
tmpfs                    487M  7.7M  479M    2% /run
tmpfs                    487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root   13G  2.8G  9.8G   23% /
/dev/sda1               1014M  137M  878M   14% /boot
tmpfs                     98M     0   98M    0% /run/user/0
第二步: 创建共享目录(在空间大一点的分区上,最好不要在根分区上)
[root@nfsserver home]# mkdir /home/nfsshare
第三步: 编辑共享输出文件
[root@nfsserver home]# vim /etc/exports
[root@nfsserver home]# cat /etc/exports
/home/nfsshare  *(rw,sync,no_root_squash)
第四步: 启动nfs 服务
[root@nfsserver home]# systemctl enable nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@nfsserver home]# systemctl start nfs-server
[root@nfsserver home]# systemctl status nfs-server
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
  Drop-In: /run/systemd/generator/nfs-server.service.d
           └─order-with-mounts.conf

[root@nfsserver home]# netstat -anput | grep nfs
[root@nfsserver home]# netstat -anput | grep rpc
tcp   0    0 0.0.0.0:111    0.0.0.0:*     LISTEN    44269/rpcbind
      LISTEN     44262/rpc.statd
udp    0    0 0.0.0.0:111   0.0.0.0:*     44269/rpcbind

第五步: 验证
[root@nfsserver home]# showmount -e
Export list for nfsserver:
/home/nfsshare *
  • nfsclient
第一步: 安装nfs-utils
[root@nfsclient ~]# yum -y install nfs-utils

第二步: 验证
[root@nfsclient ~]# showmount -e nfsserver
Export list for nfsserver:
/home/nfsshare *

第三步: 挂载已共享目录、
临时挂载
[root@nfsclient ~]# mount -t nfs -v nfsserver:/home/nfsshare  /mnt
[root@nfsclient ~]# df -h
文件系统                  容量  已用  可用 已用% 挂载点
devtmpfs                  1.9G     0  1.9G    0% /dev
tmpfs                     1.9G   14M  1.9G    1% /dev/shm
tmpfs                     1.9G   29M  1.9G    2% /run
tmpfs                     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root    17G   14G  3.3G   81% /
/dev/sda1                1014M  225M  790M   23% /boot
tmpfs                     378M   40K  378M    1% /run/user/0
/dev/sr0                  4.5G  4.5G     0  100% /run/media/root/CentOS 7 x86_64
overlay                    17G   14G  3.3G   81% /var/lib/docker/overlay2/14196ba33778204ed6943be7f3b1822670586350940464272d69ad6119d5f097/merged
nfsserver:/home/nfsshare   13G  2.8G  9.8G   23% /mnt

[root@nfsclient ~]# touch /mnt/aa.txt
[root@nfsclient ~]# ls /mnt/
aa.txt
[root@nfsserver home]# ls /home/nfsshare/
aa.txt

卸载
[root@nfsclient ~]# umount -v /mnt
[root@nfsclient ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G   14M  1.9G    1% /dev/shm
tmpfs                    1.9G   29M  1.9G    2% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G   14G  3.3G   81% /
/dev/sda1               1014M  225M  790M   23% /boot
tmpfs                    378M   40K  378M    1% /run/user/0
/dev/sr0                 4.5G  4.5G     0  100% /run/media/root/CentOS 7 x86_64
overlay                   17G   14G  3.3G   81% /var/lib/docker/overlay2/14196ba33778204ed6943be7f3b1822670586350940464272d69ad6119d5f097/merged

永久挂载  
注意:如果永久挂载了,千万别重启服务器,如果挂载了web 存储等,web存储都没启动的话就麻烦了,如有有可以卸载了 
[root@nfsclient ~]# vim /etc/fstab
[root@nfsclient ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Wed Sep 23 00:34:30 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=58f26b18-0b97-4198-9355-3ce715e6da24 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
nfsserver:/home/nfsshare /mnt                   nfs     defaults        0 0     添加的

[root@nfsclient ~]# mount -a   挂载所有
[root@nfsclient ~]# df -h
文件系统                  容量  已用  可用 已用% 挂载点
devtmpfs                  1.9G     0  1.9G    0% /dev
tmpfs                     1.9G   14M  1.9G    1% /dev/shm
tmpfs                     1.9G   29M  1.9G    2% /run
tmpfs                     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root    17G   14G  3.3G   81% /
/dev/sda1                1014M  225M  790M   23% /boot
tmpfs                     378M   40K  378M    1% /run/user/0
/dev/sr0                  4.5G  4.5G     0  100% /run/media/root/CentOS 7 x86_64
overlay                    17G   14G  3.3G   81% /var/lib/docker/overlay2/14196ba33778204ed6943be7f3b1822670586350940464272d69ad6119d5f097/merged
nfsserver:/home/nfsshare   13G  2.8G  9.8G   23% /mnt

[root@nfsclient ~]# umount -v /mnt
[root@nfsclient ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G   14M  1.9G    1% /dev/shm
tmpfs                    1.9G   29M  1.9G    2% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G   14G  3.3G   81% /
/dev/sda1               1014M  225M  790M   23% /boot
tmpfs                    378M   40K  378M    1% /run/user/0
/dev/sr0                 4.5G  4.5G     0  100% /run/media/root/CentOS 7 x86_64
overlay                   17G   14G  3.3G   81% /var/lib/docker/overlay2/14196ba33778204ed6943be7f3b1822670586350940464272d69ad6119d5f097/merged

块存储SAN介绍和分类

SAN的分类

  • 两种SAN:
  1. FC-SAN: 早期的SAN, 服务器与交换机的数据传输是通过光纤进行的, 服务器把SCSI指令传输到存储设备上,不能走普通LAN网的IP协议。
  2. IP-SAN: 用IP协议封装的SAN, 可以完全走普通网络,因此叫做IP-SAN, 最典型的就是ISCSI。
  • 优缺点
    • FC-SAN优缺点: 速度快(2G,8G,16G), 成本高。
    • IP-SAN优缺点: 速度较慢(已经有W兆以太网标准), 成本低。
    • 由于IP-SAN支持服务器端采用网卡加软件的iSCSI的Initiator的方式,所以成本优势更为明显;IP-SAN在存储整合方面的成本小于FC-SAN,一般而言FC-SAN建议为那些运行关键业务的服务器所使用。

FC-SAN和IP-SAN:http://www.voidcn.com/article/p-vrfshdge-gz.html

IP-SAN之iscsi实现

光纤网络用的是HBA 卡,不叫网卡

iscsi: internat small computer system interface

(网络小型计算机接口,就是一个通过网络可以实现SCSI接口的协议)

实验: Linux平台通过iscsi实现IP-SAN

image-20201021191300649.png

iscsi.png

实验准备:

  1. 两台虚拟机(centos7平台)同网段(比如vmnet8), 交换机不用模拟,因为同网段的虚拟机就相当于连在同一个交换机上
  2. 静态IP(两台IP互通就行,网关和DNS不做要求,如果连接外网dns ,网关都要配)
  3. 都配置主机名及其主机名互相绑定
  4. 关闭防火墙,selinux
  5. 时间同步
  6. 配置好yum(需要加上epel源)
  7. 在存储导出端模拟存储(模拟存储可以使用多种形式,如硬盘:/dev/sdb,分区:/dev/sdb1,软raid:/dev/md0,逻辑卷:/dev/vg/lv01,dd if=/dev/zero of=/tmp/storage_file bs=1M count=1000创建的大文件等等), 本实验请自行加一个硬盘来模拟
[root@nfsserver ~]# hostnamectl set-hostname export
[root@nfsclient ~]# hostnamectl set-hostname import
[root@nfsserver ~]# cat /etc/hosts
192.168.136.131   export
192.168.136.130   import
[root@export ~]# date
2020年 10月 21日 星期三 17:58:58 CST
[root@import ~]# date
2020年 10月 21日 星期三 18:00:13 CST
[root@x ~]# firewall-cmd --state
not running
[root@x ~]# getenforce
Disabled
[root@x ~]# ntpdate time1.aliyun.com
[root@x ~]# which ntpdate
[root@x ~]# crontab -u root -e
0 */1 * * *  /usr/sbin/ntpdate  time1.aliyun.com
[root@x ~]# ping export

[root@x ~]# ping import

实验步骤:

  1. export导出端安装软件, 配置导出的存储,启动服务
  2. import导入端安装软件, 导入存储,启动服务

实验过程:

前置:在导出端添加一块硬盘(不用格式化和分区)

第1步: 在导出端上安装iscsi-target-utils软件包

export# yum install epel-release -y              没有安装epel源的,再次确认安装
export# yum install scsi-target-utils -y

第2步: 在导出端配置存储的导出

export# lsblk    显示刚刚添加的块设备
export# rpm -qc scsi-target-utils
/etc/sysconfig/tgtd
/etc/tgt/conf.d/sample.conf    配置示例
/etc/tgt/targets.conf
/etc/tgt/tgtd.conf


export# cat /etc/tgt/targets.conf |grep -v "#"   (配置完后的结果如下)

default-driver iscsi

#<target 域名:data>    
<target iscsi:data>                # 共享名,也就是存储导入端发现后看到的名称
        backing-store /dev/sdb    # /dev/sdb是实际要共享出去的设备
</target>

第3步: 导出端启动服务并验证

export# systemctl start tgtd                
export# systemctl enable tgtd
export# systemctl status tgtd
验证端口和共享资源是否ok
export# lsof -i:3260
export# fuser -vn tcp 3260 或 # fuser -v 80/tcp
export# tgt-admin --show
Target 1: iscsi:data
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            SWP: No
            Thin-provisioning: No
            Backing store type: null
            Backing store path: None
            Backing store flags:
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 549756 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            SWP: No
            Thin-provisioning: No
            Backing store type: rdwr
            Backing store path: /dev/sdb
            Backing store flags:
    Account information:
        wuhe
    ACL information:
        ALL

第4步: 导入端安装iscsi-initiator-utils软件包

import# yum install iscsi-initiator-utils -y
import# rpm -qc iscsi-initiator-utils
/etc/iscsi/iscsid.conf

第5步: 导入端导入存储

在登录前必须要先连接并发现资源(discovery)


import# man iscsiadm
import# iscsiadm -m discovery -t sendtargets -p 10.1.1.11
10.1.1.11:3260,1 iscsi:data
import# iscsiadm -m discovery -t sendtargets -p 192.168.0.140:3260

import# ls /var/lib/iscsi
ifaces isns nodes send_targets slp static
import# tree /var/lib/iscsi
import# lsblk

发现资源成功后,就可以进行资源登录了

只登录其中一个存储
import# iscsiadm -m node -T iscsi:data -p  10.1.1.11 -l  
import# iscsiadm -m node -T iscsi:data -p  10.1.1.11 --login
登录发现所有的存储:
import# iscsiadm -m node -l

登录成功后,直接使用fdisk -l查看

import# lsblk

import# fdisk -l

import# fdisk /dev/sdb   格式化导入的设备,再挂载使用   (nas 是san 的网关)

第6步: import端启动服务

启动服务,并做成开机自启动(目的:import端服务器reboot后还能自动登录discovery发现的存储)
import# systemctl start iscsi
import# systemctl enable iscsi
import# systemctl status iscsi


import# systemctl start iscsid
import# systemctl enable iscsid

登出

import# iscsiadm -m node -T iscsi:data -p  10.1.1.11 -u
import# iscsiadm -m node -T iscsi:data -p  10.1.1.11 --logout

import# lsblk
import# tree /var/lib/iscsi

补充: 关于取消连接的操作

取消登录所有目录:
import# iscsiadm -m node -u

如果要连discovery的信息也删除则使用 --op delete
import# iscsiadm -m node -T iscsi:data -p  10.1.1.11 --op delete
删除登录过的信息:
import# iscsiadm -m node --op delete

import# tree /var/lib/iscsi

问题: 如果再加一个新的导入服务器,两个导入服务器导入同一个存储,然后格式化,挂载。能实现同读同写吗?

答: 不可以

如果创建多个san 可以用Openfiler

拓展: 可以对导出的存储配置验证功能,导入端配置正确的用户名和密码才能登陆

只有两个地方不一样:

  1. 在导出端配置时加上用户名和密码验证功能
<target iscsi:data>
        backing-store /data/storage
        incominguser daniel daniel123        验证功能,此用户自定义即可,与系统用户无关
</target>
  1. 在导入端配置时需要多配置下面一步,对应导出端的用户名与密码
如果export端有源被配置了验证功能,那么import端需要配置正确的用户名和密码才OK
CHAP (Challenge-Handshake Authentication Protocol) 挑战握手验证协议

import# vim /etc/iscsi/iscsid.conf         
57 node.session.auth.authmethod = CHAP        
68 node.session.auth.username = daniel
69 node.session.auth.password = daniel123

78 discovery.sendtargets.auth.authmethod = CHAP
82 discovery.sendtargets.auth.username = daniel
83 discovery.sendtargets.auth.password = daniel123
做完这一步后, 就可以发现资源并登录了
  1. 若iSCSI客户端登陆认证失败
import# iscsiadm -m node -T iscsi:data -p  10.1.1.11 -l  
Logging in to [iface: default, target: iscsi:data, portal: 192.168.0.140,3260] (multiple)
iscsiadm: Could not login to [iface: default, target: iscsi:data, portal: 192.168.0.140,3260].
iscsiadm: initiator reported error (24 - iSCSI login failed due to authorization failure)
iscsiadm: Could not log into all portals

若是修改了文件,需要重启服务

import#  systemctl restart iscsid
import#  systemctl restart iscsi
import#  rm -rf /var/lib/iscsi/nodes/*
import#  rm -rf /var/lib/iscsi/send_targets/*

SAN多路径设置

    普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系。而到了有光纤组成的SAN环境,或者由iSCSI组成的IPSAN环境,由于主机和存储通过了光纤交换机或者多块网卡及IP来连接,这样的话,就构成了多对多的关系。也就是说,主机到存储可以有多条路径可以选择。主机到存储之间的IO由多条路径可以选择。

https://blog.csdn.net/weixin_34128411/article/details/91675130

openfiler

openfiler介绍及存储理解
openfiler 搭建虚拟存储 并 配置服务端
Openfiler 安装教程

openfiler是一个免费的、开源的基于浏览器的网络存储产品,支持基于文件的的网络连接存储(NAS)和基于块的存储区域网(SAN),基于裸机型。支持的协议有smb,cifs,nfs,http/dev和ftp。

Openfiler是一个基于Linux的开源免费网络存储管理操作系统,通过WEB界面对存储磁盘进行管理,支持iSCSI、NFS等网络存储协议