小镇最近在研究存储方案,实乃刚需,至于为什么,请看下图:
当时小镇选择了万由nas+win10+单盘+goodsync备份,当时天真的我以为8tb的单盘一辈子都用不完。至于当时为何选择看上去如此low的方案?因为简单好用,如果nas机器坏掉,把硬盘拔出插到硬盘底座就能用windows立马取出数据。(平民用用这种方案挺好,有可靠性,防误删,但是容量不能横向扩展,并)
但是!
小镇的数据不够放了
于是,小镇逛遍了各大论坛,去youtube上看别人的解决方案(请看LinusTechTips和45drives的频道),最后选择了以下方案:
最终方案:
硬件:两个万由nas机箱(随意)+交换机一台(万兆最好,千兆ok)+各种硬件(要求ecc内存,其他随意,保证ecc开启并且使用就行)
软件:
1、centos : CentOS 是一个基于Red Hat Linux 提供的可自由使用源代码的企业级Linux发行版本。
2、ZFS : 最初是由Sun公司为Solaris 10操作系统开发的文件系统。作为OpenSolaris开源计划的一部分,ZFS于2005年11月发布,被Sun称为是终极文件系统,经历了 10 年的活跃开发。而最新的开发将全面开放,并重新命名为 OpenZFS
3、GlusterFS:一款开源的分布式存储软件。
4、samba、nfs等一系列共享软件。
原理:
裸机系统centos,单机的存储靠zfs的raidz保证性能和可靠性,单点故障靠glusterfs这款分布式存储软件来保证整体存储的可用性。glusterfs目录可以靠samba服务器分享出去。
安装以及配置过程(vmware虚拟机上进行)
安装:
1、安装Centos:下载iso,地址:https://www.centos.org/download/,用utraiso写入u盘,引导U盘启动,点击下一步直到安装完成。
2、安装zfs:
1)yum localinstall --nogpgcheck
http://mirror.centos.org/centos/7/extras/x86_64/Packages/epel-release-7-9.noarch.rpm
2)yum localinstall--nogpgcheck http://download.zfsonlinux.org/epel/zfs-release.el7.noarch.rpm
3)yum install kernel-devel zfs
4)yum install "kernel-devel-uname-r == $(uname -r)"
5) dkms remove -m zfs -v 0.6.0.90 --all
dkms remove -m spl -v 0.6.0.90 --all
dkms add -m spl -v 0.6.0.90
dkms add -m zfs -v 0.6.0.90
dkms install -m spl -v 0.6.0.90
dkms install -m zfs -v 0.6.0.90
(这里请将0.6.0.90换成自己的zfs版本)
6)modprobe zfs
3、安装glusterfs:
1)yum install centos-release-gluster
2)yum install -y glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
4、安装samba(其他的nfs等不一一列举):
1)yum install samba samba-client
配置:
1、配置zfs:小镇这里在虚拟机里面虚拟除了两个非os的额外硬盘,现实中请插入硬盘,尽量保证是企业级硬盘且硬盘大小一致。先列出硬盘:fdisk -l
Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
/dev/sda1 * 2048 616447 307200 83 Linux
/dev/sda2 616448 4812799 2098176 82 Linux swap / Solaris
/dev/sda3 4812800 83886079 39536640 83 Linux
Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
小镇这里额外的两个硬盘是sdb和sdc。然后小镇使用镜像模式建立zpool池(4盘推荐raidz,更高推荐raidz2。raidz损失一个盘的容量用校验值来保证冗余,mirror依靠两两之间镜像),然后使用zpool status查看pool的状态,pool状态正常后挂载到自定义目录。
zpool create -f diskstation mirror sdb sdc
zpool status
zfs set mountpoint=/mnt/diskstation diskstation
2、配置glusterfs:
第一步关闭防火墙。
systemctl stop firewalld.service
systemctl disable firewalld.service
然后启用gluster服务:
service glusterd start
现在可以开始将其他存储节点加入gluster集群了:小镇这里两个节点,一个192.168.1.130,一个1.131。添加好后用gluster peer status查看状态。
gluster peer probe 192.168.1.130
gluster peer probe 192.168.1.131
gluster peer status
创建gluster volume,gluster总共有6中volume模式,具体请看http://blog.163.com/szy8706@yeah/blog/static/62713185201351510303223/
小镇这里使用复制卷:
gluster volume create zty-volume replica 2 transport tcp 192.168.1.130:/mnt/diskstation 192.168.1.131:/mnt/diskstation
最后将gluster存储挂载到相应的目录
mount -t glusterfs 192.168.1.130:zty-volume /opt/zty
这时候用df -h查看挂
载情况
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 38G 2.1G 36G 6% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.7M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 297M 114M 184M 39% /boot
tmpfs 781M 0 781M 0% /run/user/0
diskstation 20G 4.0M 20G 1% /mnt/diskstation
192.168.1.130:zt-volume 39G 13M 39G 1% /opt/zty
3、配置samba
假设给我家里人用做共享,总共4种用户角色,mom,dad,myown,guestz。其中的权限分配为,dad可以访问/opt/zty/dad,mom可以访问/opt/zty/mom,我可以访问所有目录,guestz只能访问/opt/zty/guestz。
创建相应用户和用户组:
useradd mom
useradd dad
useradd guestz
useradd zhentianyu
groupadd god
usermod -g god zhentianyu
/etc/samba/smb.conf的配置如下:我的角色是zhentianyu,属于god用户组。
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[printers]
comment = All Printers
path = /var/tmp
printable = Yes
create mask = 0600
browseable = No
[print$]
comment = Printer Drivers
path = /var/lib/samba/drivers
write list = root
create mask = 0664
directory mask = 0775
[Mom]
comment = AA
path = /opt/zty/mom
public = no
valid users = @god,mom
write list = @god,mom
printable = no
[Dad]
comment = AA
path = /opt/zty/dad
public = no
valid users = @god,dad
write list = @god,dad
printable = no
[Guest]
comment = AA
path = /opt/zty/guestz
public = no
valid users = @god,guestz
write list = @god,guestz
printable = no
[Myown]
comment = AA
path = /opt/zty/myown
public = no
valid users = @god,zhentianyu
write list = @god,zhentianyu
printable = no
最后检验成果!在windows中访问\\192.168.1.130
我是用的mom的账号登录的,尝试访问Dad试下:
提示拒绝访问并且要求重新输入账号。
这时我关闭192.168.1.131这台服务器,传输文件并没有中断,速度都没有变化!
然后再131这台服务器中删除一个硬盘,传输文件也没有中断,速度也没有变化!可靠性很高!
ok!一切结束了。企业一样,只不过用更加正规的一系列硬件。(推荐45drives的机箱,10t的企业级硬盘,hba卡尽量用高质量的)交换机请采用万兆交换机,服务器与交换机之间做链路聚合提高传输速度。