文章目录
iscsi(共享存储)
了解什么是共享存储以及工程存储的必要性
共享存储如同其名字所隐喻的,是物理存储器中一段可由两个以上的进程共享的存储空间。共享存储段具有大小和物理存储地址。想要访问共享存储段的进程可以连接这段存储区域到自己的地址空间中任何适合的地方,其他进程也一样。这样,多个进程便可以访问相同的物理存储。
如上图:准备迁移
- 首先把vm01这个虚拟机的内存克隆一份出来(123),通过迁移网络发送到指定的rhevh上来,此时虚拟机还是在再rhevh1上运行的。
- 因为vm001还是在rhevh1上运行的,既然是正在运行的,所以内存里的数据肯定也是在不停的发生变化的比如多了456这些数据
从123开始备份,456这些新的数据都没有出现在rhevh2上
这之间要做个标记,这个标记叫做bitmap(位图)
bitmap之后产生的数据一般是极少的 - 暂停vm001这个虚拟机,把bitmap之后所产生的数据发送到rhevh2上来,这样rhevh2上就有了所有的数据,且因为bitmap之后所产生的数据很少,所以很快就传输完了
- vm001在rhevh2上开始运行
- 存储类型分为3大类:1、文件存储 2块存储 3、对象存储
1、文件存储类似于我们共享一个文件夹
NFS/SAMBA/ftp
NAS-网络区域存储
2、块存储: 把一个硬盘/分区 直接 给你共享出去
fs
iscsi
SAN—存储区域网
DAS—直接附加存储(性能低下)
3、对象存储: 给你一个很大的空间,但这个空间是由很多硬盘组成的(这些硬盘不一定是一个机器上的),其中一个硬盘可以理解为一个osd,每个osd又由很多pg组成,如现在需要读取(或写入)1G的信息,其中每个osd有200M,这样读取速度就会很快。
组成集群的每个服务器–称之为 节点(node)
集群是由若干存储服务器组成(只有系统和硬盘,加入集群中)
利用交换机使用集群
下图node1和node2是主备模式,node1坏了自动切换到node2,node1和node2中的sdb盘的内容都是集群中的sdb1盘里的内容,所以node1坏了数据并不会丢失,也可以配置成 高性能模式(双活),高性能的集群可以理解为“读写分离”,其本质是将访问压力分散到集群中的多个节点,但是没有分散存储压力。
利用网络使用集群
交换机很贵 一个也要几十上百万,所以 一般小企业是不会用交换机作为中转的,而是用网络
在node节点上看到的实际上和本地硬盘一模一样,也和本地硬盘一样的正常使用,但实际数据是存放在集群中的。
比如在node1上给sdb硬盘分区,被分区的硬盘实际是集群中的硬盘,因为node2和node1都是共享集群中的硬盘,所以在node1上分区硬盘后,node2上看到的硬盘也被分区了,所以需要分区硬盘只需要在一个节点上执行,如果node1上分区了再去node2上分区,会损坏磁盘数据。
上图中一个接口称之为一个lun,target中分配了多少个lun,node中就能读取到多少个硬盘。
其中fc-san就是交换机
iscsi-ip.san就是网络
配置iscsi服务器端
- 1、先在虚拟机中添加一块新的硬盘
然后创建分区,就是sdx1。。。这种
- 2、创建分区:fdisk 设备名
创建完毕后刷新一下:partprobe 设备名
- 3、安装targetcli:yum -y install targetcli*
安装完毕后启动target服务并设置开启自启: systemctl start target , systemctl enable target
- 4、进入子系统:targetcli
注意 在子系统中的根目录 并非系统的根目录,而是子系统的根。
根目录中对应的关系如下图:
- 5、所以我们现在需要添加硬盘信息:/backstores/block create 自定义名称 设备名
如:/backstores/block create block1 /dev/sda4(查看硬盘lsblk)
删除添加的硬盘:/backstores/block delete 自定义的名称
如:/backstores/block delete block1
重新创建2个block后面要用:/backstores/block create block1 /dev/sda5,/backstores/block create block2 /dev/sda6
因为需要2块,所以我把之前的主分区sda4删了多建了几个逻辑分区:lsblk
- 6、创建iscsi:/iscsi create 格式.年份-月份.*.com.自定义名称 (.*和.自定义名称两者必需有其一)
如:/iscsi create iqn.2019-12.com.example.disk
删除iscsi:/iscsi delete 已创建的全名称
如:/iscsi delete example.disk
如果创建iscsi格式不对,会报错,无法创建成功:
创建一个iscsi 后面要用:/isisc create iqn.2019-12.com.disk - 7、进入新建的新建的iscsi目录:cd /iscsi/iqn.2019-12.com.disk/tpgl
- 8、创建acls(可以理解为密码):acls/ create iqn.年份-月份.com.*
删除acls:acls/ delete 创建的全称
创建一个后面要用:acls/ create iqn.2019-12.com:ccx
因为iscsi是虚拟的,所以需要指定设备,所以需要在luns里先添加设备(block中的硬盘) - 9、luns里添加设备:luns/ create /backstores/block/添加的名称
如:我之前添加硬盘名词是block1和2:luns/ create /backstores/block/block1 , luns/ create /backtores/block/block2
luns里删除设备 luns/ delete lun* (ls查看序号,lun可以不要,直接跟序号即可)
如:我刚才创建了2个 就是lun0和lun1,所以:luns/ delete lun0 , luns/ delete lun1
创建2个待会要用:luns/ create /backstores/block/block1 , luns/ create /backstores/block/block2 - 10、ls查看,luns下面是portals,这是端口,意思是 3260端口是对所有ip开放的:
可以删除该条目:portals/ delete 0.0.0.0 3260
然后定义对指定ip开放3260端口:partals/ create ip 3260
如:partals/ create 10.233.3.227 3260(就是只对227这个ip开放该端口)
改回对所有ip开放3260端口:portals/ create 0.0.0.0 3260
- 11、重启服务:systemctl restart target
- 12、如果防火墙是打开的,需要把3260端口添加到防火墙:firewall-cmd --add-port=3260/tcp , firewall-cmd --add-port=3260/tcp --permanent
iscsi服务端就配置完成了,exit退出。
配置完毕后exit退出报错:
如果配置过程中很顺利没有报错,但exit退出时报错,首先考虑是不是版本问题,cat /etc/redhat-release 查看当前版本,然后在查看你挂载的源是不是和版本同一个版本,如果是网络源 基本上不会因为版本导致exit报错。
版本和本地源一样的意思如下图:
退出后第三句话提示 文件已经保存到该文件下,就是说,如果我要更改acls中创建的名称,直接到该目录下定位到改行,直接改即可(就不需要再进入到子系统删除后重新建):vi /etc/target/saveconfig.json
注:修改后需要重启服务后生效:systemctl restart target
配置iscsi客户端
首先需要安装iscsi的包: yum -y install iscsi*
然后 vi /etc/iscsi/initiatorname.iscsi ,把*Name=后面改为之前定义的acls名称
查看服务端配置的acls :targetcli (进入子系统后),ls / 即可看到:
然后重启服务并设置开机自启动:systemctl restart iscsid , systemctl enable iscsid
然后需要做一个发现的操作,发现target的名字
iscsiadm -m discovery -t st -p 服务器ip
如:我的服务器ip是226(现在客户端ip是225):iscsiadm -m discovery -t st -p 10.233.3.226
一开始我添加是报错的(no route to host)报错如下图:
报错解决:我去看了 /etc/hosts里面,没有添加解析,我添加了解析后重试 依然报错,然后查看当前防火墙,发现是打开的,我就把防火墙关了依然不行,我就去看服务器的防火墙,依然是打开的,把服务器防火墙关闭后,成功。因为这是测试机 我以为我的防火墙是关闭的,就没有添加3260端口,所以如果防火墙必须打开,把端口添加进去即可。 下图 是查看防火墙以及关闭防火墙:
查看已经连接的设备:iscsiadm -m session
查看发现纪录:iscsiadm -m discovery
删除发现纪录:iscisadm -m discovery -p 服务端ip -o delete
重新做一个发现纪录 待会要用:iscsiadm -m discovery -t st -p 10.233.3.226
现在把服务器端配置的硬盘添加到客户端(也就是登陆):
不指定组登陆:iscsiadm -m discovery -t st -p 服务器ip -l (L)(不建议用)
指定iscsi组登陆:iscsiadm -m node -T iscsi名称 -p 服务器ip -l(L)
添加之前先查看客户端硬盘信息:lsblk,只有sda
查看iscsi名称:targetcli (进入子系统后),ls / 即可看到:
以我的为例,不指定组登陆:iscsiadm -m discovery -t st -p 10.233.3.226 -l (很方便 很好记,ip后面不加-l 就是查看,加-l就是登陆)
指定组登陆:iscsiadm -m node -T iqn.2019-12.com.disk -p 10.233.3.226 -l
登陆之前lsblk看不到服务器的硬盘,登陆成功以后lsblk就会看到服务器配置的硬盘信息了。
登陆报错截图:
处理:只有一个原因,客户端 vi /etc/iscsi/initiatorname.iscsi 里面的路径指定错误,指定的是acls的名称,去检查是不是指定为iscsi的名称了:
不想用已添加的硬盘了,退出登陆即可:iscsiadm -m node -T iscsi名词 -p 服务器ip -u (如果有多组,退出指定组) , iscsiadm -m node --logoutall=all / iscsiadm -m node -u ALL (2个均为注销所有连接)
如:iscsiadm -m node -T iqn.2019-12.com.disk -p 10.233.3.226 -u
注销后只是相当于退出登陆,但重启后共享存储又存在了,所以需要删除存储硬盘:
删除所有:iscsiadm -m node -o delete
删除指定组:iscsiadm -m node -T iscsi名称 -p 服务器ip -o delete
客户端配置扩展实验
扩展实验,就是说,我在服务器上配置了2组iscsi,想在客户端把这2组都配上去,经过种种实验,最终发现 ,客户端配置文件中,不允许同时写入两个秘钥;详细如下图:
服务器配置,2组iscsi:
客户端配置:先写入文件 vi /etc/iscsi/initiatorname.iscsi
重启:systemctl restart iscsid
发现:iscsiadm -m discovery -t st -p 10.233.3.226
登陆:iscsiadm -m discovery -t st -p 10.233.3.226 -l (挂载所有)
原因:系统只认配置文件 /etc/iscsi/initiatorname.iscsi 的其中一组,但这种情况想把2组都挂上去怎么弄呢!
刚才执行全部登陆的时候成功了一组,所以我们现在去配置文件中把成功的那组注释掉,重启服务,再次挂载即可!!
如:我刚才成功的是new,现在去配置文件把new注释掉,然后重启服务:
再次登陆,哈哈哈,成功了。我真是鬼才
为了测试能正常使用,我分区 格式化并挂载了/etc/iscsi/initiatorname.iscsi 文件中已经注释的文件,证明该方法 能用
当lsblk能看到硬盘以后,即全部配置完成,然后就可以正常使用了,但需要分区,格式化然后挂载目录,因为现在看到的其实是新盘,也就是相当于重新添加的硬盘。 (分区格式化挂载就不一一说明了)
查看完整名称:fdisk -l
分区:fdisk 设备名
格式化,mkfs.ext4(xfs) 设备名
挂载:mount 设备名 挂载路径
命令:
上述是临时挂载,如果需要永久挂载,需要吧信息写入到fsteb中,和本地硬盘一样,但在第四项,需要加上_netdev,必须上,不然开机系统不能正常重启。
上诉操作做完以后,整个共享存储从配置到使用就完成了,但lsblk看到的共享存储盘,重启是会自动加载到本机的,如果只想用一次性,不需要重启生效,去配置文件中把自动挂载注释掉:
vi /etc/iscsi/iscsid.conf
查看已连接设备:
查看已经连接的设备:iscsiadm -m session
查看详细:iscsiadm -m session -P1 (1可替换为1,2,3,1-3分别代表详细程度)