配置iSCSI服务 编写udev规则 配置并访问NFS共享 部署Multipath多路径环境

###################################################

集群和存储

大型技术架构:docker、saltstack集中管理、elk、hadoop

云计算

《大型网站技术架构》        李志慧 阿里巴巴

《分布式大型网站技术架构》

 

cluster  集群与存储

一、存储概述

 

1.1存储的目标

 

存储是根据不同的应用环境通过采取合理、安全、有效的方式将数据保存到某些介质上并能保证有效的访问。

一方面它是数据临时或长期驻留的物理媒介。

另一方面,它是保证数据完整安全存放的方式或行为。

存储就是把这两个方面结合起来,向客户提供一套数据存放解决方案。

 

1.2存储技术分类

 

SCSI小型计算机系统接口 : small computer system interface 作为输入\输出接口,主要用于硬盘、光盘、磁带机等设备

DAS直连式存储:direct-attached storage 将存储设备通过SCSI接口或光纤通道直接连接到计算机上;不能实现数据与其他主机的共享;占用服务器操作系统资源,如CPUIO等;数据量越大,性能越差。

NAS网络技术存储network-attached  storage 一种专用数据存储服务器,以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽、提高性能、降低总拥有成本、保护投资;用户通过TCP/IP协议访问数据-采用标准的NFSlinux中)/HTTTP/CIFSwindow-linux)等。

SAN存储区域网络storage area network 通过光纤交换机、光纤路由器、光纤集线器等设备将磁盘阵列、磁带等存储设备与相关服务器连接起来,形成高速专网网络;

组成部分 如路由器、光纤交换机;接口如SCSIFC;通信协议如IPSCSI

fibre channel (传统-贵)一种适合于千兆数据传输的、成熟而安全解决方案;与传统的SCSI相比,FC提供更高的数据传输速率、更远的传输距离、更多的设备连接支持以及更稳定的性能、更简易的安装;

FC主要组件:光纤、HBA(主机总线适配置器)、FC交换机、FC光纤通道

FC交换机交换拓扑

-点到点:point-to-point 简单将两个设备互连

-已裁定的环路:arbitrated loop可多达126个设备共享一段信道或环路

-交换式拓扑(星型):switched fabric 所有设备通过光纤交换机互连

ISCSI技术(新-廉价):internet SCSI  IETF制定的标准,将SCSI数据块映射为以太网数据包;是一种基于IP storage理论的新型存储技术;将存储行业广泛应用的SCSI接口技术与IP网络相结合;可以在IP网络上构建SAN;最初由CiscoIBM开发

优势:基于IP协议技术的标准;允许网络在TCP/IP协议上传输SCSI命令;相对FC SANISCSI实现的IP SAN投资更低;解决了传输效率、存储容量、兼容性、开放性、安全性等方面的问题;没有距离限制

客户端 ISCSI initiator :软件实现,成本低、性能较低 ;

 ISCSI HBA:硬件实现,性能好,成本较高

存储设备端 ISCSI target

以太网交换机

 

二、配置iSCSI

1 准备三台虚拟机

vh01.tedu.cn   eth0:192.168.4.1/2/3

/var/lib/libvirt/images/   删重复主机

rm  -rf ~/.ssh/known_hosts   删重复ip

 

shift+pageup/down  终端里面上下翻页

ctrl+pageup/down  终端之间切换

vim: ctrl+n 查找/补全命令

 

# ls /etc/sysconfig/network-scripts/ifcfg-eth0

# ^ls^cat

# jobs && kill  %1

(ctrl+r  +esc 搜索历史命令)

 

virt-viewer    rh7_node2

systemctl stop firewalld

systemctl disable  firewalld

 

 

 配置虚机的环境

1)设置IP地址

# ifconfig -a

# setup

# service network restart

2)配置主机名

# setup

# hostname vh01.tedu.cn

 

eth0:192.168.4.1  存储端,加一块额外硬盘

 

3)配置yum

[root@room9pc16 ]# tail -1 /etc/fstab

/ISO/rhel-server-6.7-x86_64-dvd.iso /var/ftp/rhel6.7    iso9660 defaults,loop   0 0

[root@room9pc16 ]# mount -a

[root@vh01 ~]# yum-config-manager --add ftp://192.168.4.254/rhel6.7

[root@vh01 ~]# echo 'gpgcheck = 0' >> /etc/yum.repos.d/192.168.4.254.repo

4)防火墙和selinux

[root@vh01 ~]# service iptables status

[root@vh01 ~]# getenforce

 

2 配置iSCSI Target

iscsi命令采用IQN,全称必须全局唯一

2.1分区,注意千万不要格式化

[root@vh01 ~]# parted /dev/vdb

(parted) mklabel/mktable  gpt   新硬盘,使用一次,gpt标签,支持128个主分区

