Multipath
/ eth0 1.1.1.129 1.1.1.128 eth0 \
客户端 switch 服务器
\ eth1 2.2.2.129 2.2.2.128 eth1 /
服务端不用变化。只需要把target配置好,并且启动服务。
一、客户端:
1、确定安装多路径的相关服务。
# rpm -qa | grep mapper
device-mapper-multipath-0.4.7-30.el5
device-mapper-1.02.32-1.el5
device-mapper-event-1.02.32-1.el5
2、取消所有之前旧的target登录
# iscsiadm -m node -u
删除所有之前曾经登录过记录,这样就不会重启iscsi服务的时候自动登录。
# iscsiadm -m node --op delete
3、建立iscsi接口
# iscsiadm -m iface -I iface0 --op new
# iscsiadm -m iface -I iface1 --op new
# ls /var/lib/iscsi/ifaces/
iface0 iface1
# iscsiadm -m iface -I iface0 --op update -n iface.net_ifacename -v eth0
# iscsiadm -m iface -I iface1 --op update -n iface.net_ifacename -v eth1
4、发现资源。
# iscsiadm -m discovery -t st -p 1.1.1.128 -I iface0 -I iface1
1.1.1.128:3260,1 iqn.2011-09.com.upl:qdisk
1.1.1.128:3260,1 iqn.2011-09.com.upl:qdisk
1.1.1.128:3260,1 iqn.2011-09.com.upl:webdata
1.1.1.128:3260,1 iqn.2011-09.com.upl:webdata
5、登录资源
# iscsiadm -m node -T iqn.2011-09.com.upl:webdata -l
# fdisk -l
6、启动多路径服务
# chkconfig multipathd on
所有参数的配置文件,并且带有简单的参数说明
/usr/share/doc/device-mapper-multipath-0.4.7/multipath.conf.annotated
修改多路径配置文件:
# vim /etc/multipath.conf
blacklist {
devnode "sda" <---把sda放在黑名单,不对他进行判断
}
# service multipathd start
# fdisk -l
....
Disk /dev/dm-0: 3010 MB, 3010420224 bytes
# ls /dev/mapper/mpath0 <---生成的映射设备,访问它就是会访问对应的不同路径的相同存储
# multipath -ll 《--查看多路径设备
mpath0 (S_beaf21) dm-0 IET,VIRTUAL-DISK
[size=2.8G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=1][active]
\_ 19:0:0:1 sdc 8:32 [active][ready]
\_ round-robin 0 [prio=1][enabled]
\_ 20:0:0:1 sdb 8:16 [active][ready]
分区并且格式化使用
如果发现不了新的分区的映射设备文件,重启iscsi服务。
# ls /dev/mapper/mpath0p1 <---新分的第一个分区
multipaths {
multipath {
wwid S_beaf21
alias iscsi_webdata
path_grouping_policy multibus
path_checker readsector0
path_selector "round-robin 0"
failback manual
rr_weight priorities
no_path_retry 5
}
}
# service multipathd restart
# service iscsi restart
# multipath -ll
iscsi_webdata (S_beaf21) dm-0 IET,VIRTUAL-DISK
[size=2.8G][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=2][active]
\_ 24:0:0:1 sdd 8:48 [active][ready]
\_ 23:0:0:1 sde 8:64 [active][ready]
# ll /dev/mapper/
control iscsi_webdata iscsi_webdatap1
# fdisk /dev/mapper/iscsi_webdata
验证多路径特性:
可以避免路径的单点故障
断掉服务器或者客户端的其中一个网卡
# multipath -ll 需要等待一小会才能输出信息
sdd: checker msg is "readsector0 checker reports path is down"
iscsi_webdata (S_beaf21) dm-0 IET,VIRTUAL-DISK
[size=2.8G][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=1][active]
\_ 24:0:0:1 sdd 8:48 [failed][faulty] 《----
\_ 23:0:0:1 sde 8:64 [active][ready]
数据可以继续访问
恢复该网卡,稍等一会,链路自动恢复
# multipath -ll
iscsi_webdata (S_beaf21) dm-0 IET,VIRTUAL-DISK
[size=2.8G][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=2][active]
\_ 24:0:0:1 sdd 8:48 [active][ready] 《----
\_ 23:0:0:1 sde 8:64 [active][ready]
断开另外一个网络,重新验证数据是否可以访问,步骤重复上面的。
========================================
使用GNBD实现共享存储
1、服务端和客户端都需要安装以下软件:
# yum install gnbd kmod-gnbd -y
2、服务端导出一个设备,作为共享存储
# gnbd_serv -n <---非集群模式,不能用在集群环境,不需要依赖集群相关套件。
# gnbd_export -v -e gnbdstorage -c -d /dev/sda5
# gnbd_export -v -l
Server[1] : gnbdstorage
--------------------------
file : /dev/sda5
sectors : 4016187
readonly : no
cached : yes
timeout : no
3、配置客户端
# modprobe gnbd
# gnbd_import -v -i 1.1.1.129 -n
gnbd_import: created gnbd device gnbdstorage
gnbd_recvd: gnbd_recvd started
# gnbd_import -v -l -n
Device name : gnbdstorage
----------------------
Minor # : 0
sysfs name : /block/gnbd0
Server : 1.1.1.129
Port : 14567
State : Close Connected Clear
Readonly : No
Sectors : 4016187
# ls /dev/gnbd/gnbdstorage 《--导入之后的设备文件
/dev/gnbd/gnbdstorage
直接格式化,挂载使用
=========================================
MFS (Moose FS)分布式文件系统
分为:
元数据服务器
保存元数据,协调整个分布式系统的工作,包括文件的存放,系统的容量,节点协调等等。
元数据日志服务器
专门用于对元数据服务器的元数据进行备份的,备份的元数据以日志的形式存在。
chunk服务器(数据节点)
真正保存数据的节点,直接提供存储容量
MFS优势:
1、轻松的扩容,扩展存储网络
2、数据高可用,可以对数据做镜像保存。
3、通过回收站避免文件误删除。
4、提升读写性能。
致命的缺点:
只有一个元数据服务器,所以存在单点故障。
准备:
hosts:
10.1.1.21 master.upl.com master
10.1.1.26 log.upl.com log
10.1.1.23 chk1.upl.com chk1
10.1.1.24 chk2.upl.com chk2
10.1.1.25 chk3.upl.com chk3
[..超级块,保存元数据....|.......数据区域.............]
一、安装元数据服务器
# useradd -u 88 -s /sbin/nologin mfs
# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
# make && make install
配置目录:
/usr/local/mfs/etc
# cp mfsmaster.cfg.dist mfsmaster.cfg
# vim mfsmaster.cfg
EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg
DATA_PATH = /usr/local/mfs/var/mfs 《--元数据保存的路径
# vim /usr/local/mfs/etc/mfsexports.cfg
* / rw,alldirs,maproot=mfs
准备一个空的源被数据文件,该文件在服务停止之后会保存运行的一些重要数据。
# cp metadata.mfs.empty metadata.mfs
启动
# /usr/local/mfs/sbin/mfsmaster start
...
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly <---正确的启动
关闭:
# /usr/local/mfs/sbin/mfsmaster stop
z
注意:千万不能直接kill进程,否则启动时候会报错,需要执行恢复。
看日志
# tail -f /var/log/messages
二、安装元数据日志服务器
1、安装
# useradd -u 88 -s /sbin/nologin mfs
# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
# make && make install
2、配置
# vim mfsmetalogger.cfg
DATA_PATH = /usr/local/mfs/var/mfs
META_DOWNLOAD_FREQ = 6 《--每6小时下载一次元数据日志文件
MASTER_HOST = 10.1.1.21
启动
# /usr/local/mfs/sbin/mfsmetalogger start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
验证已经建立连接
# lsof -i:9419
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mfsmaster 2179 mfs 7u IPv4 9221 TCP *:9419 (LISTEN)
mfsmaster 2179 mfs 10u IPv4 9961 TCP master.upl.com:9419->log.upl.com:43065 (ESTABLISHED) ####
三、搭建数据节点
1、安装
# useradd -u 88 -s /sbin/nologin mfs
# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
# make && make install
2、配置
# vim mfschunkserver.cfg
MASTER_HOST = 10.1.1.21
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg
定义把那些目录加入分布式文件系统中。
# vim mfshdd.cfg
/mfs <---该目录专门用于分布式文件系统,该目录可是一个普通的目录,也可以挂载到一个独立设备。一般会挂载到独立设备。
# mount /dev/sda5 /mfs
# chown mfs:mfs /mfs
# /usr/local/mfs/sbin/mfschunkserver start
...
mfschunkserver daemon initialized properly
四、搭建mfs客户端
1、安装依赖模块fuse
# ./configure && make && make install
# modprobe fuse
# vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
# source /etc/profile
编译安装mfs客户端
# ./configure --prefix=/usr/local/mfs --enable-mfsmount
# make && make install
挂载测试
# /usr/local/mfs/bin/mfsmount /mnt/mfs -H 10.1.1.21
# df -h
文件系统 容量 已用 可用 已用% 挂载点
mfs#10.1.1.21:9421 19G 0 19G 0% /mnt/mfs
# /usr/local/mfs/bin/mfsfileinfo /mnt/mfs/hosts
/mnt/mfs/hosts:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 10.1.1.23:9422
# /usr/local/mfs/bin/mfsfileinfo /mnt/mfs/fstab
/mnt/mfs/fstab:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 10.1.1.25:9422
验证数据冗余:
1)设定文件保存的副本数量
查看文件的设定保存的副本的数量
# /usr/local/mfs/bin/mfsgetgoal /mnt/mfs/hosts
/mnt/mfs/hosts: 1
# /usr/local/mfs/bin/mfssetgoal 3 /mnt/mfs/hosts
/mnt/mfs/hosts: 3
# /usr/local/mfs/bin/mfssetgoal 2 /mnt/mfs/fstab
/mnt/mfs/fstab: 2
耐心等待一小会,文件才会在各个数据节点之间同步成功
# /usr/local/mfs/bin/mfsfileinfo /mnt/mfs/hosts
/mnt/mfs/hosts:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 10.1.1.23:9422
copy 2: 10.1.1.24:9422
copy 3: 10.1.1.25:9422
# /usr/local/mfs/bin/mfsfileinfo /mnt/mfs/fstab
/mnt/mfs/fstab:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 10.1.1.24:9422
copy 2: 10.1.1.25:9422
验证回收站的作用:
1、设定元数据服务器,允许客户端去访问元数据。
因为恢复操作需要访问元数据才行。
# vim mfsexports.cfg
* . rw
# /usr/local/mfs/sbin/mfsmaster restart
2、挂载元数据。
# /usr/local/mfs/bin/mfsmount /mnt/mfsmeta/ -m -H 10.1.1.21
3、“误操作”删除文件
被删除的文件默认会放到回收站保留一天时间
# /usr/local/mfs/bin/mfsgettrashtime /mnt/mfs/hosts
/mnt/mfs/hosts: 86400
设定文件的保留时间
# /usr/local/mfs/bin/mfssettrashtime 120 /mnt/mfs/hosts
# /usr/local/mfs/bin/mfssettrashtime 300 /mnt/mfs/fstab
删除文件:
# cd /mnt/mfsmeta
# ls
reserved trash
# pwd
/mnt/mfsmeta/trash
[root@dev trash]# ls
00000002|hosts 00000003|fstab undel
恢复文件
# mv '00000003|fstab' undel/
[root@dev trash]# ls
00000002|hosts undel
如果不小意外结束元数据服务器的进程,如何恢复?
# /usr/local/mfs/sbin/mfsmetarestore -a
重新启动就可以了。