iSCSI磁盘

iSCSI操作--CentOS+anolis

准备客户端工具iscsi-initiator-utils

安装iSCSI工具:
yum repolist #生成yum仓库信息缓存
yum -y install iscsi-initiator-utils #在生成yum仓库信息缓存后,软件包名可以补全

启用新安装的服务:
systemctl daemon-reload
systemctl restart iscsid
systemctl enable iscsid

Read More...

iscsi-initiator-utils:
提供iscsid服务,及iscsi管理工具iscsiadm ;

iSCSI功能已在OS系统中实现,管理工具并没有在系统内核中事先准备,
需要安装,这个工具就是iscsi-initiator-utils

查询一个软件包是否安装,使用:rpm -qa 指令,
所以,可以过来关键字iscsi或initiator过滤:
rpm -qa|grep iscsi
rpm -qa|grep initiator

daemon-reload理解: 将daemon看作systemd,所以daemon-reload 可以看作:
解释为重新加载 systemd 程序的配置文件, 重新生成依赖树

当遇到以下情况时,需要运行daemon-reload

  • 新添加 unit 配置文件时;
  • 有 unit 的配置文件发生变化时;

配置iSCSI客户端

  1. 修改/etc/iscsi/initiatorname.iscsi

  2. 配置iSCSI启动器服务 /etc/iscsi/iscsid.conf
    node.startup = automatic

  3. 重启iscsid服务刷新iqn名称
    systemctl restart iscsid

转入存储系统,准备要挂载的iSCSI磁盘

发现服务端iSCSI网络磁盘

iscsiadm -m discovery -t st -p 192.168.18.240

通过iscsiadm命令探测openfiler服务器上的iscsi target
注: linux 系统使用前4个地址 6,7,8,9

执行命令后,在/var/lib/iscsi/send_targets/目录生成了相应文件:

登录到发现的存储

iscsiadm -m node --login

// 登录: 到全部扫描到的存储
建议,多个路径发现iscsi盘后执行;

也可每发现一个iscsi盘后,登陆到单个存储:
iscsiadm -m node -T iqn.2016-10.com.tjiyu:mystore.disk1 -p 192.168.18.240 --login

其他

注意:如果配置不对,修改后重启 iSCSI服务后,再登陆;

发现登录成功后,相关信息保存在/var/lib/iscsi/send_targets/目录下,下次启动会自动登录的;

iSCSI 基础

Linux 内核中已经提供了iscsi驱动,但是需要客户端工具来初始化iscsi驱动,
这个工具为:iscsi-initiator-utils
也是大家常说的open-iscsi

iscsi-initiator-utils作用:
将工具iscsid、iscsiadm安装到 /sbin 目录下
将默认的配置文件安装到/etc/iscsi/目录下

其中,
iscsid.conf是发起一个iSCSI session时参数的默认设置;
initiatorname是软件iSCSI initiator的intiator名称配置文件;

open-iscsi的进程:
包含两个守护进程iscsid和iscsi:

  • 主进程iscsid:
    iscsid进程实现iSCSI协议的控制路径以及相关管理功能。
    可配置为在系统启动时基于持久化的iSCSI数据库内容;
    自动重新开始发现(discovery)目标设备;

  • iscsi进程:
    根据配置在系统启动时进行发起端(Initiator)到服务端(target)的登录,
    建立发起端与服务端的会话
    ->使主机在启动后即可使用通过iSCSI提供服务的存储设备

Open-iSCSI是通过以下iSCSI数据库文件来实现永久配置的:

  • Discovery (/var/lib/iscsi/send_targets):
    在 /var/lib/iscsi/send_targets 目录下包含iSCSI portals的配置信息
    每个portal对应一个文件,文件名为“iSCSI portal IP,端口号”

  • Node (/var/lib/iscsi/nodes)
    在 /var/lib/iscsi/nodes 目录下,
    生成一个或多个以iSCSI存储服务器上的Target名命名的文件夹
    如:iqn.2000-01.com.synology:themain-3rd.ittest
    在该文件夹下有一个文件名为“iSCSI portal IP,编号” (例如172.29.88.62,3260,0)的配置参数文件default,
    该文件中是initiator登录target时要使用的参数,
    这些参数的设置是从/etc/iscsi/iscsi.conf中的参数设置继承而来的,
    可以通过iscsiadm对某一个参数文件进行更改(需要先注销到target的登录)。