(parted) mkpart primary  1M 50%  创建主分区,分区起始位置为1M,结束位置为50%。  (50%  100%

(parted) print

(parted) quit  

# parted /dev/sdb mklabel gpt

# pvcreate /dev/sdb{1,2}

# vgcreate myvg /dev/sdb{1,2}

# lvcreate -n iscsi1 –L 800M myvg

2.2安装target

[root@vh01 ~]# yum list | grep scsi

[root@vh01 ~]# yum install -y scsi-target-utils

2.3 修改配置(ctrl+n)

[root@vh01 ~]# vim /etc/tgt/targets.conf

<target iqn.2017-06.cn.tedu.nsd1702>

        backing-store /dev/vdb1                    //定义存储设备

        initiator-address 192.168.4.2        //定义客户端ip

        initiator-address 192.168.4.3

</target>

 

将以上三条命令加入开机启动文件

    [root@svr5 ~]# vim /etc/rc.local

    tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2015-04.com.tarena.www:iscsi1

    tgtadm --lld iscsi --op new --mode logicalunit  --tid 1 --lun 1 -b /dev/myvg/iscsi1

    tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.4.0/24

 

2.4 起服务并验证

[root@vh01 ~]# service tgtd start 立即启动服务

[root@vh01 ~]# chkconfig tgtd on  设置开机自动运行

[root@vh01 ~]# tgt-admin  -s    需要能够查看到LUN1  /dev/vdb1

 

3 配置iSCSI客户端

3.1 安装软件包

[root@vh02 ~]# yum  -y  install  iscsi-initiator-utils

3.2 发现target

[root@vh02 ~]# man iscsiadm    //EXAMPLE

[root@vh02 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.4.1  --discover

3.3 登陆target

[root@vh02 ~]# service iscsi restart

[root@vh02 ~]# lsblk  此时可以看到多出了sda设备

[root@vh02 ~]# chkconfig iscsi on   用于自动login

[root@vh02 ~]# chkconfig iscsid on  客户端守护进程

 

4 使用iSCSI

4.1 分区、格式化

[root@vh02 ~]# parted  /dev/sda

(parted) mklabel  gpt

(parted) mkpart  primary   1M -1

(parted) quit

[root@vh02 ~]# mkfs.ext4   /dev/sda1

[root@vh03 ~]# partprobe

千万注意:不要在vh02vh03上对共享存储的相同分区同时挂载,同时挂载将会导致文件系统崩溃、数据丢失

4.2 vh02上使用共享存储

[root@vh02 ~]# yum install -y mysql-server

[root@vh02 ~]# mount /dev/sda1   /var/lib/mysql/

[root@vh02 ~]# service mysqld start

[root@vh02 ~]# mysql -uroot

mysql>create ...   select * from nsd.stu;

[root@vh02 ~]# service mysqld stop

[root@vh02 ~]# umount /dev/sda1

02主机上的数据在03上还能看到

[root@vh03 ~]# yum -y install mysql-server

[root@vh03 ~]# mount /dev/sda1 /var/lib/mysql/

[root@vh03 ~]#  service mysqld start

[root@vh03 ~]# mysql

mysql>   select * from nsd.stu;   char set utf8;

 

三、UDEV:它是动态管理设备文件的方法

设备文件管理方法

devfs   linux早期采用的静态管理方法;/dev目录下有大量静态文件;内核版本2.6.13开始被完全取代。

udev只有连到系统上来的设备才在/dev下创建设备文件;与主、次设备编号无关;为设备提供持久、一致的名字。

接入设备事件链

内核发现设备并导入设备状态到sysfsudev接到事件通知;udev创建设备节点或是运行指定程序;udev通知hald守护进程;HAL探测设备信息;HAL创建设备对象结构;HAL通过系统消息总线广播该事件;用户程序也可以监控该事件。

udev的作用

从内核收到添加/移除硬件事件时,udev将会分析:/sys目录下信息;/etc/udev/rules.d目录中的规则,基于分析结果,udev会:处理设备命名;决定要创建哪些设备文件或链接;决定如何设置属性;决定触发哪些事件

 

/proc/  内存上的  /sys/

 

udev事件监控

# udevadm  monitor --property

主配置文件/etc/udev/udev.conf

udev_root:创建设备文件位置,默认为/dev

udev_rules:udev规则文件位置,默认为/etc/udev/rules.d

udev_log:syslog优先级,缺省为err

操作符:==匹配   != 不匹配   =指定赋予的值  +=添加新值 :=指定值,且不允许被替换

常用替代变量:%k 内核所识别出来的设备名,如sdb1

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

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

%% %符号本身

一、为U盘创建一个符号链接,叫udisk

1、获取U盘的路径

[root@room9pc16 nsd1702]# udevadm info --query=path --name=/dev/sdb1

/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/host4/target4:0:0/4:0:0:0/block/sdb/sdb1

2、获取U盘所有信息

[root@room9pc16 nsd1702]# udevadm info --query=all --attribute-walk --path=/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/host4/target4:0:0/4:0:0:0/block/sdb/sdb1

3、创建规则

[root@room9pc16 nsd1702]# ls /etc/udev/rules.d/

[root@room9pc16 nsd1702]# vim /etc/udev/rules.d/90-udisk.rules 

ACTION=="add", KERNEL=="sd[a-z]*", SUBSYSTEMS=="usb", SYMLINK+="udisk%n"  RUN+=“/etc/init.d/mysqld restart”

4、重新接入U盘,查看结果

5、[root@room9pc16 nsd1702]# udevadm trigger

[root@room9pc16 nsd1702]# ll /dev/udisk*

二、为自己的U盘起名为myudisk

作法以和前面完全一样,只要找出你自己U盘的唯一信息

[root@room9pc16 nsd1702]# vim /etc/udev/rules.d/90-udisk.rules

ACTION=="add", KERNEL=="sd[a-z]*", SUBSYSTEMS=="usb", ATTRS{serial}=="0D80E897", ATTRS{manufacturer}=="Generic", ATTRS{product}=="Mass Storage", SYMLINK+="myudisk%n"

三、改虚机网卡名

[root@vh03 ~]# vim /etc/udev/rules.d/70-persistent-net.rules 根据MAC地址取名称

 

 

 

四、NFS网络文件系统

 实现类unix系统间共享。如果实现Linuxwindows共享采用samba

 NFS依赖于rpc服务。NFS只提供了共享功能,没有实现底层数据传输,它的数据传输采用的是RPC服务。

 RPC称作远程过程调用。在RHEL5中用portmap,在RHEL6/7以后采用rpcbind服务

 RPC端口号111NFS端口号2049

文件系统的类型

本地文件系统:EXT3/4SWAPNTFS  --本地磁盘

伪文件系统:/proc/sys --内存空间

网络文件系统:NFSnetwork file system)  --网络存储空间

NFS共享协议

unix/linux最基本的文件共享机制

1980年由SUN公司开发

依赖于RPC(远程过程调用)映射机制

存取位于远程磁盘中的文档数据,对应用程序是透明的,就好像访问本地的文件一样

/etc/exports配置解析   /root   192.168.4.2(rw)  pc110(rw,no_root_squash)

ip地址192.168.4.20        网段地址 172.0.0.0/24 172.0.0.*   所有主机  *

单个域 *.tarena.com     主机名 pc110.tarena.com   

 

rw\ro 可读可写、只读       syncasync 同步写、异步写入       no_root_squash 保留来自客户端的root权限        all_squash 客户端权限都降为nfsnobody

 

 

4.1 vh01上以只读的方式提供共享

 安装

[root@vh01 ~]# yum install -y nfs-utils

 准备共享目录

[root@vh01 ~]# mkdir -pv /nfsroot/ro_nfs

[root@vh01 ~]# cp /etc/hosts  /nfsroot/ro_nfs

 修改配置文件

[root@vh01 ~]# vim /etc/exports

/nfsroot/ro_nfs         192.168.4.0/24(ro)

 启服务并查看

[root@vh01 ~]# service rpcbind start; chkconfig rpcbind on

[root@vh01 ~]# service nfs start; chkconfig nfs on

[root@vh01 ~]# showmount -e 192.168.4.1

附:如果希望RHEL6也支持各级别的命令tab键补全,可以把rhel7光盘的bash-completion rpm包安装并reboot

 vh02上使用共享目录

[root@vh02 ~]# yum install -y nfs-utils

[root@vh02 ~]# service rpcbind start; chkconfig rpcbind on

[root@vh02 ~]# service nfs start; chkconfig nfs on

[root@vh02 ~]# mkdir /mnt/nfsshare

[root@vh02 ~]# mount 192.168.4.1:/nfsroot/ro_nfs  /mnt/nfsshare

 

4.2vh01上以读写方式共享

注意,任何通过网络共享的方式,都要注意配置文件设置的权限以及本地权限。

 创建共享目录

[root@vh01 ~]# mkdir -m 777 /nfsroot/nfs_rw

 修改配置文件

/nfsroot/ro_nfs         192.168.4.0/24(ro)

/nfsroot/nfs_rw         192.168.4.*(rw,sync)

 重新输出共享目录

[root@vh01 ~]# exportfs -rv

 vh02上挂载使用

[root@vh02 ~]# mount 192.168.4.1:/nfsroot/nfs_rw /mnt/nfsrw

[root@vh02 ~]# cp /etc/passwd /mnt/nfsrw/mima

[root@vh02 ~]# ll /mnt/nfsrw/mima

[root@vh02 ~]# useradd bob

[root@vh02 ~]# su - bob

[bob@vh02 ~]$ touch /mnt/nfsrw/bob.txt

[bob@vh02 ~]$ ll   /mnt/nfsrw/bob.txt

 

五、配置multipath多路径

多路径概述

当服务器到某一存储设备由多条路径时,每条路径都会识别为一个单独的设备

多路径允许您将服务器节点和存储阵列间的多个I/O路径配置为一个单一设备

这些I/O路径是可包含独立电缆、交换器和控制器的实体SAN链接

多路径集合了I/O路径,并生成由这些集合路径组成的新设备

多路径主要功能

冗余 --主备模式,高可用

改进的性能 --主主模式,负载均衡

多路径设备

若没有DM multipath ,从服务器节点到存储控制器的每一条路径都会被系统视为独立的设备,即使I/O路径链接的是相同的服务器节点到相同的存储控制器也是如此

DM multhpath 提供了有逻辑的管理I/O路径的方法,即在基础设备顶端生成单一多路径设备

多路径设备识别符

每个多路径设备都有一个WWID(全球识别符),它是全球唯一的、无法更改的号码

默认情况下会将多路径设备的名称设定为它的WWID

可以在多路径配置文件中设置user_friendly_names选项,该选项可将别名设为格式为mpathn的节点唯一名称

也可以自定义存储设备名称

 

 

1、在vh01vh02上配置额外的网络

# setup  配置192.168.2.0/24网络

2、配置vh01iSCSI允许192.168.2.2进行访问

[root@vh01 ~]# vim /etc/tgt/targets.conf

<target iqn.2017-06.cn.tedu.nsd1702>

        backing-store /dev/vdb1

        initiator-address 192.168.4.2

        initiator-address 192.168.2.2

</target>

3、重启主机,使得配置生效

[root@vh01 ~]# reboot

[root@vh01 ~]# tgt-admin  -s

4、多路径主要是客户端的配置,在vh02上配置

(1)在另外的路径上也发现共享存储(ctrl+r  +esc 搜索历史命令)

[root@vh02 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.2.1  --discover

[root@vh02 ~]# service iscsi restart

(2)安装multipath

[root@vh02 ~]# yum install -y device-mapper-multipath

(3)生成修改配置文件

[root@vh02 ~]# mpathconf --user_friendly_names n

[root@vh02 ~]# /lib/udev/scsi_id --whitelisted --device=/dev/sdc  //获取WWID

[root@vh02 ~]# vim /etc/multipath.conf

defaults {

        user_friendly_names no

        getuid_callout          "/lib/udev/scsi_id --whitelisted --device=/dev/%n"

}

multipaths {

    multipath {

        wwid    "1IET     00010001"

        alias   mpatha

    }

}

(5)发现wwid的方法

[root@vh02 ~]# scsi_id --whitelisted --device=/dev/sda

[root@vh02 ~]# /lib/udev/scsi_id --whitelisted --device=/dev/sda

1IET     00010001

(6)启服务并验证

[root@vh02 ~]# service multipathd start; chkconfig multipathd on

# ls /dev/mapper

# ls blk

# mount /dev/mapper/mpathp1  /var/lib/mysql

# service mysqld start

# mysql  -uroot -p  -e “select * from nsd.stu;”

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

配置iSCSI服务 

编写udev规则 

配置并访问NFS共享 

部署Multipath多路径环境 

1 配置iSCSI服务

1.1 问题

本案例要求先搭建好一台iSCSI服务器,并将整个磁盘共享给客户端:

虚拟机添加新的磁盘

将新添加的磁盘分区并创建两个逻辑卷

逻辑卷名称分别为:/dev/myvg/iscsi1/dev/myvg/iscsi2

服务器通过配置文件与命令两种方式共享逻辑卷

然后客户机挂载iSCSI服务器共享的磁盘:

客户端使用命令探测服务器共享的iSCSI磁盘

客户端挂载iSCSI磁盘

分区并格式化

1.2 方案

使用2台RHEL6虚拟机,其中一台作为iSCSI服务器(192.168.4.5)、另外一台作为测试用的Linux客户机(192.168.4.205),如图-1所示。

 

-1

RHEL6系统中,默认通过scsi-target-utils软件包提供iSCSI服务,因此需要在服务端安装scsi-target-utils包并配置对应的服务,iSCSI服务主要配置选项如表-1所示。

表-1 iSCSI配置选项列表

 

客户端挂载iSCSI服务器:

客户端需要安装iscsi-initiator-utils软件包

客户端使用命令挂载后需要分区、格式化并进行挂载测试

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装iSCSI服务器软件

1)使用yum安装scsi-target-utils软件包

[root@svr5 ~]# yum  -y  install  scsi-target-utils

.. ..

[root@svr5 ~]# rpm  -q  scsi-target-utils

scsi-target-utils-1.0.24-10.el6.x86_64

2)启用target服务,并设为开机自动运行

