zoukankan      html  css  js  c++  java
  • IP-SAN-iscsi

    硬盘 (做raid ) --》 服务器    
    直连
    硬盘 (做raid ) --》 服务器 
    网络
    存储分类:
    DAS 直挂式存储(direct access/attach storage) 比如:机箱里的硬盘
    NAS 网络附加存储(network attched storage) 比如:NFS,SAMBA,FTP等
    SAN 存储区域网络(storage area network)
    分布式存储(云存储)
    DAS
    优点: 不受网络限制,直接连系统总线
    缺点: 能连接的硬盘个数有限,存储空间无法和其它服务器交互
    NAS,SAN
    优点: 经过网络共享给服务器使用,使用灵活 
    缺点: 速度会受网络的限制
    NAS,SAN都是通过网络共享存储,但NAS共享的一般是目录,而SAN共享的是物理卷
    apache
    |
    nginx---storage --- mysql
    |
    |
    oracle
    两种SAN
    FC-SAN:早期的SAN,服务器与交换机的数据传输是通过光纤进行的,服务器把SCSI指令传输到存储设备上,不能走普通LAN网的IP协议。
    IP-SAN:后期出现的SAN,用IP协议封装的SAN,可以完全走普通网络,因此叫做IP-SAN,最典型的就是热门的ISCSI。
    FC-SAN:速度快(2G,8G,16G),成本高,传输距离有一定限制
    IP-SAN:速度较慢(但以后会有W兆以太网标准),成本低,传输距离无限制
    100M 1000M 10G
    IP-SAN的共享技术:
    gnbd (global network block device) rhel5可以用,现在已经不再支持了
    iscsi 网络scsi,现在做ip-san的主要方式
    ------------------------------------------------------------------------------------------------------------
    iscsi 网络 scsi(small computer system interface)
    存储的N个磁盘--》硬RAID--》iscsi或FC--》分区(lvm可选)--》格式化--》挂载使用
    172.16.2.10
    存储服务端(存储导出端,kvm虚拟机1)
    |
        | iscsi
    |
    存储客户端(存储导入端,kvm虚拟机2)
    172.16.2.11
    实验前准备:(kvm虚拟机,centos7.3平台.使用vmware虚拟机测试会出问题)
    1,ip静态
    2,关闭iptables,selinux
    3,主机名互绑
    4,时间同步
    5,配置yum(本地源,epel,163)
    存储导出端使用虚拟机来模拟(模拟存储可以使用多种形式,如硬盘:/dev/sdb,分区:/dev/sdb1,逻辑卷:/dev/vg/lv01,dd创建的大文件等等)
    下面我为了实验方便,就用dd的大文件来模拟存储
    # mkdir /data/
    # dd if=/dev/zero of=/data/storage1 bs=1M count=500
    # dd if=/dev/zero of=/data/storage2 bs=1M count=1000
    # dd if=/dev/zero of=/data/storage3 bs=1M count=1500
    # dd if=/dev/zero of=/data/storage4 bs=1M count=2000
    一共产生四个模拟存储文件(1个500M,1个1000M,1个1500M,1个2000M;这么设计是为了方便后面讨论的)
    第一大步:服务器端的配置
    下面开始iscsi的共享
    1,在iscsi存储服务端安装下面iscsi的服务端软件包
    # yum install scsi-target-utils
    2,配置主配置文件
    # cat /etc/tgt/targets.conf |grep -v "#"
    default-driver iscsi
    <target iscsi:data1>
    backing-store /data/storage1
    incominguser li li123 ----存储客户端要求验证才可以通过网络使用这个设备,用户名和密码与系统用户无关
    </target>
    <target iscsi:data2>
    backing-store /data/storage2
    incominguser li li123
    </target>
    <target iscsi:data3>
    backing-store /data/storage3 --这个存储共享没有任何验证方式,也就表示任何人可以远程iscsi挂载使用
    </target>
    <target iscsi:data4>
    backing-store /data/storage4
    initiator-address 172.16.0.0/16 --指定一个网段内的所有客户端可以使用这个设备
    </target>
    3,启动服务
    # systemctl start tgtd
    # systemctl status tgtd
    # systemctl enable tgtd
    4,验证端口和共享资源是否ok
    # lsof -i:3260
    # tgt-admin --show
    第二大步:
    iscsi客户端的配置 ----所有的客户端都要配置,步骤都一样
    1,在每个客户端安装iscsi的客户端软件包
    客户端配置yum(本地镜像yum)
    # yum install iscsi-initiator-utils
    2,因为iscsi服务端有两个资源被配置了验证,所以需要修改客户端配置文件才可以通过验证进行登录(如果iscsi服务端没有配置用户名密码验证,则客户端这一小步骤可以不用做)
    # vim /etc/iscsi/iscsid.conf
    57 node.session.auth.authmethod = CHAP --CHAP (Challenge-Handshake Authentication Protocol )
    61 node.session.auth.username = li
    62 node.session.auth.password = li123
    71 discovery.sendtargets.auth.authmethod = CHAP
    75 discovery.sendtargets.auth.username = li
    76 discovery.sendtargets.auth.password = li123
    3,在登录前必须要先连接并发现资源(discovery)
    # iscsiadm -m discovery -t sendtargets -p 172.16.2.10 --使用此命令发现服务端的iscsi共享资源,IP为iscsi存储服务端的IP
    172.16.2.10:3260,1 iscsi:data1
    172.16.2.10:3260,1 iscsi:data2
    172.16.2.10:3260,1 iscsi:data3
    172.16.2.10:3260,1 iscsi:data4
    4,发现资源成功后,就可以进行资源登录了
    只登录其中一个目录:
    # iscsiadm -m node -T iscsi:data1 -p 172.16.2.10 -l
    直接登录所有发现的目标:
    # iscsiadm -m node -l
    5,登录成功后,直接使用fdisk -l查看
    # fdisk -l |grep sd[a-z]
    6,关于取消登录和删除
    取消登录其中一个特定目录: --把-l改成-u
    iscsiadm -m node -T iscsi:data1 -p 172.16.2.10 -u
    取消登录所有目录:
    iscsiadm -m node -u
    7,用上面的命令取消登录后,如果把服务重启systemctl restart iscsi,它会仍然帮你把这些目录再自动登录上,如果你希望取消登录后,把相关信息完全删除,则需要做下面的操作
    删除登录过的特定目录的信息: --把-l改成--op delete
    iscsiadm -m node -T iscsi:data1 -p 172.16.2.10 --op delete
    删除所有登录过的目录信息:
    iscsiadm -m node --op delete
    8,把所有登录的targets确认后,就可以启动服务,并做成开机自启动了
    # systemctl start iscsi
    # systemctl status iscsi
    # systemctl enable iscsi
    # systemctl start iscsid
    # systemctl status iscsid
    # systemctl enable iscsid
    问题:
    # fdisk -l |grep sd[b-z]
    # iscsiadm -m node -u
    # fdisk -l |grep sd[b-z]
    # iscsiadm -m node -l
    多登出再登录几次,查看会发现名字顺序可能会变化
    下面使用存储多路径来进行绑定
    --------------------------------------------------------------------------------------------------------------------
    存储多路径(和双网卡绑定类似,相当于存储线路的双线路绑定,和后面要讲的HA集群也是类似)
    device-multipath
      172.16.2.10    192.168.122.100
    存储服务端(存储导出端,虚拟机1)
    | |
      | |
    | |
    | |
    存储客户端(存储导入端,虚拟机2)
      172.16.2.11 192.168.122.101
    准备工作:
    1,在前面实验的基础上,服务器和客户端各加一个网卡连接到一个新的网络上(我这里是192.168.122.0/24网段)
    2,再然后在存储客户端(存储导入端)登出这四个存储,并删除相关信息
    # iscsiadm -m node -u
    # iscsiadm -m node --op delete
    最后要注意如果先前在存储服务端(存储导出端)配置时用了initiator-address 172.16.0.0/16参数进行控制的人需要删除它,或者修改一下(因为我们后面要配置两个网段),然后重启服务
    第一步:
    在存储客户端(存储导入端)去发现iscsi服务器上的存储。分别使用服务器的两个IP去发现,然后将它们登录
    # iscsiadm -m discovery -t sendtargets -p 172.16.2.10
    172.16.2.10:3260,1 iscsi:data1
    172.16.2.10:3260,1 iscsi:data2
    172.16.2.10:3260,1 iscsi:data3
    172.16.2.10:3260,1 iscsi:data4
    # iscsiadm -m discovery -t sendtargets -p 192.168.122.100
    192.168.122.10:3260,1 iscsi:data1
    192.168.122.10:3260,1 iscsi:data2
    192.168.122.10:3260,1 iscsi:data3
    192.168.122.10:3260,1 iscsi:data4
    # iscsiadm -m node -l --把发现的targets全部登录
    使用fdisk -l |grep sd[a-z]命令能查看到8个存储(但实际是4个存储,分别由两个线路去访问的)
    第二步:
    在存储客户端(存储导入端)安装device-mapper-multipath的包
    # yum install device-mapper* -y
    # rpm -qa |grep ^device-mapper
    device-mapper-multipath-0.4.9-99.el7_3.3.x86_64
    device-mapper-event-1.02.135-1.el7_3.4.x86_64
    device-mapper-libs-1.02.135-1.el7_3.4.x86_64
    device-mapper-devel-1.02.135-1.el7_3.4.x86_64
    device-mapper-1.02.135-1.el7_3.4.x86_64
    device-mapper-multipath-libs-0.4.9-99.el7_3.3.x86_64
    device-mapper-event-devel-1.02.135-1.el7_3.4.x86_64
    device-mapper-event-libs-1.02.135-1.el7_3.4.x86_64
    device-mapper-multipath-sysvinit-0.4.9-99.el7_3.3.x86_64
    device-mapper-persistent-data-0.6.3-1.el7.x86_64
    第三步:
    把上面的8个进行多路径绑定,绑成4个来用(同一个存储的两个线路访问的绑定成一个),并且名字可以自定义
    # mpathconf --enable --先运行此命令,才会产生/etc/multipath.conf的配置文件
    # cat /etc/multipath.conf |grep -v ^# |grep -v ^$
    defaults { --看作为全局配置参数
    user_friendly_names yes --使用友好名字(默认名为wwid,名字长且难认,友好名可以自定义)
    find_multipaths yes
    }
    blacklist { --黑名单(表示所有在黑名单里的设备不会被绑定成多路径设备)
    }
    # vim /etc/multipath.conf
    blacklist {
    devnode "^sda" --除了sda开头的设备,我都做多路径(但不是说所有的如tty1,pts1这些设备也有多路径,他会自己发现)
    }
    --如果你是使用kvm虚拟机(使用的是virio的磁盘)来做,把sda改成vda
    # systemctl start multipathd.service
    # systemctl status multipathd.service
    # systemctl enable multipathd.service
    # multipath -ll   --使用这个命令可以看到四个新绑定的设备了(mpatha,mpathb,mpathc,mpathd)这四个设备就是双线路绑定的设备
    # multipath -ll
    mpathd (360000000000000000e00000000040001) dm-3 IET ,VIRTUAL-DISK --长数字字符串就是wwid
    size=2.0G features='0' hwhandler='0' wp=rw
    |-+- policy='service-time 0' prio=1 status=active --主线路
    | `- 8:0:0:1 sdf 8:80 active ready running
    `-+- policy='service-time 0' prio=1 status=enabled --备线路(也就是说默认为主备模式)
    `- 9:0:0:1 sdh 8:112 active ready running
    mpathc (360000000000000000e00000000030001) dm-2 IET ,VIRTUAL-DISK
    size=1.5G features='0' hwhandler='0' wp=rw
    |-+- policy='service-time 0' prio=1 status=active
    | `- 6:0:0:1 sde 8:64 active ready running
    `-+- policy='service-time 0' prio=1 status=enabled
    `- 7:0:0:1 sdg 8:96 active ready running
    mpathb (360000000000000000e00000000020001) dm-1 IET ,VIRTUAL-DISK
    size=1000M features='0' hwhandler='0' wp=rw
    |-+- policy='service-time 0' prio=1 status=active
    | `- 4:0:0:1 sdc 8:32 active ready running
    `-+- policy='service-time 0' prio=1 status=enabled
    `- 5:0:0:1 sdd 8:48 active ready running
    mpatha (360000000000000000e00000000010001) dm-0 IET ,VIRTUAL-DISK
    size=500M features='0' hwhandler='0' wp=rw
    |-+- policy='service-time 0' prio=1 status=active
    | `- 2:0:0:1 sda 8:0 active ready running
    `-+- policy='service-time 0' prio=1 status=enabled
    `- 3:0:0:1 sdb 8:16 active ready running
    第四步:
    下面我对这8个存储进行自定义绑定(把名字分别绑成data1,data2,这两个做成ha高可用模式;data3,data4这两个做成lb负载均衡模式)
    # cat /etc/multipath.conf |grep -v ^# |grep -v ^$
    defaults {
    user_friendly_names yes
    find_multipaths yes
    }
    multipaths {
    multipath {
    wwid 360000000000000000e00000000010001 --wwid
    alias data1 ----自定义绑定的名字
    path_grouping_policy failover ----HA模式
    path_selector "round-robin 0"
    failback immediate ----主线路挂了再启起来后,会马上切换回来
    rr_weight priorities
    no_path_retry 5
    }
    multipath {
    wwid 360000000000000000e00000000020001
    alias data2
    path_grouping_policy failover
    path_checker directio
    path_selector "round-robin 0"
    failback immediate
    rr_weight priorities
    no_path_retry 5
    }
    multipath {
    wwid 360000000000000000e00000000030001
    alias data3
    path_grouping_policy multibus
    path_checker directio
    path_selector "round-robin 0"
    failback immediate
    rr_weight priorities
    no_path_retry 5
    }
    multipath {
    wwid 360000000000000000e00000000040001
    alias data4
    path_grouping_policy multibus
    path_checker directio
    path_selector "round-robin 0"
    failback immediate
    rr_weight priorities
    no_path_retry 5
    }
    }
    blacklist {
    }
    # systemctl restart multipathd.service
    # multipath -ll --查看验证,就绑定成了data1,data2,data3,data4这样的名称
    # ls /dev/mapper/data*
    /dev/mapper/data1 /dev/mapper/data2 /dev/mapper/data3 /dev/mapper/data4
    第五步:
    测试
    将failover和multibus两种模式各拿一个存储出来格式化(可以直接格式化,也可以先分区再格式化,如果分区后/dev/mapper/下看不到设备,则使用partprobe刷新一下),并挂载进行测试
    测试过程省略
    data1和data2 failover --HA模式 高可用
    data3和data4 multibus --LA模式 负载均衡
    格式化分区挂载后:
    # dd if=/dev/zero of=/data4/test bs=1M count=900
    # dd if=/dev/zero of=/data2/test bs=1M count=900
    # ifconfig ens33 down 或 ifconfig ens38 down
    # iptraf 查看
    重启测试
    iscsi存储可以自动登录
    存储多路径可以自动绑定
    注:但写到/etc/fstab里或/etc/rc.local里的自动mount挂载目前还有问题(不能开机自动挂载) ----待解决
    #######################################################
    课外扩展:
    freeNAS
      是一套免费的NAS服务器,它能将一部普通PC变成网络存储服务器。该软件基于FreeBSD,Samba 及PHP,支持CIFS (samba), FTP, NFS protocols, Software RAID (0,1,5) 及 web 界面的设定工具。用户可通过Windows、Macs、FTP、SSH 及网络文件系统 (NFS) 来访问存储服务器;FreeNAS可被安装于硬盘或移动介质USB Flash Disk上。FreeNAS 服务器前途无量;它是组建简单网络存储服务器的绝佳选择,免去安装整套Linux或 FreeBSD 的烦恼。
    笔记目录/arch/san_iso/FreeNAS-9.2.1.7-RELEASE-x64.iso --目前的最新版本
    openfiler
    Openfiler 由rPath Linux驱动,它是一个基于浏览器的免费网络存储管理实用程序,可以在单一框架中提供基于文件的网络连接存储 (NAS) 和基于块的存储区域网 (SAN)。Openfiler 支持 CIFS、NFS、HTTP/DAV 和 FTP
    /arch/san_iso/openfileresa-2.99.1-x86_64-disc1.iso --目前的最新版本
  • 相关阅读:
    [Real World Haskell翻译]第24章 并发和多核编程 第一部分并发编程
    [Real World Haskell翻译]第22章 扩展示例:Web客户端编程
    [Real World Haskell翻译]第27章 网络通信和系统日志 Sockets and Syslog
    druid 解密
    git clone 所有远程分支到本地
    十、Delphi 把Json转成Delphi实体类
    XML External Entity attack/XXE攻击
    大家好!
    XXE攻防——XML外部实体注入
    ubuntu安装Go环境
  • 原文地址:https://www.cnblogs.com/skyzy/p/9201455.html
Copyright © 2011-2022 走看看