1.配置iSCSI服务

服务器上要额外配置一块硬盘

服务端(proxy)安装target,并将新加的硬盘配置为iSCSI 的共享磁盘

在客户端(client)上安装initiator,挂载服务器iSCSI,要求实现开机自动挂载

 

1.1 安装iSCSI服务器软件(proxy)

1.1.1 装包

]# yum -y install targetcli

]# yum info targetcli

1.1.2 手动添加一块20G的硬盘,化分区

]# lsblk

vdb 252:16 0 20G  0 disk

]# parted /dev/vdb mklabel gpt

]# parted /dev/vdb mkpart primary 1 100%

]# lsblk

vdb     252:16  0  20G 0 disk 

└─vdb1  252:17  0  20G 0 part

 

1.2 targetcli 划分分区

1.2.1 进入

]# targetcli

/> ls

o- / .............. [...]

  o- backstores ... [...]

  | o- block ...... [Storage Objects: 0]

  | o- fileio ..... [Storage Objects: 0]

  | o- pscsi ...... [Storage Objects: 0]

  | o- ramdisk .... [Storage Objects: 0]

  o- iscsi ........ [Targets: 0]

  o- loopback ..... [Targets: 0]

三大块:backstores  iscsi(空)  loopback

1.2.2 使用targetcli定义后端存储

(后段存储backstores里block块目录下创建块存储store,使用/dev/vdb1全部空间)

/> backstores/block create store /dev/vdb1

o- backstores .... [...]

  | o- block ..... [Storage Objects: 1]

  | | o- store ... [/dev/vdb1...

1.2.3 iSCSI创建iqn对象(给iSCSI共享设置一个共享名称)

/> iscsi/ create iqn.2019-01.com.baidu:www

1.2.4 acl访问控制

/> iscsi/iqn.2019-01.com.baidu:www/tpg1/acls create iqn.2019-01.com.baidu:ftp

拥有 iqn.2019-01.com.baidu:ftp 名称的客户机才能访问

1.2.5 luns绑定存储(store)

/> iscsi/iqn.2019-01.com.baidu:www/tpg1/luns create /backstores/block/store  
 
 
 

   /> ls iscsi/ 
 
 
 

   o- iscsi ............................. [Targets: 1] 
 
 
 

     | o- iqn.2019-01.com.baidu:www ..... [TPGs: 1] 
 
 
 

     |   o- tpg1 ........................ [no-gen-acls, no-auth] 
 
 
 

     |     o- acls .....................  [ACLs: 1] 
 
 
 

     |     | o- iqn.2019-01.com.baidu:ftp [Mapped LUNs: 1] 
 
 
 

     |     |   o- mapped_lun0 ..........  [lun0 block/store (rw)] 
 
 
 

     |     o- luns .....................  [LUNs: 1] 
 
 
 

     |     | o- lun0 ...................  [block/store (/dev/vdb1) 
 
 
 

     |     o- portals ..................  [Portals: 1] 
 
 
 

     |       o- 0.0.0.0:3260 ...........  [OK] 
 
 
 

   /> saveconfig  
 
 
 

   /> exit 
 
 
 

   ]# systemctl restart target 
 
 
 

   ]# systemctl enable target

 

1.3 客户端访问(web1作为客户端的角色)

1.3.1 安装客户端软件

]# yum -y install iscsi-initiator-utils

1.3.2 设置本机的iqn名称

]# vim /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.2019-01.com.baidu:ftp

1.3.3 发现远程target存储 提示:参考man iscsiadm!

]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.2.5 --discover 192.168.2.5:3260,1 iqn.2019-01.com.baidu:www

1.3.4 登陆挂载

]# iscsiadm --mode node --targetname iqn.2019-01.com.baidu:www --portal 192.168.2.5:3260 --login

]# lsblk

NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda    8:0    0   20G  0 disk 

]# systemctl restart iscsi

1.3.5 分区、格式化、挂载

]# parted /dev/sda mklabel gpt

]# parted /dev/sda mkpart primary 1 800

]# mkfs.xfs /dev/sda1

]# mount /dev/sda1 /mnt

]# lsblk

NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda    8:0  0  20G  0 disk 

└─sda1 8:1  0  762M 0 part /mnt

]# umount /mnt

1.4 附加课外实验:多台FTP或者http主机使用共享存储