[root@svr5 ~]# service  tgtd  start  ;  chkconfig  tgtd  on

Starting SCSI target daemon:                               [  OK  ]

tgtd服务默认通过TCP 3260端口监听客户端请求:

[root@svr5 ~]# netstat  -anptu  |  grep tgtd

tcp        0      0 0.0.0.0:3260    0.0.0.0:*    LISTEN      2737/tgtd

步骤二:创建逻辑卷

1)为新建磁盘/dev/sdb创建分区

[root@svr5 ~]# parted /dev/sdb mklabel gpt

[root@svr5 ~]# parted /dev/sdb mkpart primary 1 1000

[root@svr5 ~]# parted /dev/sdb mkpart primary 1000 2000

2)创建逻辑卷

[root@svr5 ~]# pvcreate /dev/sdb{1,2}

[root@svr5 ~]# vgcreate myvg /dev/sdb{1,2}

[root@svr5 ~]# lvcreate -n iscsi1 –L 800M myvg

[root@svr5 ~]# lvcreate -n iscsi2 –L 800M myvg

[root@svr5 ~]# lvscan

步骤三:通过命令行配置iSCSI服务

1)创建target

[root@svr5 ~]# tgtadm --lld iscsi --op new --mode \

> target --tid 1 -T iqn.2015-04.com.tarena.www:iscsi1

