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)
目标:当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
- WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇]
原文:WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇] 在[WS标准篇]中我花了很大的篇幅介绍了WS-MEX以及与它相关的WS规范:WS-Policy.WS-Tra ...
- JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine
JAVA之旅(二十五)--文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine 我们继续IO上个篇 ...
- 二十五种网页加速方法和seo优化技巧
一.使用良好的结构 可扩展 HTML (XHTML) 具有许多优势,但是其缺点也很明显.XHTML 可能使您的页面更加符合标准,但是它大量使用标记(强制性的 <start> 和 <e ...
- Java进阶(二十五)Java连接mysql数据库(底层实现)
Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...
- 智课雅思词汇---二十五、-ate
智课雅思词汇---二十五.-ate 一.总结 一句话总结:又是动词,又是名词,又是形容词 后缀:-ate ①[动词后缀] 表示做.造成.使之成....做...事等意义 hyphenate 加连字符 o ...
- 剑指Offer(二十五):复杂链表的复制
剑指Offer(二十五):复杂链表的复制 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...
- 《手把手教你》系列技巧篇(二十五)-java+ selenium自动化测试-FluentWait(详细教程)
1.简介 其实今天介绍也讲解的也是一种等待的方法,有些童鞋或者小伙伴们会问宏哥,这也是一种等待方法,为什么不在上一篇文章中竹筒倒豆子一股脑的全部说完,反而又在这里单独写了一篇.那是因为这个比较重要,所 ...
- Bootstrap <基础二十五>警告(Alerts)
警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个 ...
- VMware vSphere 服务器虚拟化之二十五 桌面虚拟化之终端服务池
VMware vSphere 服务器虚拟化之二十五 桌面虚拟化之终端服务池 终端服务池是指由一台或多台微软终端服务器提供服务的桌面源组成的池.终端服务器桌面源可交付多个桌面.它具有以下特征: 1.终端 ...
随机推荐
- 从零开始学Flask框架-006
重定向和用户会话 因为刷新页面时浏览器会重新发送之前已经发送过的最后一个请求.如果这个请求是一个包含表单数据的POST 请求,刷新页面后会再次提交表单. 基于这个原因,最好别让Web 程序把POST ...
- 第五章 模块之random 、hashlib、time /datetime
5.2 random 返回随机生成的一个实数 random.randint() 返回随机生成的一个实数 import random #调用模块def get_random_code(length=6 ...
- Python中turtle库的使用
Turtle图形库 Turtle库是Python内置的图形化模块,属于标准库之一,位于Python安装目录的lib文件夹下,常用函数有以下几种: 画笔控制函数 penup():抬起画笔: pendow ...
- 面试题目<转载>
1:检测一个变量是否有设置的函数是否?是否为空的函数是?(2分) 2:echo(),print(),print_r()的区别(3分) 3:表单中 get与post提交方法的 ...
- 求亲篇:数据库操作,SqlHelper,增删改查
1.利用SqlHelper类 2.简单的数据绑定输出 string strSql = "select * from login"; DataTable dt = SqlHelper ...
- Golang高阶:Golang1.5到Golang1.12包管理
Golang1.5到Golang1.12包管理 1. 前言 Golang 是一门到如今有十年的静态高级语言了,2009年的时候算是正式推出了,然后到最近的一两年,2017-2018年的时候,突然直线上 ...
- Apollo 与 .net core
appsettings配置内容 { "Apollo": { "AppId": "netcore", "Env": &qu ...
- element-ui 文件上传
<el-form-item> <el-upload ref="upload" class="upload-demo" :action=&quo ...
- ios设备app作为蓝牙外设端
苹果手机可以作为蓝牙外设端,被蓝牙中央端来扫描连接交互数据,实现模拟蓝牙外设硬件.通过阅读CoreBluetooth库,可以找到一个CBPeripheralManager的类,该类主要的作用就是允许你 ...
- 宽字节 多字节 mbstowcs wcstombs
函数 size_t wcstombs(char *dest, const wchar_t *src, size_t n); //wide-character to a multibyte n:被写入到 ...