1.4.1 web1 ftp使用共享存储

]# mkdir /var/ftp/

]# mount /dev/sda1 /var/ftp/

]# yum -y install vsftpd

]# sed -i 's/^#anon/anon/' /etc/vsftpd/vsftpd.conf

备注:修改vsftpd配置文件,开启匿名上传功能。将下面2行默认的注释行打开。

#anon_upload_enable=YES

#anon_mkdir_write_enable=YES

]# chmod 777  /var/ftp/pub

]# systemctl start vsftpd

]# systemctl enable vsftpd

备注:只有启动ftp才会产生pub文件夹

真机访问web1的ftp,并拖入任意文件(pub为777)

ftp://192.168.2.100/

目标:当web1宕机后,web2主机可以继续使用iscsi提供FTP共享服务。

Web1关闭vsftpd服务,卸载iscsi挂载。

]# systemctl stop vsftpd(pub文件夹没有了)

]# umount /var/ftp(没有共享存储了)

1.4.2 web2 ftp使用共享存储

]# yum -y install iscsi-initiator-utils 
 
 
 

   ]# vim /etc/iscsi/initiatorname.iscsi 
 
 
 

   InitiatorName=iqn.2019-01.com.baidu:ftp 
 
 
 

   ]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.2.5 --discover 192.168.2.5:3260,1 iqn.2019-01.com.baidu:www 
 
 
 

   ]# iscsiadm --mode node --targetname iqn.2019-01.com.baidu:www --portal 192.168.2.5:3260 --login 
 
 
 

   ]# lsblk 
 
 
 

   ]# yum -y install vsftpd 
 
 
 

   ]# sed -i 's/^#anon/anon/' /etc/vsftpd/vsftpd.conf 
 
 
 

   ]# chmod 777 /var/ftp/pub/ 
 
 
 

   ]# systemctl start vsftpd 
 
 
 

   ]# systemctl enable vsftpd

真机访问web2的ftp,并拖入任意文件(pub为777)

 

2.部署Multipath多路径环境(暂时不做)

 

3.配置并访问NFS共享

服务器利用NFS机制发布2个共享目录,要求如下:(proxy,192.168.2.5)

   将目录/root共享给192.168.2.100,客户机的root用户有权限写入

   将/usr/src目录共享给192.168.2.0/24网段,只开放读取权限

从客户机访问NFS共享:

   分别查询/挂载上述NFS共享目录

   查看挂载点目录,并测试是否有写入权限

 

3.1 配置NFS服务器,发布指定的共享

3.1.1 软件包nfs-utils用来提供NFS共享服务及相关工具,而软件包rpcbind用来提供RPC协议的支持

]# rpm  -q  nfs-utils  rpcbind

nfs-utils-1.3.0-0.48.el7.x86_64

rpcbind-0.2.0-42.el7.x86_64

3.1.2 需要作为NFS共享发布的有/root、/usr/src这两个目录:

]# ls -ld /root /usr/src/

dr-xr-x---. 35 root root 4096 1月  15 18:52 /root

drwxrwxr-x+  4 root root 4096 1月  15 17:35 /usr/src/

3.1.3 修改/etc/exports文件,添加共享目录设置

默认情况下,来自NFS客户端的root用户会被自动降权为普通用户,若要保留其root权限,注意应添加no_root_squash控制参数(没有该参数,默认root会被自动降级为普通账户);另外,限制只读的参数为ro、可读可写为rw,相关配置操作如下所示:

]# vim /etc/exports

/root    192.168.2.100(rw,no_root_squash)

/usr/src 192.168.2.0/24(ro)

3.1.4 启动NFS共享相关服务,确认共享列表

依次启动rpcbiind、nfs服务:

]# systemctl restart rpcbind; systemctl enable rpcbind

]# systemctl restart nfs; systemctl enable nfs

3.1.5 使用showmount命令查看本机发布的NFS共享列表:

]# showmount -e localhost

Export list for localhost:

/usr/src 192.168.2.0/24

/root    192.168.2.100

 

3.2 从客户机访问NFS共享(web1)

3.2.1 启用NFS共享支持服务

客户机访问NFS共享也需要rpcbind服务的支持,需确保此服务已开启:

]# systemctl restart rpcbind; systemctl enable rpcbind

3.1.2 查看服务器提供的NFS共享列表

]# showmount -e 192.168.2.5

Export list for 192.168.2.5:

/usr/src 192.168.2.0/24

/root    192.168.2.100