2)为target导入本地磁盘

[root@svr5 ~]# tgtadm --lld iscsi --op new --mode \

>logicalunit  --tid 1 --lun 1 -b /dev/myvg/iscsi1

3)配置ACL

[root@svr5 ~]# tgtadm --lld iscsi --op bind --mode \

> target --tid 1 -I 192.168.4.0/24

4)将以上三条命令加入开机启动文件

[root@svr5 ~]# vim /etc/rc.local

    .. ..

tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2015-04.com.tarena.www:iscsi1

tgtadm --lld iscsi --op new --mode logicalunit  --tid 1 --lun 1 -b /dev/myvg/iscsi1

tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.4.0/24

步骤四:通过配置文件实现iSCSI服务

1)修改配置文件

[root@svr5 ~]# vim /etc/tgt/targets.conf

<target  iqn.2015-04.com.tarena.www:iscsi2 >

     # List of files to export as LUNs

     backing-store /dev/myvg/iscsi2            //定义存储设备

     initiator-address 192.168.4.0/24        //定义ACL

</target>

2)重启计算机,验证服务是否开机有效

[root@svr5 ~]# reboot

步骤五:客户端访问

1)客户端安装软件

[root@pc205 ~]# yum -y install iscsi-initiator-utils

2)客户端探测服务器共享

