存储-ISCSI
简介:
由于SAN技术是基于光环境实现的存储;ISCSI是将数据块映射成以太网数据包,从而实现IP协议上运行的指令集。
将SCSI数据块映射成以太网数据包。
此技术不常用。
在centos7环境部署iscsi:
实验1:1个导出端,1个导入端
角色 | IP |
---|---|
storage | 172.16.0.50 |
node1 | 172.16.0.51 |
node2 | 172.16.0.52 |
node3 | 172.16.0.53 |
准备工作要完成。
1. 配置存储端
[root@storage ~]# pvcreate /dev/sdb
[root@storage ~]# vgcreate vgs /dev/sdb
[root@storage ~]# lvcreate -L 5G -n iscsi1 vgs
[root@storage ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 20.00g
swap centos -wi-ao---- 2.00g
iscsi1 vgs -wi-a----- 5.00g <--
[root@storage ~]# lftp 172.16.0.99
lftp 172.16.0.99:~> cd release/
lftp 172.16.0.99:/release> get epel-release-7-6.noarch.rpm
[root@storage ~]# rpm -ivh epel-release-7-6.noarch.rpm
[root@storage ~]# yum install -y scsi-target-utils
[root@storage ~]# cd /etc/tgt/
[root@storage /etc/tgt]# ls
conf.d targets.conf tgtd.conf
[root@storage /etc/tgt]# vim targets.conf
结尾添加
<target iqn.2019-12.com.up.storage:iscsi1>
##IQN号,是存储的唯一标识
写法:iqn.年-月.主机名倒序:名字
backing-store /dev/vgs/iscsi1
##导出的存储设备
write-cache off
##关闭写缓存
</target>
[root@storage ~]# systemctl start tgtd
[root@storage ~]# systemctl enable tgtd
[root@storage ~]# netstat -antp | grep tgtd
tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 1095/tgtd
tcp6 0 0 :::3260 :::* LISTEN 1095/tgtd
查看导出的存储:
[root@storage ~]# tgtadm --lld iscsi --mode target --op show
Target 1: iqn.2019-12.com.up.storage:iscsi1
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 5369 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/vgs/iscsi1
Backing store flags:
2. 导入端
客户端
[root@node1 ~]# yum install -y iscsi-initiator-utils
发现存储:(IP地址为ISCSI主机的)
[root@node1 ~]# iscsiadm -m discovery -t st -p 172.16.0.50
172.16.0.50:3260,1 iqn.2019-12.com.up.storage:iscsi1
导入存储:
[root@node1 ~]# iscsiadm -m node -T iqn.2019-12.com.up.storage:iscsi1 -p 172.16.0.50 -l
Logging in to [iface: default, target: iqn.2019-12.com.up.storage:iscsi1, portal: 172.16.0.50,3260] (multiple)
Login to [iface: default, target: iqn.2019-12.com.up.storage:iscsi1, portal: 172.16.0.50,3260] successful.
使用存储:
[root@node1 ~]# ls /dev/sdb
/dev/sdb
可以直接创建pv
可以分区
可以直接格式化
…
把这个设备看做是本机的第二块硬盘。
两台设备创建的文件,文件号是一致的。不行!!!
[root@node1 /mnt/sdb1]# ls -i f1
67 f1
[root@node2 /mnt/sdb1]# ls -i f2
67 f2
最终哪个文件会写入存储,未知。
单机环境的文件系统,不适用于iscsi。
解决:集群文件系统
集群文件系统
redhat:
GFS2 全局文件系统第二版
允许所有的节点并行访问,理论上支持8EB的文件系统,实际上支持100TB;节点的最大数量是16个。
如果存储空间不足,支持lvm(C-Cluster lvm)拉伸,
oracle:
OCFS2用户OVM云环境
vmware:
VMFS用于esxi云虚拟化环境
GFS2名词解释:
(1)节点 集群的节点
使用GFS2,需要构建集群环境
centos6用 conga(luci ricci)
centos7用 pacemaker
(2)文件系统数量
约束可以使用集群文件系统的节点数
(3)文件系统名称
集群名:文件系统名
在同一个局域网,集群名不可以重复
(4)日志
用来保存文件系统信息
常用的命令:
mount umount
fsck.gfs2:检查并修复文件系统,要求文件系统必须处于clean状态,比较耗时的。
一定要卸载
一定要在没有业务的时间段进行
mkfs.gfs2:创建文件系统
gfs2_jadd:增加节点数
gfs2_grow:拉伸文件系统
实验2:1个导出端 2个导入端
开始实验:
设置好hosts文件
# tail -4 /etc/hosts
172.16.0.50 storage.up.com storage
172.16.0.51 node1.up.com node1
172.16.0.52 node2.up.com node2
172.16.0.53 node3.up.com node3
1. 存储端
创建分区
[root@storage ~]# pvcreate /dev/sdb
[root@storage ~]# vgcreate vgs /dev/sdb
[root@storage ~]# lvcreate -L 5G -n iscsi1 vgs
安装需要的程序
[root@storage ~]# lftp 172.16.0.99
lftp 172.16.0.99:~> cd release/
lftp 172.16.0.99:/release> get epel-release-7-6.noarch.rpm
[root@storage ~]# rpm -ivh epel-release-7-6.noarch.rpm
[root@storage ~]# yum install -y scsi-target-utils
修改配置文件
[root@storage ~]# vim /etc/tgt/targets.conf
<target iqn.2019-12.com.up.storage:iscsi1>
backing-store /dev/vgs/iscsi1
write-cache off
</target>
启动服务
[root@storage ~]# systemctl start tgtd
[root@storage ~]# systemctl enable tgtd
查看导出的存储:
[root@storage ~]# tgtadm --lld iscsi --mode target --op show
Target 1: iqn.2019-12.com.up.storage:iscsi1
2. 导入端 node1 node2
[root@node1 ~]# yum install -y iscsi-initiator-utils
[root@node2 ~]# yum install -y iscsi-initiator-utils
发现并导入存储:
[root@node1 ~]# iscsiadm -m discovery -t st -p 172.16.0.50
[root@node1 ~]# iscsiadm -m node -T iqn.2019-12.com.up.storage:iscsi1 -p 172.16.0.50 -l
[root@node2 ~]# iscsiadm -m discovery -t st -p 172.16.0.50
[root@node2 ~]# iscsiadm -m node -T iqn.2019-12.com.up.storage:iscsi1 -p 172.16.0.50 -l
[root@node1 ~]# ls /dev/sdb
/dev/sdb
[root@node2 ~]# ls /dev/sdb
/dev/sdb
部署集群环境:
centos7使用pacemaker
[root@node1 ~]# yum install -y pcs pacemaker corosync fence-agents-all
[root@node2 ~]# yum install -y pcs pacemaker corosync fence-agents-all
[root@node1 ~]# systemctl start pcsd
[root@node1 ~]# systemctl enable pcsd
[root@node2 ~]# systemctl start pcsd
[root@node2 ~]# systemctl enable pcsd
[root@node1 ~]# echo "ABC123qwe#" | passwd --stdin hacluster
[root@node2 ~]# echo "ABC123qwe#" | passwd --stdin hacluster
验证节点:
成功后将所有节点关联到一起
[root@node1 ~]# pcs cluster auth node1 node2 <-- node1,node2对应自己的主机名
Username: hacluster
Password: ABC123qwe#
node1: Authorized
node2: Authorized
创建集群:
在其中任意一个节点中操作即可。
[root@node1 ~]# pcs cluster setup --start --name cluster0 node1 node2
名字不要重复!!!
启动集群:
[root@node1 ~]# pcs cluster start --all
[root@node1 ~]# pcs cluster enable --all
查看集群的状态:
[root@node1 ~]# pcs cluster status
PCSD Status:
node1: Online
node2: Online
构建集群文件系统:
[root@node1 ~]# yum install -y gfs2-utils lvm2-sysvinit lvm2-cluster
[root@node2 ~]# yum install -y gfs2-utils lvm2-sysvinit lvm2-cluster
创建lvm:
[root@node1 ~]# pvcreate /dev/sdb
[root@node1 ~]# vgcreate cvg0 /dev/sdb
[root@node1 ~]# lvcreate -L 2G -n clv01 cvg0
[root@node2 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 22.00g 4.00m
/dev/sdb cvg0 lvm2 a-- <5.00g <3.00g
[root@node2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- 22.00g 4.00m
cvg0 1 1 0 wz--n- <5.00g <3.00g
[root@node2 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 20.00g
swap centos -wi-ao---- 2.00g
clv01 cvg0 -wi------- 2.00g
让lvm支持集群:
[root@node1 ~]# lvmconf --enable-cluster
[root@node2 ~]# lvmconf --enable-cluster
[root@node1 ~]# vim /etc/lvm/lvm.conf
785 locking_type = 3 #<--
启动服务:
[root@node1 ~]# systemctl start dlm
[root@node1 ~]# systemctl enable dlm
[root@node2 ~]# systemctl start dlm
[root@node2 ~]# systemctl enable dlm
dlm 分布式锁协议,在集群文件系统,锁定文件
[root@node1 ~]# /etc/init.d/clvmd start
[root@node1 ~]# chkconfig clvmd on
[root@node2 ~]# /etc/init.d/clvmd start
[root@node2 ~]# chkconfig clvmd on
clvmd 集群模式的lvm
创建集群文件系统:
[root@node1 ~]# mkfs.gfs2 -p lock_dlm -j 2 -t cluster0:clv01 /dev/cvg0/clv01
-p 指定分布式锁协议
-j 指定节点数
-t 指定文件系统名
集群名:文件系统名
挂载使用:
[root@node1 ~]# mkdir /mnt/clv01
[root@node1 ~]# mount /dev/cvg0/clv01 /mnt/clv01/
[root@node2 ~]# mkdir /mnt/clv01
[root@node2 ~]# mount /dev/cvg0/clv01 /mnt/clv01/
[root@node1 ~]# cd /mnt/clv01/
[root@node1 /mnt/clv01]# ls
[root@node1 /mnt/clv01]# touch f1
[root@node1 /mnt/clv01]# ls
f1
[root@node2 ~]# cd /mnt/clv01/
[root@node2 /mnt/clv01]# ls
f1
[root@node2 /mnt/clv01]# touch f2
[root@node2 /mnt/clv01]# ls -i *
8761 f1 72746 f2
维护阶段:
集中存储应该挂载在 /var/www/html 。
使用方式跟Nas方式是一样的
在kvm虚拟化环境,导入的第一块硬盘是sda。
开机自动挂载:
存储节点启动完成,一切正常。才可以启动计算节点。
/etc/rc.local <--- 由于磁盘需要在服务都启动完成后才可以执行挂载命令。所以设置启动在rc.local添加命令
mount /dev/cvg0/clv01 挂载点
卸载和删除:
[root@node1 ~]# umount /mnt/clv01/
[root@node2 ~]# umount /mnt/clv01/
lvremove /dev/cvg0/clv01
vgremove cvg0
pvremove /dev/sdb
pvs
lvs
vgs
[root@node1 ~]# iscsiadm -m node -T iqn.2019-12.com.up.storage:iscsi1 -p 172.16.0.50 -u
[root@node1 ~]# iscsiadm -m node -T iqn.2019-12.com.up.storage:iscsi1 -p 172.16.0.50 -o delete
或者
[root@node2 ~]# systemctl stop iscsi
[root@node2 ~]# systemctl stop iscsid
[root@node2 /var/lib/iscsi]# ls nodes/
iqn.2019-12.com.up.storage:iscsi1
[root@node2 /var/lib/iscsi]# ls send_targets/
172.16.0.50,3260
[root@node2 /var/lib/iscsi]# rm -fr nodes/*
[root@node2 /var/lib/iscsi]# rm -fr send_targets/*
实验3
编辑/etc/hostshosts配置文件
# tail -4 /etc/hosts
172.16.0.50 storage.up.com storage
172.16.0.51 node1.up.com node1
172.16.0.52 node2.up.com node2
172.16.0.53 node3.up.com node3
1. 存储端导出存储
[root@storage ~]# pvcreate /dev/sdb
[root@storage ~]# vgcreate vgs /dev/sdb
[root@storage ~]# lvcreate -L 5G -n iscsi1 vgs
[root@storage ~]# lftp 172.16.0.99
lftp 172.16.0.99:~> cd release/
lftp 172.16.0.99:/release> get epel-release-7-6.noarch.rpm
[root@storage ~]# rpm -ivh epel-release-7-6.noarch.rpm
[root@storage ~]# yum install -y scsi-target-utils
[root@storage ~]# vim /etc/tgt/targets.conf
<target iqn.2019-12.com.up.storage:iscsi1>
backing-store /dev/vgs/iscsi1
write-cache off
</target>
[root@storage ~]# systemctl start tgtd
[root@storage ~]# systemctl enable tgtd
[root@storage ~]# tgtadm --lld iscsi --mode target --op show
Target 1: iqn.2019-12.com.up.storage:iscsi1
2. 导入端 node1 node2
导入存储
[root@node1 ~]# yum install -y iscsi-initiator-utils
[root@node2 ~]# yum install -y iscsi-initiator-utils
[root@node1 ~]# iscsiadm -m discovery -t st -p 172.16.0.50
[root@node1 ~]# iscsiadm -m node -T iqn.2019-12.com.up.storage:iscsi1 -p 172.16.0.50 -l
3. 部署集群
部署集群
[root@node1 ~]# yum install -y pcs pacemaker corosync fence-agents-all
[root@node2 ~]# yum install -y pcs pacemaker corosync fence-agents-all
[root@node1 ~]# systemctl start pcsd
[root@node2 ~]# systemctl start pcsd
[root@node1 ~]# systemctl enable pcsd
[root@node2 ~]# systemctl enable pcsd
[root@node1 ~]# echo "ABC123qwe#" | passwd --stdin hacluster
[root@node2 ~]# echo "ABC123qwe#" | passwd --stdin hacluster
[root@node1 ~]# pcs cluster auth node1 node2
Username: hacluster
Password:
node1: Authorized
node2: Authorized
[root@node1 ~]# pcs cluster setup --start --name cluster0 node1 node2
[root@node1 ~]# pcs cluster start --all
[root@node1 ~]# pcs cluster enable --all
[root@node1 ~]# pcs cluster status
PCSD Status:
node1: Online
node2: Online
4. 部署clvm
[root@node1 ~]# yum install -y gfs2-utils lvm2-sysvinit lvm2-cluster
[root@node2 ~]# yum install -y gfs2-utils lvm2-sysvinit lvm2-cluster
[root@node1 ~]# lvmconf --enable-cluster
[root@node2 ~]# lvmconf --enable-cluster
[root@node1 ~]# pvcreate /dev/sdb
[root@node1 ~]# vgcreate cvg0 /dev/sdb
[root@node1 ~]# lvcreate -L 1G -n clv01 cvg0
[root@node2 ~]# pvs 2> /dev/null | tail -2
/dev/sda2 centos lvm2 a-- 22.00g 4.00m
/dev/sdb cvg0 lvm2 a-- <5.00g <4.00g
[root@node2 ~]# vgs 2> /dev/null | tail -2
centos 1 2 0 wz--n- 22.00g 4.00m
cvg0 1 1 0 wz--n- <5.00g <4.00g
[root@node2 ~]# lvs 2> /dev/null | tail -2
swap centos -wi-ao---- 2.00g
clv01 cvg0 -wi------- 1.00g
[root@node1 ~]# systemctl start dlm
[root@node1 ~]# systemctl enable dlm
[root@node2 ~]# systemctl start dlm
[root@node2 ~]# systemctl enable dlm
[root@node1 ~]# /etc/init.d/clvmd start
[root@node1 ~]# chkconfig clvmd on
[root@node2 ~]# /etc/init.d/clvmd start
[root@node2 ~]# chkconfig clvmd on
5. 创建集群文件系统
[root@node1 ~]# mkfs.gfs2 -p lock_dlm -j 2 -t cluster0:clv01 /dev/cvg0/clv01
[root@node1 ~]# yum install -y httpd
[root@node2 ~]# yum install -y httpd
[root@node1 ~]# mount /dev/cvg0/clv01 /var/www/html/
[root@node1 ~]# echo "mount /dev/cvg0/clv01 /var/www/html/" >> /etc/rc.local
[root@node1 ~]# chmod +x /etc/rc.d/rc.local
[root@node2 ~]# mount /dev/cvg0/clv01 /var/www/html/
[root@node2 ~]# echo "mount /dev/cvg0/clv01 /var/www/html/" >> /etc/rc.local
[root@node2 ~]# chmod +x /etc/rc.d/rc.local
在node1添加一个主页
[root@node1 ~]# echo "gfs2_apache_0" > /var/www/html/index.html
启动apache服务
[root@node1 ~]# systemctl start httpd
[root@node1 ~]# echo "systemctl start httpd" >> /etc/rc.local
[root@node2 ~]# systemctl start httpd
[root@node2 ~]# echo "systemctl start httpd" >> /etc/rc.local
测试
[root@storage ~]# curl 172.16.0.51
gfs2_apache_0
[root@storage ~]# curl 172.16.0.52
gfs2_apache_0
加入第三节点
先将所有程序安装好
[root@node3 ~]# yum install -y iscsi-initiator-utils
[root@node3 ~]# yum install -y pcs pacemaker corosync fence-agents-all
[root@node3 ~]# yum install -y gfs2-utils lvm2-sysvinit lvm2-cluster
[root@node3 ~]# yum install -y httpd
发现存储
[root@node3 ~]# iscsiadm -m discovery -t st -p 172.16.0.50
关联节点
[root@node3 ~]# iscsiadm -m node -T iqn.2019-12.com.up.storage:iscsi1 -p 172.16.0.50 -l
启动集群服务
pcsd是集群服务
[root@node3 ~]# systemctl start pcsd
[root@node3 ~]# systemctl enable pcsd
[root@node3 ~]# echo "ABC123qwe#" | passwd --stdin hacluster
验证节点
[root@node1 ~]# pcs cluster auth node1 node2 node3
Username: hacluster
Password:
node1: Authorized
node3: Authorized
node2: Authorized
将node3加入集群:
[root@node1 ~]# pcs cluster node add node3
心跳配置文件:
[root@node1 ~]# vim /etc/corosync/corosync.conf <---配置文件是命令行生成的,勿动!!!
资源配置文件:
[root@node1 ~]# vim /var/lib/pacemaker/cib/cib.xml <---配置文件是命令行生成的,勿动!!!
启动集群节点node3
[root@node1 ~]# pcs cluster start node3
查看状态
[root@node1 ~]# pcs cluster status
PCSD Status:
node3: Online
node1: Online
node2: Online
查看存储状态
[root@node3 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 22.00g 4.00m
/dev/sdb cvg0 lvm2 a-- <5.00g <4.00g <--
[root@node3 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- 22.00g 4.00m
cvg0 1 1 0 wz--n- <5.00g <4.00g <--
[root@node3 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 20.00g
swap centos -wi-ao---- 2.00g
clv01 cvg0 -wi-a----- 1.00g <--
启动服务
[root@node3 ~]# systemctl start dlm
[root@node3 ~]# systemctl enable dlm
[root@node3 ~]# lvmconf --enable-cluster
[root@node3 ~]# /etc/init.d/clvmd start
[root@node3 ~]# chkconfig clvmd on
挂载到apache路径
[root@node3 ~]# mount /dev/cvg0/clv01 /var/www/html/
mount: mount /dev/mapper/cvg0-clv01 on /var/www/html failed: Too many users <---节点是有数量限制的
增加一个节点数:
[root@node1 ~]# gfs2_jadd -j 1 /var/www/html
Filesystem: /var/www/html
Old journals: 2
New journals: 3
[root@node3 ~]# mount /dev/cvg0/clv01 /var/www/html/
[root@node3 ~]# systemctl start httpd
[root@storage ~]# curl 172.16.0.53
gfs2_apache_0
拉伸lv
(1)VG空间充足
[root@node3 ~]# lvextend -L 4G /dev/cvg0/clv01
||
[root@node3 ~]# lvcreate -L + 3G /dev/cvg0/clv01 <---不要用!!!
[root@node3 ~]# lvs 2> /dev/null | tail -1
clv01 cvg0 -wi-ao---- 4.00g
[root@node3 ~]# gfs2_grow /var/www/html
[root@node3 ~]# df -h | tail -1
/dev/mapper/cvg0-clv01 4.0G 164M 3.9G 4% /var/www/html
(2)VG空间不足
在存储节点上再导出一个存储:
[root@storage ~]# lvcreate -L 6G -n iscsi2 vgs
[root@storage ~]# vim /etc/tgt/targets.conf
<target iqn.2019-12.com.up.storage:iscsi1>
backing-store /dev/vgs/iscsi1
write-cache off
</target>
<target iqn.2019-12.com.up.storage:iscsi2> #<--增加
backing-store /dev/vgs/iscsi2
write-cache off
</target>
[root@storage ~]# systemctl reload tgtd
千万不能restart!!!
[root@storage ~]# tgtadm --lld iscsi --mode target --op show
Target 1: iqn.2019-12.com.up.storage:iscsi1
Target 2: iqn.2019-12.com.up.storage:iscsi2
3个节点发现并导入存储:
[root@node1 ~]# iscsiadm -m discovery -t st -p 172.16.0.50
[root@node1 ~]# iscsiadm -m node -T iqn.2019-12.com.up.storage:iscsi2 -p 172.16.0.50 -l
[root@node2 ~]# iscsiadm -m discovery -t st -p 172.16.0.50
[root@node2 ~]# iscsiadm -m node -T iqn.2019-12.com.up.storage:iscsi2 -p 172.16.0.50 -l
[root@node3 ~]# iscsiadm -m discovery -t st -p 172.16.0.50
[root@node3 ~]# iscsiadm -m node -T iqn.2019-12.com.up.storage:iscsi2 -p 172.16.0.50 -l
[root@node1 ~]# ls /dev/sd?
/dev/sda /dev/sdb /dev/sdc
[root@node2 ~]# ls /dev/sd?
/dev/sda /dev/sdb /dev/sdc
[root@node3 ~]# ls /dev/sd?
/dev/sda /dev/sdb /dev/sdc
[root@node3 ~]# pvcreate /dev/sdc
[root@node3 ~]# vgextend cvg0 /dev/sdc
[root@node3 ~]# vgs
cvg0 2 1 0 wz--n- 10.99g 6.99g
[root@node3 ~]# lvextend -L 7G /dev/cvg0/clv01
[root@node3 ~]# lvs
clv01 cvg0 -wi-ao---- 7.00g
[root@node3 ~]# gfs2_grow /var/www/html