iscsiadm是用来管理(更新、删除、插入、查询)iSCSI配置数据库文件的命令行工具,
用户能够用它对iSCSI nodes、sessions、connections和discovery records进行一系列的操作。

iSCSI node是一个在网络上可用的SCSI设备标识符,
在open-iscsi中利用术语node表示目标(target)上的门户(portal)。
一个target可以有多个portal,portal 由IP地址和端口构成。

multipath操作指令

Multipath的安装

lsmod |grep dm_multipath  // 检查安装是否正常
yum install -y device-mapper device-mapper-multipath  // 安装 multipath

生成配置文件 -命令or copy

/sbin/mpathconf --enable  // 生成配置文件(推荐方式)
cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/multipath.conf //使用缺省的配置文件

Ubuntu 的/etc/multipath.conf只能手工创建!

运行multipath

modprobe dm-multipath   // 加载DM 模块;
modprobe dm-round-robin

systemctl start multipathd.service   // 启动multipath 服务;
systemctl enable multipathd.service  // 设置开机启动:

注:如果不确定服务的具体名称,可以用下面指令确定
systemctl list-unit-files | grep multipathd

配置/复制etc/multipath.conf文件

--------- multipath.conf 内容 -----------

defaults {
    polling_interval 30
    failback immediate
    no_path_retry 5
    path_checker tur
    user_friendly_names yes
}
blacklist {

}
devices {
    device {
        vendor "HUAWEI"
        product "XSG1"
        path_grouping_policy group_by_prio
        prio alua
    }
}

vi /etc/multipath/bindings
修改别名

systemctl restart multipathd.service   //重启服务

配置过程中常用的查询操作

如何获取WWID

  • 使用 /etc/multipath/bindings
    find / -name 'bindings'

  • 通过multipath -v3命令来获取

注意:
ubuntu 没有上面这个文件,所有没有默认的聚合设备mpatha...
也不能从这个文件中查出 多路径后所形成设备的uuid

Ubuntu获取uuid的命令为:
ls -l /dev/disk/by-id/scsi*

检查配置是否成功

ll /dev/mapper/
如果配置正确,在/dev/mapper/目录下多出mpath0、mpath1(自动分配的名称)等之类设备,如果配置时启用了别名,会使用别名代替自动分配的名称;

MultiPath常用命令

清空已有的multipath记录
multipath -F

打印诊断信息
multipath -v3

启用多路径守护程序以在引导时启动
mpathconf --enable

启动多路径服务
service multipathd start
多路径配置文件更新后,使更改生效:
service multipathd reload

检查multipath聚合后的设备
multipath -ll

Multipath 基础
多路径的形成

通过iscsi连接的存储设备,由于中间经过了交换机等网络设备,从主机到同一个存储设备,可能会存在多条路径. 每条路径在linux系统上都会被识别成一个设备,如果把每条路径都当成独立设备去处理的话,不同路径之间的读写操作就可能会造成数据的紊乱.

多路径multipathd处理方案

multipathd可以解决上述的多路径问题,其主要原理包括:

  • 每一个scsi设备都有唯一的scsi_id, multipathd通过探测scsi_id来判断不同路径后面是不是同一个存储设备.
  • 通过内核device-mapper功能, 将多条路径映射为单一的块设备,提供给文件系统使用.
  • 由于多路径的存在,multipathd可以提供负载均衡和高可用的服务.

Multipath 相关文件

软件包:
device-mapper-multipath
device-mapper-multipath-libs:

提供multipathd服务及multipath管理工具

文件说明:

(1) device-mapper-multipath:即multipath-tools。
主要提供multipathd和multipath等工具和 multipath.conf等配置文件。
创建的多路径设备会在/dev/mapper中。

(2) device-mapper:主要包括两大部分:内核部分和用户部分。

  • 内核部分:
    主要包括device mapper核心(dm.ko)和一些target driver(md-multipath.ko)。 核心完成设备的映射,而target根据映射关系和自身特点具体处理从mappered device 下来的i/o。

  • 用户空间部分:
    主要包括device-mapper这个包。其中包括dmsetup工具和一些帮助创建和配置mappered device的库。
    这些库主要抽象,封装了与ioctr通信的接口,以便方便创建和配置mappered device。multipath-tool的程序中就需要调用这些库。