[root@pc205 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.4.5:3260

3)客户端挂载iSCSI共享

[root@pc205 ~]# iscsiadm -m node -T \

>iqn.2015-04.com.tarena.www:iscsi1 \

>-p 192.168.4.5:3260 –l

[root@pc205 ~]# iscsiadm -m node -T \

>iqn.2015-04.com.tarena.www:iscsi2 \

>-p 192.168.4.5:3260 –l

4)分区、格式化、挂载

[root@pc205 ~]# fdisk –cul                //查看挂载的iSCSI共享盘

[root@pc205 ~]# parted /dev/sdb mklabel gpt

[root@pc205 ~]# parted /dev/sdb mkpart primary 1 800

[root@pc205 ~]# parted /dev/sdc mklabel gpt

[root@pc205 ~]# parted /dev/sdc mkpart primary 1 800

[root@pc205 ~]# mount /dev/sdb1  /mnt

2 编写udev规则

2.1 问题

编写udev规则,实现以下目标:

当插入一个U盘时,该U盘自动出现一个链接称为udisk

U盘上的第1个分区名称为udisk1,以此类推

终端上出现提示”udisk plugged in”

2.2 方案

对于Linux kernel 2.6及更新的操作系统版本udev是系统的设备管理器,udev会分析sysfs的数据,并根据自己的udev规则,实现如下功能:

处理设备命名

决定要创建哪些设备文件或链接

决定如何设置属性

决定触发哪些事件

udev默认规则存放在/etc/udev/rules.d目录下,通过修改次目录下的规则实现设备的命名、属性、链接文件等。

Udev规则文件,常见指令操作符如表-2所示。

表-2 udev常见指令操作符

 

udev常用替代变量:

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

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

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

%%%符号本身

2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:编写udev规则

1)查看设备属性

代码

2)编写udev规则文件

[root@svr5 ~]# vim  /etc/udev/rules.d/70-usb.rules

SUBSYSTEM=="block",ENV{DEVTYPE}="disk",KERNEL=="sdb",ENV{ID_VENDOR}=="TOSHIBA",SYMLINK="udisk",RUN+="/usr/bin/wall udisk plugged in"

SUBSYSTEM=="block",ACTION=="add",KERNEL=="sdb[0-9]",ENV{ID_VENDOR_ID}=="0930",ENV{DEVTYPE}=="partition",NAME="udisk%n"

步骤二:添加设备测试结果

点击VMware“虚拟机“菜单,在”可移动设备“菜单下,找到自己的U盘设备,点击”连接“与”断开“,测试自己的udev规则是否成功。

3 配置并访问NFS共享

3.1 问题

