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
重新启动就可以了。