网络存储分类:
按网络拓扑分类:
1、DAS:直接附加存储;优点:技术简单、传输速率高;缺点:存储设备与磁盘相互绑定。
2、NAS:网络附加存储;优点:技术相对简单、不要求存储设备直连本机,只需网络访问即可;缺点:存储速率较慢。
3、SAN:存储区域网络;优点:存储安全性较高、存储速率较高;缺点:造价昂贵、技术难度相对较高。
按存储技术分类:
1、块存储(硬盘、U盘等);优点:可以通过raid/lvm等技术提供保护、可独立使用;缺点:不利于共享。
2、文件存储/网络存储(samba、nfs、ftp);优点:构建资金较低、可在不同主机之前共享存储;缺点:读写速率低,传输速率慢。
3、对象存储/分布式存储/存储桶(重点是:将元数据和真实数据分别存储多台服务器上);优点:读写效率高、可在不同主机之间共享存储;缺点:造价昂贵、技术实现难度较高。
常用模式:
1、块存储+DAS:底层技术
2、块存储+NAS
3、块存储+SAN
4、文件存储+NAS:NFS、Samba、ftp
5、对象存储+SAN:MFS、RHCS、ceph等
文件存储之NFS:依赖RPC协议传输
nfs-utils:NFS服务主程序包
rpcbind:centos6和7的RPC主程序包(centos5为portmap)
server端NFS配置:
/etc/exports:nfs配置文件;格式:
NFS共享目录 NFS客户端地址1(参数1,参数2...) NFS客户端地址2(参数1,参数2...) #可以多行表示多个共享
常用参数:
rw:可读写。需要目录权限共同参与
ro:只读
sync:文件同时写入硬盘和内存
async:文件暂存于内存,而不是直接写入内存
no_root_squash:允许root权限
root_squash:将root用户的权限映射为匿名用户权限(nobody或者nfsnobody)
all_squash:所有用户都映射为匿名用户权限(nobody或者nfsnobody)
anonuid:匿名用户的uid
anongid:匿名用户的gid
示例:
server端
~]# yum -y install rpcbind nfs-utils
~]# mkdir -pv /nfs1 /nfs2
~]# chown -R nobody:nobody /nfs1 /nfs2
~]# vim /etc/exports
/nfs1 192.168.0.0/24(rw,no_root_squash,async) 172.20.120.0/24(rw,no_root_squash,async)
/nfs2 172.20.120.0/24(ro,no_root_squash,async)
~]# systemctl restart rpcbind
~]# systemctl restart nfs
clinet端
~]# yum -y install nfs-utils
~]# showmount -e 172.20.120.182
~]# mkdir -pv /tmp/nfs[1,2]
~]# mount -t nfs 172.20.120.182:/nfs1 /tmp/nfs1
~]# mount -t nfs 172.20.120.182:/nfs2 /tmp/nfs2
分布式存储之MFS(MooseFS):一个具备冗余容错功能的分布式网络文件系统。
特性:
缺点:
MFS组件说明:
1、master(managin server):分发用户请求和存储元数据
2、metalogger(metadata backup servers):备份master变化的metadata信息日志文件
3、data(chunk server):存储数据文件实体
4、client(client server):挂载并使用mfs文件系统的客户端;需要系统支持fuse
master主配置文件:mfsmaster.cfg
示例:1台master,1台metalogger,2台data,1台client
此处示例为moosefs-3.0.84;下载地址:https://github.com/moosefs/moosefs/releases/tag/v3.0.84
master设置:
~]# tar xvf moosefs-3.0.84.tar.gz -C /usr/local/
~]# cd /usr/local/moosefs-3.0.84/
moosefs-3.0.84]# useradd -s /sbin/nologin -M mfs
moosefs-3.0.84]# yum -y groupinstall "Development Tools"
moosefs-3.0.84]# yum -y install zlib-devel
moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
moosefs-3.0.84]# make && make install
moosefs-3.0.84]# chown -R mfs:mfs /usr/local/mfs/
moosefs-3.0.84]# ln -sv /usr/local/mfs/bin/mfscli /usr/local/bin/
moosefs-3.0.84]# ln -sv /usr/local/mfs/sbin/* /usr/local/sbin/
~]# cp -a /usr/local/mfs/etc/mfs/mfsmaster.cfg.sample /usr/local/mfs/etc/mfs/mfsmaster.cfg
~]# cp -a /usr/local/mfs/etc/mfs/mfsexports.cfg.sample /usr/local/mfs/etc/mfs/mfsexports.cfg
~]# vim /usr/local/mfs/etc/mfs/mfsexports.cfg
172.20.120.0/24 . rw,alldirs,maproot=0 #设置MFS挂载权限
~]# cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs #初始化MFS元数据信息文件
可选服务(mfscgiserv):在端口9425开启web监控页面;可用zabbix调用
设置开机自启:
~]# systemctl start moosefs-master moosefs-cgiserv #启动MFS-master服务和mfscgiserv服务
~]# systemctl enable moosefs-master moosefs-cgiserv
附录:centos7 system脚本制作:moosefs-master.service
~]# vim /usr/lib/systemd/system/moosefs-master.service
[Unit]
Description=MooseFS Master server
Wants=network-online.target
After=network.target network-online.target
[Service]
Type=forking
ExecStart=/usr/local/mfs/sbin/mfsmaster -a
ExecStop=/usr/local/mfs/sbin/mfsmaster stop
ExecReload=/usr/local/mfs/sbin/mfsmaster reload
PIDFile=/usr/local/mfs/var/mfs/.mfsmaster.lock
TimeoutStopSec=1800
TimeoutStartSec=1800
Restart=no
[Install]
WantedBy=multi-user.target
附录:centos7 system脚本制作:moosefs-cgiserv.service
~]# vim /usr/lib/systemd/system/moosefs-cgiserv.service
[Unit]
Description=MooseFS CGI server
Wants=network-online.target
After=network.target network-online.target
[Service]
Type=forking
ExecStart=/usr/local/mfs/sbin/mfscgiserv start
ExecStop=/usr/local/mfs/sbin/mfscgiserv stop
PIDFile=/usr/local/mfs/var/mfs/.mfscgiserv.lock
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
metalogger设置:
~]# tar xvf moosefs-3.0.84.tar.gz -C /usr/local/
~]# cd /usr/local/moosefs-3.0.84/
moosefs-3.0.84]# useradd -s /sbin/nologin -M mfs
moosefs-3.0.84]# yum -y groupinstall "Development Tools"
moosefs-3.0.84]# yum -y install zlib-devel
moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
moosefs-3.0.84]# make && make install
moosefs-3.0.84]# chown -R mfs:mfs /usr/local/mfs/
moosefs-3.0.84]# ln -sv /usr/local/mfs/bin/mfscli /usr/local/bin/
moosefs-3.0.84]# ln -sv /usr/local/mfs/sbin/* /usr/local/sbin/
moosefs-3.0.84]# cp -a /usr/local/mfs/etc/mfs/mfsmetalogger.cfg.sample /usr/local/mfs/etc/mfs/mfsmetalogger.cfg
moosefs-3.0.84]# vim /usr/local/mfs/etc/mfs/mfsmetalogger.cfg
META_DOWNLOAD_FREQ = 2 #设置完整同步间隔为2小时
MASTER_HOST = 172.20.120.187 #设置master服务器ip地址
moosefs-3.0.84]# systemctl start moosefs-metalogger #启动服务并开机自启
moosefs-3.0.84]# systemctl enable moosefs-metalogger
moosefs-3.0.84]# lsof -i :9419 #验证是否跟master联系
moosefs-3.0.84]# ls /usr/local/mfs/var/mfs/ #查看元数据信息是否已同步
附录:centos7 system脚本制作:moosefs-metalogger.service
~]# vim /usr/lib/systemd/system/moosefs-metalogger.service
[Unit]
Description=MooseFS Metalogger server
Wants=network-online.target
After=network.target network-online.target
[Service]
Type=forking
ExecStart=/usr/local/mfs/sbin/mfsmetalogger start
ExecStop=/usr/local/mfs/sbin/mfsmetalogger stop
ExecReload=/usr/local/mfs/sbin/mfsmetalogger reload
PIDFile=/usr/local/mfs/var/mfs/.mfsmetalogger.lock
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
chunk server设置:
准备共享的设备,此处为独立的硬盘
~]# mkfs.xfs /dev/vdb1
~]# mkdir -pv /mfs
~]# mount /dev/vdb1 /mfs
~]# chown -R mfs:mfs /mfs
~]# vim /etc/fstab #设置开机挂载
/dev/vdb1 /mfs xfs defaults 0 0
安装配置
~]# tar xvf moosefs-3.0.84.tar.gz -C /usr/local/
~]# cd /usr/local/moosefs-3.0.84/
moosefs-3.0.84]# useradd -s /sbin/nologin -M mfs
moosefs-3.0.84]# yum -y groupinstall "Development Tools"
moosefs-3.0.84]# yum -y install zlib-devel
moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
moosefs-3.0.84]# make && make install
moosefs-3.0.84]# chown -R mfs:mfs /usr/local/mfs/
moosefs-3.0.84]# ln -sv /usr/local/mfs/bin/mfscli /usr/local/bin/
moosefs-3.0.84]# ln -sv /usr/local/mfs/sbin/* /usr/local/sbin/
moosefs-3.0.84]# cp -a /usr/local/mfs/etc/mfs/mfschunkserver.cfg.sample /usr/local/mfs/etc/mfs/mfschunkserver.cfg
moosefs-3.0.84]# vim /usr/local/mfs/etc/mfs/mfschunkserver.cfg
MASTER_HOST = 172.20.120.187 #指定master服务器ip
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg
moosefs-3.0.84]# cp -a /usr/local/mfs/etc/mfs/mfshdd.cfg.sample /usr/local/mfs/etc/mfs/mfshdd.cfg
moosefs-3.0.84]# vim /usr/local/mfs/etc/mfs/mfshdd.cfg
/mfs #指定共享设备
~]# systemctl start moosefs-chunkserver #启动服务并开机自启
~]# systemctl enable moosefs-chunkserver
附录:centos7 system脚本制作:moosefs-chunkserver.service
~]# vim /usr/lib/systemd/system/moosefs-chunkserver.service
[Unit]
Description=MooseFS Chunkserver
Wants=network-online.target
After=network.target network-online.target
[Service]
Type=forking
ExecStart=/usr/local/mfs/sbin/mfschunkserver start
ExecStop=/usr/local/mfs/sbin/mfschunkserver stop
ExecReload=/usr/local/mfs/sbin/mfschunkserver reload
PIDFile=/usr/local/mfs/var/mfs/.mfschunkserver.lock
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
clinet端设置
~]# yum -y install fuse fuse-libs fuse-devel #安装fuse
~]# tar xvf moosefs-3.0.84.tar.gz -C /usr/local/
~]# cd /usr/local/moosefs-3.0.84/
moosefs-3.0.84]# useradd -s /sbin/nologin -M mfs
moosefs-3.0.84]# yum -y groupinstall "Development Tools"
moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver
moosefs-3.0.84]# make && make install
moosefs-3.0.84]# chown -R mfs:mfs /usr/local/mfs/
moosefs-3.0.84]# ln -sv /usr/local/mfs/bin/* /usr/local/bin/
moosefs-3.0.84]# ln -sv /usr/local/mfs/sbin/* /usr/local/sbin/
创建并挂载
~]# mkdir -pv /mfs
~]# mfsmount /mfs/ -H 172.20.120.187
~]# chown -R mfs:mfs /mfs
~]# vim /mfs/1.txt
~]# mfsfileinfo /mfs/1.txt #查看文件信息
开机自动挂载
~]# vim /etc/rc.d/rc.local
/usr/local/bin/mfsmount /mfs -H 172.20.120.187
~]# chmod a+x /etc/rc.d/rc.local
MFS维护操作:
1、在trashtime时间内恢复误删除的文件:(默认误删可恢复时长为1天)
~]# mkdir -pv /mfsback
~]# chown -R mfs:mfs /mfsback
~]# mfsmount -m /mfsback/ -H 172.20.120.187
~]# find /mfsback/ -name "*2.txt" #前提是知道误删文件的名称,此处定位该文件
~]# mv /mfsback/trash/009/00000009\|2.txt /mfsback/trash/undel/
2、快照功能:
~]# mkdir -pv /mfs/mfssnap #要求跟源文件在同一设备上
~]# chown -R mfs:mfs /mfs/mfssnap/
~]# mfsmakesnapshot /mfs/2.txt /mfs/mfssnap/
3、冗余goal设置(默认为2)
~]# mfssetgoal 1 /mfs/1.txt #设置1.txt副本数为1
~]# mfsgetgoal /mfs/1.txt #查看验证
~]# mfsfileinfo /mfs/1.txt
4、还原master
重构master环境(省略)
metalogger端将数据传输到master:
~]# scp /usr/local/mfs/var/mfs/* [email protected]:/usr/local/mfs/var/mfs/
master端恢复和启动:(恢复数据需一定时长)
~]# mfsmaster -a
5、高可用master服务器
块存储之ISCSI:
跟文件文件系统的区别:1、提供块存储;2、传输iscsi指令,效率更高
iSCSI技术在工作形式上分为服务端(target)与客户端(initiator)。
1、iSCSI服务端即用于存放硬盘存储资源的服务器,它作为前面创建的RAID磁盘阵列的存储端,能够为用户提供可用的存储资。
2、iSCSI客户端则是用户使用的软件,用于访问远程服务端的存储资源。
服务端设置:
1、准备共享用的块设备(可以使磁盘、分区、逻辑卷);此处示例为/dev/vdc1分区
2、安装配置target端
~]# yum -y install scsi-target-utils
~]# vim /etc/tgt/conf.d/test.conf 通过配置文件持久化配置
vendor_id hbzh #配置发行商(任意)
lun 1 #配置LUN号
incominguser iscsiuser iscsiuser #配置认证的用户名和密码
initiator-address 172.20.120.0/24 #配置允许的网段
~]# systemctl start tgtd
~]# systemctl enable tgtd
~]# tgtadm -L iscsi -o show -m target #查验配置
客户端设置:
~]# yum -y install iscsi-initiator-utils
~]# vim /etc/iscsi/iscsid.conf
node.session.auth.username = iscsiuser #输入服务器端设置的用户密码
node.session.auth.password = iscsiuser
~]# iscsiadm -m discovery -t st -p 172.20.120.184 #执行发现操作
~]# iscsiadm -m node -T iqn.2020-01.com.nice.www:iscsi.sda --login #登录操作
~]# fdisk -l #查看新增的硬盘信息
后续按操作实体硬盘操作即可(格式化、挂载、使用)
开机自动挂载
~]# vim /etc/fstab
/dev/sda1 /tmp/iscsi xfs _netdev 0 0
~]# systemctl start iscsi
~]# systemctl enable iscsi