利用NFS机制发布2个共享目录,要求如下:

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

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

从客户机访问NFS共享:

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

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

为访问NFS共享目录 /usr/src 配置触发挂载,挂载点为 /misc/nfsdir

3.2 方案

使用2台RHEL6虚拟机,其中一台作为NFS共享服务器(192.168.4.5)、另外一台作为测试用的Linux客户机(192.168.4.205),如图-2所示。

 

-2

NFS共享的配置文件:/etc/exports 。

配置记录格式:文件夹路径 客户地址1(控制参数.. ..) 客户地址2(.. ..) 。

3.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:配置NFS服务器,发布指定的共享

1)确认服务端程序、准备共享目录

软件包nfs-utils用来提供NFS共享服务及相关工具,而软件包rpcbind用来提供RPC协议的支持,这两个包在RHEL6系统中一般都是默认安装的:

[root@svr5 ~]# rpm  -q  nfs-utils  rpcbind

nfs-utils-1.2.3-39.el6.x86_64

rpcbind-0.2.0-11.el6.x86_64

根据本例的要求,需要作为NFS共享发布的有/root、/usr/src这两个目录:

[root@svr5 ~]# 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/

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

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

[root@svr5 ~]# vim  /etc/exports

/root           192.168.4.205(rw,no_root_squash)

/usr/src        192.168.4.0/24(ro)

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

依次启动rpcbiind、nfs服务:

[root@svr5 ~]# service  rpcbind  restart  ;  chkconfig  rpcbind  on

停止 rpcbind:                                             [确定]

正在启动 rpcbind:                                         [确定]

 

[root@svr5 ~]# service  nfs  restart  ;  chkconfig  nfs  on

.. ..

启动 NFS 服务:                                            [确定]

关掉 NFS 配额:                                            [确定]

启动 NFS mountd:                                          [确定]

启动 NFS 守护进程:                                        [确定]

正在启动 RPC idmapd:                                      [确定]

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

[root@svr5 ~]# showmount  -e  localhost

Export list for localhost:

/usr/src 192.168.4.0/24

/root    192.168.4.205

步骤二:从客户机访问NFS共享

1)启用NFS共享支持服务

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

[root@pc205 ~]# service  rpcbind  restart  ;  chkconfig  rpcbind  on

停止 rpcbind:                                             [确定]

正在启动 rpcbind:                                         [确定]

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

[root@pc205 ~]# showmount  -e  192.168.4.5

Export list for 192.168.4.5:

/usr/src 192.168.4.0/24

/root    192.168.4.205

3)从客户机192.168.4.205访问两个NFS共享,并验证权限

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

[root@pc205 ~]# mkdir  /root5                          //建立挂载点

[root@pc205 ~]# mount  192.168.4.5:/root  /root5          //挂载NFS共享目录

[root@pc205 ~]# df  -hT  /root5                          //确认挂载结果

Filesystem        Type  Size  Used Avail Use% Mounted on

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

 

[root@pc205 ~]# cd  /root5                              //切换到挂载点

[root@pc205 root5]# echo "NFS Write Test" >  pc205.txt     //测试写入文件

[root@pc205 root5]# cat pc205.txt                      //测试查看文件

NFS Write Test

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

[root@pc205 ~]# mkdir  /mnt/nfsdir                      //建立挂载点

[root@pc205 ~]# mount  192.168.4.5:/usr/src  /mnt/nfsdir/      //挂载NFS共享目录

[root@pc205 ~]# df  -hT  /mnt/nfsdir/                          //确认挂载结果

Filesystem           Type  Size  Used Avail Use% Mounted on

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

 

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

[root@pc205 nfsdir]# ls                                  //读取目录列表

debug  install.log  kernels  test.txt

 

[root@pc205 nfsdir]# echo  "Write Test."  >  pc205.txt  //尝试写入文件失败

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

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

[root@svr5 ~]# mkdir  /root5

[root@svr5 ~]# mount  192.168.4.5:/root  /root5    

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

4)为NFS共享/usr/src添加触发挂载

要求的触发挂载点为/misc/nfsdir,其中/misc为autofs服务默认监控的文件夹,只需修改/etc/auto.misc文件,添加nfsdir的挂载设置即可:

[root@pc205 ~]# vim  /etc/auto.misc

.. ..

nfsdir         -fstype=nfs,ro          192.168.4.5:/usr/src

确保重载autofs服务:

[root@pc205 ~]# service  autofs  restart  ;  chkconfig  autofs  on

停止 automount:                                           [确定]

正在启动 automount:                                       [确定]

然后ls检查预期的挂载点,应该显示远程NFS共享/usr/src目录的内容,表示针对此NFS共享的触发挂载设置成功:

[root@pc205 ~]# ls  /misc/nfsdir                      //查看以触发挂载操作

debug  install.log  kernels  test.txt

 

[root@pc205 ~]# df  -hT  /misc/nfsdir/              //确认触发结果