(3) dm-multipath.ko和dm.ko:dm.ko是device mapper驱动。它是实现multipath的基础。dm-multipath其实是dm的一个target驱动。

(4) scsi_id: 包含在udev程序包中,可以在multipath.conf中配置该程序来获取scsi设备的序号。
通过序号,便可以判断多个路径对应了是否同一设备。这个是多路径实现的关键。
multipath程序在创建multipath设备时,会调用scsi_id,从其标准输出中获得该设备的scsi id。

配置文件说明
  • 排除本地盘,不让多路径识别到
配置Demo
# cat /etc/multipath.conf   
blacklist {   
devnode "^sda"   
}   
defaults {   
user_friendly_names no   
}   
multipaths {   
multipath {   
wwid 3600508b4000892b90002a00000050000 #磁盘的WWID   
alias comsys-dm0 #映射后的别名,自己命名   
path_grouping_policy multibus #路径组策略   
path_checker tur #决定路径状态的方法   
path_selector "round-robin 0" #选择那一条路径进行下次IO操作   
}  
{
    // 可以有多个这样的多路径   
}

}   
devices {   
device {   
vendor "HP" #厂商名称,可通过multipath –v3获取到   
product "HSV300" #产品型号   
path_grouping_policy multibus #默认的路径组策略   
getuid_callout "/sbin/scsi_id -g -u -s /block/%n" #获得唯一设备号使用的默认程序   
path_checker readsector0 #决定路径状态的方法   
path_selector "round-robin 0" #选择那条路径进行下一个IO操作的方法   
#failback immediate #故障恢复的模式   
#no_path_retry queue #在disable queue之前系统尝试使用失效路径的次数的数值   
#rr_min_io 100 #在当前的用户组中,在切换到另外一条路径之前的IO请求的数目   
}   
}  
其中 wwid,vendor,product, getuid_callout这些参数可以通过:multipath -v3命令来获取。
配置说明

defaults段:

defaults {
    user_friendly_names yes
    ind_multipaths yes
}

blacklist段:

blacklist {
    wwid 26353900f02796769  
    devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"  
    devnode "^hd[a-z]"  
    devnode "^sda"  
}

后续操作演示

创建LVM及格式化

pvcreate /dev/mapper/vdisk
vgcreate -s 512M vg_opt /dev/mapper/vdisk
//vgdisplay -v vg_opt
lvcreate -l 100%FREE -n lv_opt vg_opt
mkfs.xfs /dev/vg_opt/lv_opt

mount /dev/vg_opt/lv_opt /mnt

cd /opt
mv RecordFile /mnt

设置etc/fstab

查看生产lv磁盘的uuid:
lsblk -f

更复杂的可以用下面的语句获取:
lsblk -lf |grep 'sda2'| awk '{print $3}'

在fstab中添加配置项:
UUID=5386f3f2-bb71-426f-9337-3fdb93124b04 /opt xfs _netdev 0 0
UUID=fc78106b-d241-4394-b08a-8f79fc076b88 /opt xfs defaults 0 0

iSCSI 简介

iSCSI(Internet Small Computer System Interface,Internet 小型计算机系统接口)是一种由IBM公司研究开发的IP SAN技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,基于 TCP/IP的协议连接iSCSI服务端(Target)和客户端(Initiator),使得封装后的SCSI数据包可以在通用互联网传输,最终实现iSCSI服务端映射为一个存储空间(磁盘)提供给已连接认证后的客户端。

SCSI总线通过SCSI控制器来和硬盘之类的设备进行通信, SCSI控制器称为Target,访问的客户端应用称为Initiator。

LUN(Logical Unit Number,逻辑单元号)是为了使用和描述更多设备及对象而引进的一个方法,每个SCSI ID上最多有32个LUN,一个LUN对应一个逻辑设备。

iSCSI Initiator:
iSCSI 启动器,从本质上说,iSCSI 启动器是一个客户端设备,用于将请求连接并启动到服务器(iSCSI 目标)。

iSCSI Target:
即 iSCSI 目标,它是 iSCSI 网络的服务器组件,通常是一个存储设备,用于包含所需的数据并回应来自 iSCSI 启动器的请求。

工作过程:
Initiator发出请求后,
会在本地的操作系统会生成了相应的SCSI命令和数据I/O请求,然后这些命令和请求被封装加密成IP信息包,通过以太网(TCP/IP)传输到Targer;

