#yyds干货盘点# linux iscsi 简单实现windows文件互通和实现多路径访问,并实现负载均衡高可用超详细配置方法和原理的个人理解
Posted Jr_C
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# linux iscsi 简单实现windows文件互通和实现多路径访问,并实现负载均衡高可用超详细配置方法和原理的个人理解相关的知识,希望对你有一定的参考价值。
iSCSI 基于因特网SCSI-3协议的存储技术,将服务器的硬盘通过网络共享
linux中存储空间
硬盘形式:/dev/(sdx hdx)
文件形式:dd if=/dev/zero of=path bs=xx(K/M/G) count=num
【服务端】
1. 关闭服务端防火墙和selinux
2.安装服务端程序
targetd:服务端程序
targetcli:服务端管理程序
调用targetcli进行设置
3. 创建iscsi磁盘
ls 查看当前目录内容
backstores下
block 存放的硬盘
fileio 存放的文件类型的存储空间
/backstores/block create 磁盘名字 硬盘path
/backstores/fileio create 磁盘名字 文件path
4.创建服务端程序
在 iscsi 下创建
iscisi/ create 名字(iqn.2021-03.pip.cc:标识符)
名字当中的 2021-03 只能为这个格式 只能有年份和月份 多了会创建失败 其他部分也要遵守格式
创建好后会在iscsi目录下生成一个以服务端程序命名的目录,该目录下有tpg1目录,tpg1目录下又有 acls luns portals 三个目录
acls 在里面创建客户端连接器
luns 在里面创建服务卷
服务卷就是将刚才创建的iscsi硬盘创建成服务卷 服务卷才能被客户端识别
5.将iscsi磁盘转换为服务卷
luns/ create iscsi磁盘路径
有几个iscsi磁盘就创建几次
6.创建客户端连接器(启用chap认证)
chap认证可以认证客户端的连接 提高安全性
acls/ create 名字(iqn.date.pip.cc:标识符)
cd acls/客户端连接器名字/ 进入客户端连接器目录
设置用户名和password
set auth userid=username
set auth password=passwd
7.启动targetd和开机自启
8.检查端口是否启用
ss -napt | grep 3260
如果端口正在监听,表示一切正常
【客户端】
Linux客户端
1. 安装iscsi的客户端程序
yum install iscsi-initiator-utils
2.修改iscsi配置文件
cd /etc/iscsi
initatorname.iscsi:定义客户端连接器的名称(用服务端创建的客户端连接器的名字 不是你自己定义)
iscsid.conf:启用chap认证
vi /etc/iscsi/initatorname.iscsi
将InitiatorName字段值修改为服务器端创建的客户端连接器的名字即可
vi /etc/iscsi/iscsid.conf
将node.session.auth.authmethod = CHAP前面的#去掉 (启用CHAP认证)
node.session.auth.username = username (服务端定义的用户名)
node.session.auth.password = passwd (服务端定义的password)
3.重启iscsid服务
systemctl restart iscsid
重新加载IQN(可以理解为重新加载配置文件,也就是重新加载了账号password,这样你配置的CHAP认证才能认证通过,然后登录成功)
4.发现存储服务器
iscsiadm -m discovery -t st -p server_ip
-m discovery:关键字 发现的意思
-t st:显示发现结果
5.登录存储服务器
iscsiadm -m node -T 服务器程序名 -p server_ip --login
6.查看isci "网盘"
成功连接iscsi存储器成功后就会在当前客户端上生成服务器上的存储卷
lsblk 可查看
可看到多出两块看起来向本地磁盘的磁盘 可对它们进行分区 等等
Windows客户端
1.安装iscsi客户端程序(默认安装,只需要做一下设置即可)
在 [控制面板中]--->[管理工具]--->[iscsi发起程序]
点击是在打开iscsi发起程序即可启动iscsi发起程序
2.定义客户端连接器名称(和linux一样)
3.配置目标连接器
@@实现多路径访问,并实现负载均衡或高可用
在实现负载均衡和高可用之前需要有多条链路
多条链路的实现方法是
1. 在服务端添加一张网卡,将ip网段设置成和原本的网卡ip地址网段不一样的网段
2. 在客户端也添加一张网卡,将ip网段设置成和服务端新添加的网卡相同的网段
3. 在客户端执行两次发现存储服务器的命令 每次命令中的服务器ip地址为服务器的对于的两个网段的ip地址 并且执行一次命令就重启一次 iscsid
重启一次iscsid的作用是在本地生成服务端的服务卷
4. 执行lsblk后如果发现多了两个(前提是服务端只创建了一个服务卷,因为上一步用不同网段ip地址去发现服务器的时候每一个网段都会在本地创建服务器上的服务卷)磁盘在本地那就说明成功了
5. 这时候就实现了 双链路 但是现在这个双链路是手动的 如果一条链路失效 需要我们手动切换另一条链路去发现磁盘并挂载
要实现自动切换的话需要借助第三方的软件 Device Mapper Multipath 来实现,多链路聚合,将多条I/O链路配置成一个单独的设备(虚拟的),然后我们使用这一个虚拟的设备就可以实现多路径访问的负载均衡和高可用
这个软件有两个工作模式
1. 数据冗余
该模式称为 active/passive 模式,在该模式下只有一半的链路在运行,当运行的链路失效后,自动切换使用另一半链路,实现了高可用
2. 负载均衡
该模式成为 avtive/avtive 迷失,在该模式下所有线路都在运行,链路分配策略为轮询(round-robin),也就是每条链接轮流使用,在该模式下实现了负载均衡,该模式还可以识别每条链路的负载情况,实现动态的负载
安装配置该软件实现链路的自动切换步骤为
1. 安装软件
yum install device-mapper-multipath -y
2. 复制配置文件
软件安装过后配置文件是 /usr/share/doc/device-mapper-multipath-版本号/multipath.conf
我们要将该配置文件复制到 /etc 下
3. 直接重启程序,服务名为 multipathd ,重启之前记得把从服务器上加载下来的并且挂载的磁盘全部卸载
4. 重启iscsid程序,是为了让该程序和 multipath 关联一下
5. 执行 multipath -ll 命令后如果正常就可以看到当前聚合链路的信息
此时链路的模式是高可用(数据冗余)模式
可以看到 一个链路的 status 为 active,一个链路的 status 为enabled
如果没有两条链路的话你需要让服务器上的服务卷通过不同的ip网段生成在客户端上,multipath才会有两条链路
此时 /dev/mapper/下会有名为 mpatha 的设备文件,它是一个软连接 连接到 当前目录下的dm-3
如果服务器上的服务卷有多个或者有多个分区,那么这时候 /dev/mapper/ 下的虚拟设备文件就会有多个,分别为 mpatha1,mpatha2 ···
选择需要挂载的分区挂载就可以了,挂载后就是用高可用模式来访问服务器上的服务卷
有可能虚拟设备的名字不是multipathx 而是设备的wwid值,这是因为在配置文件中没有定义alias的值
以上就实现了数据冗余模式,现在来配置成负载均衡模式
从配置高可用模式的第二步后面开始
1. 编辑配置文件
将配置文件中默认的配置注释掉,也就是23到26行
这里可以用 vi 编辑器的 V 模式(可视 块 模式) 来快速注释
a. 在 vi 编辑器的 编辑模式下 按下 大写的v (shift + v)
b. 用鼠标拖动选中要插入注释符的一列(需要在 CRT 或者其他终端软件中才可以)
c. 然后在按下大写的 i (shift + i)
d. 输入 # 号
e. 然后按下esc建即可快速注释
2. 取消60到74行的注释,使用它自带的模板 multipaths multipath ··· multipath ···
这里也可以快速取消注释
a. 在 vi 编辑器的编辑模式下按下大写的 v (shift + v) (进入 可视 块 模式)
b. 选中需要删除的注释符(需要在 CRT 或者其他终端软件中才可以)
c. 按下退格键即可快速删除选中的注释符
3. 修改其中的 wwid 值
wwid 的值在你运行 multipath -ll 命令后可以看到,wwid 可以理解为虚拟出来的设备的uuid
4. 如果需要修改设备别名那么就可一修改alias的值
这个alias的值就是在本地生成的虚拟设备的名字
如果没有这个值,那么那个虚拟设别的名字就会是设备的wwid值
5. path_selector的值就是分发策略 "round-robin 0" 为轮询
6. 把第二个multipath (也就是 70 到 73 行) 删除了
其他的不用修改了
6. 保存退出,重启multipathd服务,重启iscsid服务
7. 执行 multipath -ll 命令过后即可看到 当前模式切换为了 负载均衡模式,两条链路都是活动状态,并且当一条链路失效后有恢复后,该链路会自动又加入轮询列表里
【2021/04/12】
iscsi discovery session 的双向认证就是在服务端iscsi里面设置的userid和password就填在客户端的discovery.···.username和discovery.···.password后面
在客户端程序里设置的userid和password就填在客户端的session.···username和session.···.password后面
大概就是iscsi里面设置的时一个样本值,客户端请求时发送discovery后面的值来验证,然后服务器就用iscsi里面设置的userid和password的来进行比对
服务器回复客户端时发送客户端程序里设置的userid和password值给客户端,客户端把接收到的值和配置文件里的session值来比对,相当于session值是样本值
把登录的参数 -l 改为 -u 为断开连接
【2021/04/13 16:13】
linux里面配置服务端的时候
在targetcli中,在服务端程序里设置的password就由服务端验证,客户端发送,在客户端程序里设置的password就有客户端验证,服务端发送
以上是我猜测的
【2021/04/18 17:44】
如果报了 No records found 错误,请用报这个错的登录ip地址,来发现一边服务器程序
大概是,在登录之前必须先发现发下服务器
【2021/04/1 19:49】
以前理解的双向认证错了有可能是
discovery和session是两种不同的认证方式,这两种认证方式都有单向和双向认证
单项认证就是普通的userid和password设置的值,单项认证是客户端向服务端请求的时候由客户端发送到服务端认证的账号和password
双向认证是在单向认证的基础上在由服务端发送一个账号和password由客户端认证
设置反向认证的参数是mutual_userid和mutual_password设置,在客户端由带有_in的参数指定样本值和发送的值
然后题目上说的服务端认证账号和password为ServerUser和Server123456,我猜测,把ServerUser翻译过来表示的服务器用户,所以它应该是由服务端发送给客户端的,表示发送方是服务器用户,所以Server认证的账号和password应该由mutual_user和mutual_password指定
题目上还说客户端认证账号和password为ClientUser和Client123456,把ClientUser翻译过来表示的客户端用户,所以按照日常打招呼的逻辑来说,它应该是由客户端来向服务器表明身份的,所以它是正向认证也就是由客户端发送,由服务端认证的账号和password,也就该由userid和password参数指定
以上是关于#yyds干货盘点# linux iscsi 简单实现windows文件互通和实现多路径访问,并实现负载均衡高可用超详细配置方法和原理的个人理解的主要内容,如果未能解决你的问题,请参考以下文章