Filesystem           Type  Size  Used Avail Use% Mounted on

192.168.4.5:/usr/src nfs    50G   15G   33G  31% /misc/nfsdir

4 部署Multipath多路径环境

4.1 问题

通过Multipath,实现以下目标:

在共享存储服务器上配置iSCSI,为应用服务器共享存储空间

应用服务器上配置iSCSI,发现远程共享存储

应用服务器上配置Multipath,将相同的共享存储映射为同一个名称

4.2 方案

配置2台虚拟机,每台虚拟机均为三块网卡:

eth0用作网络通信

eth1eth2用于iSCSI存储

具体配置如表-3所示

-3 各节点IP地址配置

 

4.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:存储节点上添加额外的磁盘

使用VMware软件新建(或修改)虚拟机,为虚拟机额外添加一块硬盘。

步骤二:存储节点上安装并配置共享存储

1)安装target软件

打开命令行终端,执行以下命令:

[root@storage ~]# vim /etc/tgt/targets.conf

添加以下内容:

<target iqn.2016-05.cn.tedu.storage>

        backing-store /dev/sdb1

        initiator-address 192.168.1.10

        initiator-address 192.168.2.10

</target>

2)启动服务并查看结果

[root@storage ~]# service tgtd start

[root@storage ~]# chkconfig tgtd on

[root@storage ~]# tgt-admin -s

Target 1: iqn.2016-05.cn.tedu.storage

    System information:

        Driver: iscsi

        State: ready

    I_T nexus information:

    LUN information:

        LUN: 0

            Type: controller

            SCSI ID: IET     00010000

            SCSI SN: beaf10

            Size: 0 MB, Block size: 1

            Online: Yes

            Removable media: No

            Prevent removal: No

            Readonly: No

            Backing store type: null

            Backing store path: None

            Backing store flags:

        LUN: 1

            Type: disk

            SCSI ID: IET     00010001

            SCSI SN: beaf11

            Size: 2147 MB, Block size: 512

            Online: Yes

            Removable media: No

            Prevent removal: No

            Readonly: No

            Backing store type: rdwr

            Backing store path: /dev/sdb1

            Backing store flags:

    Account information:

    ACL information:

        192.168.1.10

        192.168.2.10

注意以上的输出,正确的结果必须有LUN1,它记录的是共享磁盘信息。下面的ACL指的是该共享存储允许哪些应用服务器使用。

步骤三:在应用服务器上安装并配置iSCSI客户端

1)安装客户端软件

[root@srv0 yum.repos.d]# yum list | grep iscsi

iscsi-initiator-utils.x86_64           6.2.0.873-14.el6                   Server

[root@srv0 yum.repos.d]# yum install -y iscsi-initiator-utils

2)发现存储服务器的共享磁盘

因为有两条链路都可以连接到共享存储,所以需要在两条链路上都发现它。

[root@srv0 桌面]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.1.20 --discover

正在启动 iscsid:                                          [确定]

192.168.1.20:3260,1 iqn.2016-05.cn.tedu.storage

[root@srv0 桌面]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.2.20 --discover

192.168.2.20:3260,1 iqn.2016-05.cn.tedu.storage

[root@srv0 桌面]#

3)登陆共享存储

只需要将iscsi服务重启就可以自动登陆。在login之前,只能看到本地的存储,登陆之后,将会多出两块新的硬盘。

[root@srv0 ~]# lsblk

NAME                        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT

sda                           8:0    0   200G  0 disk

├─sda1                        8:1    0   500M  0 part /boot

└─sda2                        8:2    0 199.5G  0 part

  ├─VolGroup-lv_root (dm-0) 253:0    0    50G  0 lvm  /

  ├─VolGroup-lv_swap (dm-1) 253:1    0   3.9G  0 lvm  [SWAP]

  └─VolGroup-lv_home (dm-2) 253:2    0 145.6G  0 lvm  /home

sr0                          11:0    1   3.6G  0 rom  /media/cdrom

 

[root@srv0 ~]# service iscsi restart

停止 iscsi:                                               [确定]

正在启动 iscsi:                                           [确定]

[root@srv0 ~]# lsblk

NAME                        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT

sda                           8:0    0   200G  0 disk

├─sda1                        8:1    0   500M  0 part /boot

└─sda2                        8:2    0 199.5G  0 part

  ├─VolGroup-lv_root (dm-0) 253:0    0    50G  0 lvm  /

  ├─VolGroup-lv_swap (dm-1) 253:1    0   3.9G  0 lvm  [SWAP]

  └─VolGroup-lv_home (dm-2) 253:2    0 145.6G  0 lvm  /home

sr0                          11:0    1   3.6G  0 rom  /media/cdrom

sdb                           8:16   0     2G  0 disk

sdc                           8:32   0     2G  0 disk

[root@srv0 ~]#

4)设置开机自启动

iscsi用于自动login远程存储,iscsid是守护进程。

[root@srv0 ~]# chkconfig iscsid on

