存储技术与应用
存储概述
存储的目标:
存储是根据不同的应用环境通过采取合理、安全、有效的方式将数据保存到某些介质上并能保证有效的访问;
一方面它是数据临时或长期驻留的物理媒介;
另一方面,它是保证数据完整安全存放的方式或行为;
存储就是把这两个方面结合起来,向客户提供一套数据存放解决方案
存储技术分类
SCSI(Small Computer System Interface)小型计算机系统接口
作为输入/输出接口,主要用于硬盘、光盘、磁带机等设备
DAS(Direct-Attached Storage)直连存储
将存储设备通过SCSI接口或光纤通道直接连接到计算机上
不能实现数据与其他主机的共享
占用服务器操作系统资源,如CPU、IO等
缺点:数据量越大,性能越差
NAS(Network-Attached Storage)网络技术存储
一种专用数据存储服务器,以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽、提高性能、降低总拥有成本、保护投资
用户通过TCP/IP协议访问数据:采用标准的NFS/HTTP/CIFS等
缺点:存储空间固定,不方便扩展。
SAN(Storage Area Network)存储区域网络
通过光纤交换机、光纤路由器、光纤集线器等设备将磁盘阵列、磁带等存储设备与相关服务器连接起来,形成高速专网网络
组成部分:如路由器、光纤交换机;
接口:如SCSI、FC;
通信协议:如IP、SCSI
FC(Fibre Channel)光纤通道
一种适合于千兆数据传输的、成熟而安全解决方案,与传统的SCSI相比,FC提供更高的数据传输速率、更远的传输距离,更多的设备连接支持以及更稳定的性能、更简易的安装
FC主要组件:光纤、HBA(主机总线适配置器)、FC交换机
FC交换机交换拓扑:点到点(point-to-point):简单将两个设备互连
已裁定的环路(arbitrated loop):可多达126个设备共享一段信道或环路
交换式拓扑(switched fabric):所有设备通过光纤交换机互连
它的扩展:FC_SAN,IP_SAN(IP指双绞线)
ISCSI(Internet SCSI)技术
IETF制定的标准,将SCSI数据块映射为以太网数据包,是一种基于IP Storage理论的新型存储技术。
将存储行业广泛应用的SCSI接口技术与IP网络相结合。可以在IP网络上构建SAN。
最初由Cisco和IBM开发
ISCSI技术优势:基于IP协议技术的标准;
允许网络在TCP/IP协议上传输SCSI命令;
相对FC SAN,ISCSI实现的IP SAN投资更低;
解决了传输效率、存储容量、兼容性、开放性、安全性等方面的问题;
没有距离限制。
客户端:iSCSI Initiator:软件实现,成本低、性能较低
iSCSI HBA:硬件实现,性能好,成本较高
存储设备端:iSCSI Target
以太网交换机
iSCSI技术应用
iSCSI操作流程
Target端:选择target名称--->安装iSCSI target--->准备用于target的存储--->配置target--->启用服务
Initiator端:安装initiator--->配置initiator并启动服务
iSCSI命名规范
建议采用IQN(iSCSI限定名称)
全称必须全局唯一
IQN格式:iqn.<date_code>.<reversed_domain>.<string>[:<substring>]
部署iSCSI服务
201存储服务器把本机的磁盘B和C共享给前端的应用服务器(网站服务器)101和102使用。
配置后端存储201
1 准备存储介质 /dev/vdb、/dev/vdc、/dev/vdd 均为5G大小
网卡名称问题
[root@stu ~]# ifconfig -a
修改网卡名
在virt-manager中查看虚拟机连接到private1网卡的MAC地址
[root@stu ~]# vim /etc/udev/rules.d/70-persistent-net.rules
查找到不存在的mac地址行,先删除,再将正确的mac地址网卡改名
改完名之后,reboot重启,就可以得到正确的eth0了
配置ip地址
[root@stu ~]# setup
Network Configuration ->Device Configuration ->eth0
[root@stu ~]# service network restart
4、主机名
[root@stu ~]# setup
Network Configuration ->DNS Configuration
配置yum
(1)在宿主机上挂载光盘到ftp共享目录
[root@room4pc09 ~]# mkdir /var/ftp/rhel6.7
[root@room4pc09 ~]# ls /ISO/rhel-server-6.7-x86_64-dvd.iso >> /etc/fstab
[root@room4pc09 ~]# vim /etc/fstab
/ISO/rhel-server-6.7-x86_64-dvd.iso /var/ftp/rhel6.7 iso9660 loop 0 0
[root@room4pc09 ~]# mount -a
(2)修改配置文件
[root@room4pc09 ~]# vim /etc/yum.repos.d/rhel6.repo
[rhel6]
name=rhel6
baseurl=ftp://192.168.4.254/rhel6.7
enabled=1
gpgcheck=0
(4)防火墙和selinux
[root@vh01 ~]# service iptables status
[root@vh01 ~]# getenforce
3台VM,第一台加一块硬盘,用作提供存储的一端
# qemu-img create -f qcow2 /var/lib/libvirt/images/iscsi1.img 5G
为客户端提供存储,服务器端就需要有存储介质,存储介质可以是磁盘分区,也可以是逻辑卷,还可以是dd出来的磁盘文件
[root@vh01 ~]# parted /dev/vdb
(parted) mklabel gpt
(parted) mkpart primary ext4 1M 100% -1 # -1表示结尾
(parted) print
(parted) quit
# partprobe
[root@vh01 ~]# lsblk 应该本地多发现了一块硬盘
注意:分区后千成不要格式化!!!
注意:千万不要在两个节点上同时挂载sda1,否则会导致文件系统损坏,数据丢失
分区,注意千万不要格式化
[root@vh01 ~]# parted /dev/vdb
(parted) mklabel gpt 新硬盘,使用一次
(parted) mkpart primary ext4 1M 100% 创建主分区
(parted) print
(parted) quit
或
创建逻辑卷
1)为新建磁盘/dev/sdb创建分区
[root@svr5 ~]# parted /dev/sdb mklabel gpt
[root@svr5 ~]# parted /dev/sdb mkpart primary 1 1000
[root@svr5 ~]# parted /dev/sdb mkpart primary 1000 2000
2)创建逻辑卷
[root@svr5 ~]# pvcreate /dev/sdb{1,2}
[root@svr5 ~]# vgcreate myvg /dev/sdb{1,2}
[root@svr5 ~]# lvcreate -n iscsi1 –L 800M myvg
[root@svr5 ~]# lvcreate -n iscsi2 –L 800M myvg
[root@svr5 ~]# lvscan
2 配置
2.1 装包
[root@storage201 ~]# yum list |grep -i scsi //查询yum仓库
[root@storage201 ~]# rpm -q scsi-target-utils
[root@storage201 ~]# yum -y install scsi-target-utils
[root@storage201 ~]# yum info scsi-target-utils //查看iSCSI target信息
2.2 修改配置文件
命令行配置iSCSI:配置临时生效,命令复杂
1)创建target
[root@svr5 ~]# tgtadm --lld iscsi --op new --mode \
> target --tid 1 -T iqn.2015-04.com.tarena.www:iscsi1
2)为target导入本地磁盘
[root@svr5 ~]# tgtadm --lld iscsi --op new --mode \
>logicalunit --tid 1 --lun 1 -b /dev/myvg/iscsi1
3)配置ACL
[root@svr5 ~]# tgtadm --lld iscsi --op bind --mode \
> target --tid 1 -I 192.168.4.0/24
4)将以上三条命令加入开机启动文件
[root@svr5 ~]# vim /etc/rc.local
.. ..
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2015-04.com.tarena.www:iscsi1
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/myvg/iscsi1
tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.4.0/24
配置文件修改:配置永久生效,配置相对简单
# vim /etc/tgt/targets.conf
</target>
<target iqn.2017-11.cn.tedu:storage201.diskb>
backing-store /dev/vdb //定义存储设备
initiator-address 192.168.4.101 //定义ACL,客户端IP
initiator-address 192.168.4.102
</target>
[root@storage201 ~]# rpm -qc scsi-target-utils
/etc/sysconfig/tgtd
/etc/tgt/targets.conf
[root@storage201 ~]# cp /etc/tgt/targets.conf /root
[root@storage201 ~]# vim /etc/tgt/targets.conf
配置在容器<target 名称.日期.主机所在域:服务器名.当前磁盘扫描名> </target>内
<target iqn.2017-11.cn.tedu:storage201.diskb>
backing-store /dev/vdb
write-cache off
vendor_id tarena ##厂商
product_id disktwo
initiator-address 192.168.4.101
initiator-address 192.168.4.102
</target>
<target iqn.2017-11.cn.tedu:storage201.diskc>
backing-store /dev/vdb
write-cache off
vendor_id tarena ##厂商
product_id diskthree
initiator-address 192.168.4.101
initiator-address 192.168.4.102
</target>
2.3 启动服务
[root@storage201 ~]# service tgtd start
[root@storage201 ~]# chkconfig tgtd on //设置服务开机运行
[root@storage201 ~]# netstat -pantul |grep tgtd
[root@storage201 ~]# ps -C tgtd
[root@storage201 ~]# tgt-admin --show //也可写成tgt-admin -s,查看生效信息
//查看到LUN和ACL才是正确的
如果中间遇到错误,重启tgtd服务可能不生效,需要强制重启
# service tgtd force-restart
如果仍然不成功,则需要reboot
2.4 验证配置
# lsof -l /dev/sda1 查看哪个进程在使用sda1
配置前端应用服务器101、102
在RHEL6系统中,默认通过scsi-target-utils软件包提供iSCSI服务,因此需要在服务端安装scsi-target-utils包并配置对应的服务,iSCSI服务主要配置选项如表所示。
客户端挂载iSCSI服务器:
客户端需要安装iscsi-initiator-utils软件包
客户端使用命令挂载后需要分区、格式化并进行挂载测试
1 装包 web102与web101相同的配置,下边省略
[root@web101 ~]# yum list |grep -i iscsi //查询yum仓库
[root@web101 ~]# yum -y install iscsi-initiator-utils
[root@web101 ~]# yum info iscsi-initiator-utils //查看iSCSI target信息
2 启用服务
[root@web101 ~]# service iscsi restart
[root@web101 ~]# chkconfig iscsi on # iscsi用于自动login
[root@web101 ~]# chkconfig iscsid on # iscsi是服务
[root@web101 ~]# lsblk
[root@web101 ~]# rpm -qc iscsi-initiator-utils
/etc/iscsi/iscsid.conf
/etc/logrotate.d/iscsiuiolog
3 发现共享存储设备
[root@web101 ~]# man iscsiadm 找到EXAMPLES
格式:iscsiadm --mode node --targetname iqn_name --portal ip:port -l
[root@web101 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.4.201 --discover
发现可用的target:iscsiadm -m discovery -t sendtargets -p 192.168.4.201:3260
4 登录共享存储设备
登录target:
[root@web101 ~]# iscsiadm --mode node --targetname iqn.2017-11.cn.tedu:storage201.diskb --portal 192.168.4.201:3260 -l
iscsiadm -m node -P N //(N=0,1)
iscsiadm -m session -P N //(N=0-3)
iscsiadm -m discovery -P N //(N=0,1)
登出target:
[root@web101 ~]# iscsiadm --mode node --targetname iqn.2017-11.cn.tedu:storage201.diskb --portal 192.168.4.201:3260 -u
查看共享存储设备:
[root@web101 ~]# ls /dev/sd*
//谁先登谁获得sda的名称,所以我们要给登录的设备取固定的名称
5 配置UDEV
设备文件管理方法:
devfs:Linux早期采用的静态管理方法;/dev目录下有大量静态文件;内核版本2.6.13开始被完全取代
udev: 动态管理硬件文件的方法。只有连到系统上来的设备在/dev下创建设备文件;与主、次设备编号无关;为设备提供持久、一致的名字
接入设备事件链
内核发现设备并导入设备状态到sysfs
udev接到事件通知
udev创建设备节点或是运行指定程序
udev通知hald守护进程
HAL探测设备信息
HAL创建设备对象结构
HAL通过系统消息总线广播该事件
用户程序也可以监控该事件
udev的作用
从内核收到添加/移除硬件事件时,udev将会分析:
/sys目录下信息
/etc/udev/rules.d目录中的规则
对于Linux kernel 2.6及更新的操作系统版本udev是系统的设备管理器,udev会分析sysfs的数据,并根据自己的udev规则,实现如下功能:
处理设备命名
决定要创建哪些设备文件或链接
决定如何设置属性
决定触发哪些事件
配置udev:
主配置文件/etc/udev/udev.conf
udev_root:创建设备文件位置,默认为/dev
udev_rules :udev规则文件位置,默认为/etc/udev/rules.d
udev_log:syslog优先级,缺省为err
文件位置及格式:
/etc/udev/rules.d/<rule_name>.rules
例:75-custom.rules
规则格式:
<match-key> <op> <value> [,...] <assignment-key> <op> value [,...]
BUS==”usb”,SYSFS{serial}==”20043512321411d34721”,NAME=”udisk”
Udev规则文件,常见指令操作符如表所示。
可以简化或缩写规则:KERNEL==”sda*”,SYMLINK+=”iscsi%n”
udev常用替代变量:
%k:内核所识别出来的设备名,如sdb1
%n:设备的内核编号,如sda3中的3
%p:设备路径,如/sys/block/sdb/sdb1
%%:%符号本身
5.1 获取磁盘的参数
[root@web101 ~]# cd /etc/udev/rules.d/
[root@web101 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.4.201:3260
[root@web101 ~]# iscsiadm --mode node --targetname iqn.2017-11.cn.tedu:storage201.diskb --portal 192.168.4.201:3260 -l
[root@web101 ~]# ls /dev/sd*
[root@web101 rules.d]# udevadm info --query=path --name=/dev/sda
//获取设备的内核参数信息(硬件的sys路径)
/devices/platform/host3/session2/target3:0:0/3:0:0:1/block/sda
格式:udevadm info --path=内核参数信息 --attribute-walk
[root@web101 rules.d]# udevadm info --attribute-walk
--path=/devices/platform/host3/session2/target3:0:0/3:0:0:1/block/sda
5.2 编写udev文件
udev默认规则存放在/etc/udev/rules.d目录下,通过修改次目录下的规则实现设备的命名、属性、链接文件等。
[root@web101 ~]# vim /etc/udev/rules.d/70-iscsi.rules
//以下内容由内核信息中查到:块设备,空间大小,厂商,磁盘名,链接(自定义)
SUBSYSTEM=="block",ATTR{size}=="10485760",ATTRS{vendor}=="tarena ",ATTRS{model}=="disktwo ",SYMLINK+="iscsi/diskb"
SUBSYSTEM=="block",ATTR{size}=="10485760",ATTRS{vendor}=="tarena ",ATTRS{model}=="diskthree ",SYMLINK+="iscsi/diskc"
5.3 重启udev程序
[root@web101 ~]# start_uedv
[root@web101 ~]# scp /etc/udev/rules.d/70-iscsi.rules 192.168.4.102:/etc/udev/rules.d/ //拷贝给web102
5.4 查看是否生成对应的链接文件(查看/dev目录下是否有对应的设备名):
[root@web101 ~]# ls -l /dev/iscsi/disk*
示例:编写udev规则,实现以下目标:
当插入一个U盘时,该U盘自动出现一个链接称为udisk
U盘上的第1个分区名称为udisk1,以此类推,终端上出现提示”udisk plugged in”
步骤一:编写udev规则
查看设备属性
[root@svr5 ~]# udevadm monitor –property //udev事件监控
[root@svr5 ~]# udevadm info --query=path –name=/dev/sdb
[root@svr5 ~]# udevadm info --query=property --path=/block/sdb
2)编写udev规则文件
[root@svr5 ~]# vim /etc/udev/rules.d/70-usb.rules
SUBSYSTEM=="block",ENV{DEVTYPE}="disk",KERNEL=="sdb",ENV{ID_VENDOR}=="TOSHIBA",SYMLINK="udisk",RUN+="/usr/bin/wall udisk plugged in"
SUBSYSTEM=="block",ACTION=="add",KERNEL=="sdb[0-9]",ENV{ID_VENDOR_ID}=="0930",ENV{DEVTYPE}=="partition",NAME="udisk%n"
步骤二:添加设备测试结果
点击VMware“虚拟机“菜单,在”可移动设备“菜单下,找到自己的U盘设备,点击”连接“与”断开“,测试自己的udev规则是否成功。
//查找到能够表明该硬件是USB存储的信息,编写规则文件
[root@room9pc16 ~]# vim /etc/udev/rules.d/90-udisk.rules
ACTION=="add", KERNEL=="sd[a-z]*", SUBSYSTEMS=="usb", SYMLINK+="udisk%n"
//将U盘重新插入到主机,将会出现/dev/udisk
//识别U盘个性信息
[root@room9pc16 ~]# vim /etc/udev/rules.d/90-udisk.rules
ACTION=="add", KERNEL=="sd[a-z]*", SUBSYSTEMS=="usb", ATTRS{serial}=="0D80E897", ATTRS{manufacturer}=="Generic", SYMLINK+="myudisk%n", RUN+="/bin/wall hello"
UDEV:它是动态管理设备文件的方法
一、为U盘创建一个符号链接,叫udisk
1、获取U盘的路径
[root@room9pc16 nsd1702]# udevadm info --query=path --name=/dev/sdb1
/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/host4/target4:0:0/4:0:0:0/block/sdb/sdb1
2、获取U盘所有信息
[root@room9pc16 nsd1702]# udevadm info --query=all --attribute-walk --path=/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/host4/target4:0:0/4:0:0:0/block/sdb/sdb1
3、创建规则
[root@room9pc16 nsd1702]# vim /etc/udev/rules.d/90-udisk.rules
ACTION=="add", KERNEL=="sd[a-z]*", SUBSYSTEMS=="usb", SYMLINK+="udisk%n"
4、重新接入U盘,查看结果
[root@room9pc16 nsd1702]# ll /dev/udisk*
二、为自己的U盘起名为myudisk
作法以和前面完全一样,只要找出你自己U盘的唯一信息
[root@room9pc16 nsd1702]# vim /etc/udev/rules.d/90-udisk.rules
ACTION=="add", KERNEL=="sd[a-z]*", SUBSYSTEMS=="usb", ATTRS{serial}=="0D80E897", ATTRS{manufacturer}=="Generic", ATTRS{product}=="Mass Storage", SYMLINK+="myudisk%n"
三、改虚机网卡名
[root@vh03 ~]# vim /etc/udev/rules.d/70-persistent-net.rules
5 分区
格式:fdis 磁盘名
[root@web101 ~]# fdisk -cul //查看挂载的iSCSI共享盘
[root@web101 ~]# fdisk -l
[root@web101 ~]# fdisk /dev/iscsi/diskb
//n--->p--->1--->回车--->回车--->p--->w
[root@web101 ~]# fdisk -l /dev/iscsi/diskb
[root@web101 ~]# ll /dev/sd*
6 格式化
格式:mkfs.ext3/4 分区名 查看:blkid 分区名
[root@web101 ~]# mkfs.ext3 /dev/sdb1
[root@web101 rules.d]# blkid /dev/sdb1
/dev/sdb1: UUID="94a07e70-3dc1-4989-8117-3b22ce515518" SEC_TYPE="ext2" TYPE="ext3"
7 挂载
格式:mount -t 文件系统类型 分区名 挂载点
[root@web101 ~]# mount -t ext3 /dev/sdb1 /var/www/html/
[root@web101 ~]# df -h /dev/sdb1
8 存储数据
# vim 挂载点/test.html
[root@web101 ~]# echo "XXXXXXXXXX" > /var/www/html/test.html
Web102也要挂载到相同位置(要先登出共享设备,再登录):
[root@web102 ~]# ll /dev/sd*
[root@web102 ~]# mount -t ext3 /dev/sdb1 /var/www/html/
[root@web102 ~]# cat /var/www/html/test.html
分区、格式化
[root@pc205 ~]# parted /dev/sdb mklabel gpt
[root@pc205 ~]# parted /dev/sdb mkpart primary 1 800
[root@pc205 ~]# parted /dev/sdc mklabel gpt
[root@pc205 ~]# parted /dev/sdc mkpart primary 1 800
分区、格式化
[root@web101 ~]# parted /dev/sda
(parted) mklabel gpt
(parted) mkpart primary ext4 1M 4096M
(parted) quit
[root@web101 ~]# mkfs.ext4 /dev/sda1
[root@vh03 ~]# partprobe
千万注意:不要在vh02和vh03上对共享存储的相同分区同时挂载,同时挂载将会导致文件系统崩溃、数据丢失
缺点:web101、web102双方写入新文件或更新文件时,彼此看不到对方写入的新文件或更新文件内容。这是由文件系统为本地文件系统ext3造成的。
要解决,可使用脚本监控,获取vip的挂载共享权限,服务中止时卸载共享权限。或使用gfs文件系统进行共享。
附:如果希望RHEL6也支持各级别的命令tab键补全,可以把rhel7光盘的bash-completion rpm包安装并reboot。