Targer接收到信息包:
将进行解密和解析,将SCSI命令和I/O请求分开。SCSI命令被发送到SCSI控制器,再传送到SCSI存储设备。

设备执行SCSI命令后的响应:
经过Target封装成iSCSI响应PDU,再通过已连接的TCP/IP网络传送给Initiator。

Initiator会从iSCSI响应PDU里解析出SCSI响应并传送给操作系统,操作系统再响应给应用程序。

Initiator端配置工具:iscsiadm

而Initiator各节点安装iscsi-initiator-utils后,也提供了一些配置管理工具,其中最主要的是iscsiadm 命令,提供了对 iSCSI 目标节点、会话、连接以及发现记录的操作,

iscsiadm使用语法如下:

-m, 同 --mode,
其选项有 discovery, node, fw(启动值), host, iface(iSCSI 接口)和 session。

-I,同 --interface, 表示接口。

-o, 同 --op, 可实现对数据库的操作,
其选项有 new, delete, update 和 show。

-n, 同 --name, 指定其数据记录里的名字。

-t, 同 --type,
其选项有 sendtargets(st), fw 和 isns, 仅在 -m 模式为 discovery 时有效。

-p, 同 --portal,
指定其目标主机的 IP 地址和端口,默认端口为 3260。

-L, 同 --loginall,
其选项有 all,manual 和 automatic,指定其登录会话时的类型。

-T, 同 --targetname,表示其目标名字。

-v, 同 --value,通常在 --op=update 时指定其值。

配置initiator名称

配置文件:/etc/iscsi/initiatorname.iscsi
名称格式: iqn格式 在各节点配置initiator名称,类似如下:
InitiatorName=iqn.2016-10.com.tjiyu:node1_4rs3r3

可用iscsi-name生成
iscsi-name >> /etc/iscsi/initiatorname.iscsi

也可以指定别名:
InitiatorAlias=client.longshuai.com

配置target的访问用户

配置文件为/etc/iscsi/iscsid.conf
如果不使用CHAP,则基本可以无视这个配置文件。

配置下面属性:

#node.session.auth.authmethod = CHAP
#node.session.auth.username = username
#node.session.auth.password = password
target端操作
Target端基础操作

===创建target及LUN,并绑定网络:===

先创建一个target,ID为1,名称为iqn.2016-10.com.tjiyu:mystore.disk1(全局唯一标识名);

然后给该target绑定网络192.168.18.0/24,也就是对这个网络内的主机可以发现该target;

接着给该target创建两个LUN,使用上面创建的两个分区,注意LUN的ID从1开始分配,因为0已经被target控制器占用了

account模式和CHAP认证

基于IP的认证比较粗糙,不过多数时候已经够用了。

但对于安全性要求高的环境来说,使用CHAP认证更好一些。
CHAP称为挑战式握手认证协议,是双向认证,同时支持单向认证。

iSCSI使用的CHAP,可以有两种机制:

  • initiator authentication认证:
    initiator尝试连接到target时,initator提供一个用户名和密码给target进行认证。
    这个账号和密码对于target来说是流入的账号和密码,用incoming表示。
    incoming账号是initiator端提供给target端,被target端认证的账号。

  • target authentication认证:
    在initiator尝试连接到target时,target有时也需要被initiator认证,以确保非伪装,
    这就要求target提供一个用户名和密码给initiator被initiator进行认证。
    称为outgoing账号和outgoing密码;

initiator authentication可以单独存在,此时CHAP认证就是单向认证;
继续配置target authentication认证后,此时CHAP认证就是双向认证;

如果需要CHAP认证,则启用/etc/iscsi/iscsid.conf中的相关CHAP认证指令:
node.session.auth.authmethod = CHAP
node.session.auth.username = incoming_malong
node.session.auth.password = incoming_123456
node.session.auth.username_in = outgoing_malong
node.session.auth.password_in = outgoing_123456

前三项实现单向认证,target端认证initiator是否合法
同时启用这5项实现双向认证,target端和initiator都会认证对方是否合法

配置单向的用户认证

先创建帐号tjiyu:
tgtadm --lld iscsi --op new --mode account --user tjiyu --password 123456

授予访问上面ID为1的target的权限(即绑定)
tgtadm --lld iscsi --op bind --mode account --tid 1 --user tjiyu

查看绑定结果:
tgtadm --lld iscsi --op show --mode account