[root@srv0 ~]# chkconfig iscsi on

步骤四:配置Multipath多路径

1)安装多路径软件包

[root@srv0 ~]# yum list | grep multipath

device-mapper-multipath.x86_64         0.4.9-87.el6                       Server

device-mapper-multipath-libs.i686      0.4.9-87.el6                       Server

device-mapper-multipath-libs.x86_64    0.4.9-87.el6                       Server

[root@srv0 ~]# yum install -y device-mapper-multipath

2)生成配置文件

[root@srv0 ~]# mpathconf --user_friendly_names n

此处的选项是不使用系统默认的命名方法,共享存储在生产环境下很有可能是多台应用服务器共同使用。如果使用系统默认命名方法,每台应用服务器为共享存储起的名字不一定相同,这将给管理员带来很大的使用上的不便。关闭系统默认命名方法,共享存储的名字由管理员手工指定。

3)获取wwid

登陆共享存储后,系统多了两块硬盘,这两块硬盘实际上是同一个存储设备。应用服务器使用哪个都可以,但是如果使用sdb时,sdb对应的链路出现故障,它不会自动切换到sdc。

为了能够实现系统自动选择使用哪条链路,需要将这两块磁盘绑定为一个名称。通过磁盘的wwid来判定哪些磁盘是相同的。

取得一块磁盘wwid的方法如下:

[root@srv0 ~]# scsi_id --whitelisted --device=/dev/sdb

1IET     00010001

[root@srv0 ~]#

4)修改配置文件

首先声明获取wwid的方法:

[root@srv0 ~]# vim /etc/multipath.conf

defaults {

        user_friendly_names no

        getuid_callout          "/lib/udev/scsi_id --whitelisted --device=/dev/%n"

}

然后在文件的最后加入多路径声明,如果哪个存储设备的wwid和第(3)步获取的wwid一样,那么,为其取一个别名,叫mpatha。

multipaths {

    multipath {

        wwid    "1IET     00010001"

        alias   mpatha

    }

}

步骤五:启用Multipath多路径,并测试

1)启动Multipath,并设置为开机启动

[root@srv0 ~]# service multipathd start

正在启动守护进程multipathd:                               [确定]

[root@srv0 ~]# chkconfig multipathd on

2)检查多路径设备文件

如果多路长设置成功,那么将在/dev/mapper下面生成名为mpatha的设备文件:

[root@srv0 ~]# ls /dev/mapper/

control  mpatha  VolGroup-lv_home  VolGroup-lv_root  VolGroup-lv_swap

3)对多路径设备文件执行分区、格式化、挂载操作

[root@srv0 ~]# fdisk -cu /dev/mapper/mpatha

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel with disk identifier 0x205c887e.

Changes will remain in memory only, until you decide to write them.

After that, of course, the previous content won't be recoverable.

 

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

 

Command (m for help): n      #创建分区

Command action

   e   extended

   p   primary partition (1-4)

p                      #分区类型为主分区

Partition number (1-4): 1      #分区编号为1

First sector (2048-4194303, default 2048):   #起始扇区回车

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303):  #回车

Using default value 4194303

 

Command (m for help): w       #保存并退出

The partition table has been altered!

 

Calling ioctl() to re-read partition table.

新的分区名称应该是/dev/mapper/mpathap1,如果该文件不存在,则执行以下命令进行配置的重新载入:

[root@srv0 ~]# partprobe ; multipath -rr

Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (设备或资源忙).  As a result, it may not reflect all of your changes until after reboot.

Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)/dev/sr0 已按照只读方式打开。

Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)/dev/sr0 已按照只读方式打开。

Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)/dev/sr0 已按照只读方式打开。

Warning: WARNING: the kernel failed to re-read the partition table on /dev/sr0 (无效的参数).  As a result, it may not reflect all of your changes until after reboot.

reload: mpatha (1IET     00010001) undef IET,VIRTUAL-DISK

size=2.0G features='0' hwhandler='0' wp=undef

|-+- policy='round-robin 0' prio=1 status=undef

| `- 34:0:0:1 sdb 8:16 active ready running

`-+- policy='round-robin 0' prio=1 status=undef

  `- 33:0:0:1 sdc 8:32 active ready running

[root@srv0 ~]# ls /dev/mapper/    #再次查看,将会看到新的分区

control  mpatha  mpathap1  VolGroup-lv_home  VolGroup-lv_root  VolGroup-lv_swap

[root@srv0 ~]#

创建目录并挂载:

[root@srv0 ~]# mkfs.ext4 /dev/mapper/mpathap1

[root@srv0 ~]# mkdir /data

[root@srv0 ~]# mount /dev/mapper/mpathap1 /data/

[root@srv0 ~]# df -h /data/

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/mpathap1  2.0G  3.0M  1.9G   1% /data

 

posted @ 2018-04-26 16:11  腐种发芽  阅读(475)  评论(0编辑  收藏  举报