3.1.3 从客户机192.168.2.100访问两个NFS共享,并验证权限

将远程的NFS共享/root挂载到本地的/root5文件夹,并验证可读可写:

]# mkdir /root5                    //建立挂载点

]# mount 192.168.2.5:/root /root5  //挂载NFS共享目录

]# df -hT /root5                   //确认挂载结果

Filesystem        Type  Size  Used Avail Use% Mounted on

192.168.2.5:/root nfs    50G   15G   33G  31% /root5

]# cd /root5  //切换到挂载点

root5]# echo "NFS Write Test" >  test.txt   //测试写入文件

root5]# cat test.txt                        //测试查看文件

NFS Write Test

proxy查看:

]# ls /root/ 是否有文件及内容(说明可以读写)

 

将远程的NFS共享/usr/src挂载到本地的/mnt/nfsdir,并验证只读:

]# mkdir /mnt/nfsdir                        //建立挂载点 
 
 
 

   ]# mount 192.168.2.5:/usr/src /mnt/nfsdir/  //挂载NFS共享目录 
 
 
 

   ]# df -hT /mnt/nfsdir/                 //确认挂载结果 
 
 
 

   Filesystem           Type  Size  Used Avail Use% Mounted on 
 
 
 

   192.168.2.5:/usr/src nfs    50G   15G   33G  31% /mnt/nfsdir 
 
 
 

   [root@web1 ~]# cd  /mnt/nfsdir/        //切换到挂载点 
 
 
 

   nfsdir]# ls               //读取目录列表 
 
 
 

   debug  install.log  kernels  test.txt 
 
 
 

   ]# echo "Write Test." >  pc.txt //尝试写入文件失败

-bash: pc.txt: 只读文件系统

如果从未授权的客户机访问NFS共享,将会被拒绝。比如从NFS服务器本机尝试访问自己发布的/root共享(只允许192.168.2.100访问),结果如下所示:(proxy)

]# mkdir /root5

]# mount 192.168.2.5:/root /root5    

mount.nfs: access denied by server while mounting 192.168.2.5:/root

3.1.4 设置永久挂载(web1)

]# vim  /etc/fstab

.. ..

192.168.2.5:/usr/src /mnt/nfsdir  nfs default,ro  0 0

192.168.2.5:/root    /root5       nfs default     0 0

 

4.编写udev规则

4.1 先输入指令:再插入U盘(真机)

]# udevadm monitor --property

...

ID_BUS=usb(设备类型)

ID_VENDOR=OPPO(设备名)

ID_SERIAL_SHORT=LBNRSS5HYDMVINC6(设备序列号、串号)

ID_FS_TYPE=文件系统

ACTION=add

ACTION=remove

DEVNAME=

DEVPATH=

如果设备已经加载则无法使用monitor查看相关属性。可以使用下面的命令查看设备属性。

]# udevadm info --query=path --name=/dev/sda

]# udevadm info --query=property --path=/block/sda

单独查看某个磁盘分区的属性信息。

]# udevadm info --query=property --path=/block/sda1

4.2 编写udev规则文件(实现插拔USB设备时有屏幕提示信息)

]#vim /etc/udev/rules.d/70-usb.rules 
 
 
 

   ACTION=="add",ENV{ID_VENDOR}=="TOSHIBA",ENV{ID_SERIAL_SHORT}=="60A44CB4665EEE4133500001",RUN+="/usr/bin/systemctl start httpd" 
 
 
 

   ACTION=="remove",ENV{ID_VENDOR}=="TOSHIBA",ENV{ID_SERIAL_SHORT}=="60A44CB4665EEE4133500001",RUN+="/usr/bin/systemctl stop httpd"

**********************************

udev常见操作符:

==   表示匹配

!=    不匹配

=     指定赋予的值

+=   添加新值

:=    指定值,且不允许替换

NAME=“udisk" 定义设备名称

SYMLINK+=”data1" 定义设备的别名

OWNER=“student"  定义设备的所有者

GROUP=”student"  定义设备的所属组

MODE=“0600”      定义设备的权限

ACTION==“add"    判断设备的插拔操作

KERNEL=="sd[a-z]1" 判断设备的内核名称

RUN+=程序           为设备添加程序

 

udev常用替代变量:

%k:内核所识别出来的设备名,如sdb1

%n:设备的内核编号,如sda3中的3

%p:设备路径,如/sys/block/sdb/sdb1