共享存储如同其名字所隐喻的,是物理存储器中一段可由两个以上的进程共享的存储空间。共享存储段具有大小和物理存储地址。想要访问共享存储段的进程可以连接这段存储区域到自己的地址空间中任何适合的地方,其他进程也一样。这样,多个进程便可以访问相同的物理存储。
如上图:准备迁移
组成集群的每个服务器–称之为 节点(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就是网络
安装完毕后启动target服务并设置开启自启:
systemctl start target
systemctl enable target
注意 在子系统中的根目录 并非系统的根目录,而是子系统的根。
根目录中对应的关系如下图:
/backstores/block create 自定义名称 设备名
/backstores/block create block1 /dev/sda4(查看硬盘lsblk)
/backstores/block delete 自定义的名称
/backstores/block delete block1
/backstores/block create block1 /dev/sda5
,/backstores/block create block2 /dev/sda6
lsblk
/iscsi create 格式.年份-月份.*.com.自定义名称 (.*和.自定义名称两者必需有其一)
/iscsi create iqn.2019-12.com.example.disk
/iscsi delete 已创建的全名称
/iscsi delete example.disk
如进入之前创建iscsi目录的:cd /iscsi/iqn.2019-12.com.disk/tpgl
新增acls
acls是配置访问控制(即设置访问服务客户端声称的名字),就是说想要哪个ip或者ip段可以使用这个iscsi存储,格式为:/iscsi/iqn.2018-08.com.example.district18:system1/tpg1/acls/ create iscsi
名称:允许的ip或者主机名 ,如果默认所有人都可以访问,那么这个可以不配置。
如:我只允许10.233.3.226这个ip访问我: /iscsi/iqn.2018-08.com.example.district18:system1/tpg1/acls/ create iqn.2018-08.com.example.district18:10.233.3.226
删除acls:acls/ delete 创建的全称 (如果不在acls目录下,需要完整地址,如:/iscsi/iqn.2018-08.com.example.district18:system1/tpg1/acls)
创建一个后面要用:acls/ create iqn.2019-12.com:ccx (ccx是一台服务器的主机名)
因为iscsi是虚拟的,所以需要指定设备,所以需要在luns里先添加设备(block中的硬盘)
luns/ create /backstores/block/添加的名称
luns/ create /backstores/block/block1
, luns/ create /backtores/block/block2
delete lun* (ls查看序号,lun可以不要,直接跟序号即可)
luns/ delete lun0 , luns/ delete lun1
luns/ create /backstores/block/block1
, luns/ create /backstores/block/block2
portals的默认端口是3260,且对所有ip生效:ls可以查看portals,luns下面是portals,这就是端口,0.0.0.0 3260 意思是 3260端口是对所有ip开放的:
完整路径/portals/ create ip_address=ip ip_port=port
portals/ create ip_address=10.233.3.226 ip_port=666
(注:我现在在portals目录下,如果不在portals目录,需要完整路径,如:/iscsi/iqn.2018-08.com.example.district18:system1/tpg1/portals
)portals/ delete 0.0.0.0 ip_port=port
portals/ delete 0 0 0 0 ip_port=3260
portals/ create 0.0.0.0 3260
如果防火墙是打开的,需要把3260端口添加到防火墙:
firewall-cmd --add-port=3260/tcp
firewall-cmd --add-port=3260/tcp --permanent
iscsi服务端就配置完成了,exit退出。
如果配置过程中很顺利没有报错,但exit退出时报错,首先考虑是不是版本问题,cat /etc/redhat-release
查看当前版本,然后在查看你挂载的源是不是和版本同一个版本,如果是网络源 基本上不会因为版本导致exit报错。
版本和本地源一样的意思如下图:
退出后第三句话提示 文件已经保存到该文件下,就是说,如果我要更改acls中创建的名称,直接到该目录下定位到改行,直接改即可(就不需要再进入到子系统删除后重新建):vi /etc/target/saveconfig.json
注:修改后需要重启服务后生效:systemctl restart target
把*Name=后面改为之前定义的acls名称(查看服务端配置的acls :targetcli (进入子系统后),ls / 即可看到)
systemctl restart iscsid ,
systemctl enable iscsid
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就会看到服务器配置的硬盘信息了。
不想用已添加的硬盘了,退出登陆即可: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
分区:fdisk 设备名 (注意,这个设备名是iscsi分享的设备名,不是本地设备)
格式化:mkfs.ext4(xfs) 设备名(注意,这个设备名是iscsi分享的设备名,不是本地设备
临时挂载:mount 格式化后的设备名 挂载路径
命令:
上述是临时挂载,如果需要永久挂载,需要吧信息写入到fsteb中,和本地硬盘一样,但在第四项,需要加上_netdev
,必须加上,不然开机系统不能正常启动(因为不加_netdev就是在本地找硬盘分区,但本地并不存在这个硬盘分区,所以系统起不来)。
上诉操作做完以后,整个共享存储从配置到使用就完成了,但lsblk看到的共享存储盘,重启是会自动加载到本机的,如果只想用一次性,不需要重启生效,去配置文件中把自动挂载注释掉:
vi /etc/iscsi/iscsid.conf
扩展实验,就是说,我在服务器上配置了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分别代表详细程度)