【云存储】Go项目实践(Fedora、GlusterFS、ownCloud)

实验目标与要求

  • 在 Vmware 中,用 Fedora-Server-dvd-x86_64-31-1.9.iso 安装 2 至 4 个 Fedora 虚拟机
  • 分别在每个节点上部署 Fedora
  • 在 Linux 系统上实现 Native 挂载;实验验证 GlusterFS 集群
  • 在其中一台服务器上搭建 ownCloud,创建自己的私人云盘系统

实验1:搭建GlusterFS

实验步骤

第一步:下载镜像并安装虚拟机

下载Fedora-server镜像,并在VMWare中使用该镜像安装2个Fedora虚拟机。

此步骤应注意:创建Fedora虚拟机后,要为每个Fedora虚拟机额外增加一块磁盘,结果如图1.1所示。

新增磁盘e

图 1.1 通过cat /proc/partitions指令查看新增的磁盘sdb(只展示一个虚拟机的结果)

第二步:固定虚拟机IP地址

使用ifconfig命令查看当前网卡名称:ens33以及虚拟机当前IP地址192.168.253.130192.168.253.131

使用如下指令,修改ens33的配置,包括添加IPADDRNETMASKGATEWAYDNS1以及修改BOOTPROTOONBOOT等信息,来固定IP,

cd /etc/sysconfig/network-scripts
ls
vi ifcfg-ens33

随后重启虚拟机。

第三步:格式化、挂载分区(bricks)

从第一步我们知道分区位于/dev/sdb目录下,因此在每个节点(即Fedora虚拟机)上执行以下命令,

mkfs.xfs -i size=512 /dev/sdb
mkdir -p /data/brick1
echo '/dev/sdb /data/brick1 xfs defaults 1 2'>>/etc/fstab
mount -a && mount

从图1.2中可以看出已经挂载成功。

分区挂载成功

图 1.2 通过df -l指令查看是否挂载成功(只展示一个虚拟机的结果)

第四步:安装GlusterFS

在每个节点上执行以下指令安装GlusterFS,

yum install glusterfs-server

安装结束后使用以下指令启动GlusterFS管理守护进程,

service glusterd start

然后使用以下指令查看结果,如图1.3所示,

service glusterd status
启动GlusterFS管理守护进程

图 1.3 通过service glusterd status指令查看结果(只展示一个虚拟机的结果)

第五步:配置可信任池

首先使用iptables -F命令关闭每个虚拟机的防火墙,

然后在其中一个节点(192.168.253.130)上,使用如下命令探测其他所有机器,

gluster peer probe 192.168.253.131

配置结果如图1.4所示。

配置可信任池

图 1.4 可信任池配置结果

第六步:建立GlusterFS卷

首先在所有节点上使用以下指令创建相应目录,

mkdir /data/brick1/gv0

其次在任意一个节点上运行以下指令,

gluster volume create gv0 replica 2 192.168.253.130:/data/brick1/gv0 192.168.253.131:/data/brick1/gv0

gluster volume start gv0

然后使用以下指令确认卷的信息,结果如图1.5所示

gluster volume info
确认卷gv0的信息

图 1.5 创建、运行并确认卷gv0的信息

最后在每个节点上使用以下指令来开启rpcbind服务并重启glusterd服务

service glusterd stop
service rpcbind start
service glusterd start
第七步:测试GlusterFS卷

在服务节点1上使用以下指令挂载创建出来的gv0卷,

mount -t glusterfs 192.168.253.130:gv0 /mnt

随后使用以下指令创建100个文件,

for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/copy-test-$i; done

此时,使用以下指令检查挂载点,可以看到返回了100个文件加上一个.glusterfs目录,如图1.6所示。

检查挂载点返回的文件数量

图 1.6 检查挂载点返回的文件数量

最后,在每个服务节点上执行以下指令,来检查GlusterFS挂载点的内容,

ls -A /data/brcik1/gv0

结果如图1.7所示,可以看到得到的内容是一致的。

检查Gluster挂载点(a) 检查Gluster挂载点(b)

图 1.7 检查每个服务节点上的GlusterFS挂载点

问题及解决方案

  1. 问题描述:修改ifcfg-ens33文件时提示“Can’t open file for writing”。

    解决方案:出现该问题的原因是权限不够。因此,将当前用户加入到sudo配置文件中,然后在命令前添加sudo即可解决该问题。

  2. 问题描述:格式化分区时提示“Permission denied.”。

    解决方案:切换成root再执行命令。

  3. 问题描述:挂载分区时提示“mount: wrong fs type, bad option, bad superblock on /dev/sdb”。

    解决方案:使用dmesg | tail指令查看系统日志后发现是因为挂载分区的指令中的defaults少打了一个s,修正后即可以正常挂载分区。

实验小结

在该部分实验中,我顺利地在两台装有Fedora Server的VMware虚拟机上安装并部署了GlusterFS,并实现了Native挂载,最后通过验证证明了我搭建的GlusterFS集群的正确性。

通过该部分实验,对GlusterFS这个分布式文件系统有了更深入的了解,通过动手实践体会到了我们可以很简单地通过传统的NFS、SMB/CIFS、FUSE等协议在Linux系统中访问GlusterFS集群。

实验2:搭建ownCloud

实验步骤

准备工作
  1. 利用以下指令关闭防火墙,
systemctl stop firewalld
systemctl disable firewalld
  1. /etc/sysconfig/selinux中的SELINUX设置为disabled以关闭selinux;
  2. 使用yum update指令更新yum源。
第一步:安装ownCloud
  1. 利用以下指令安装samba和httpd,
yum install -y samba
yum install -y hpptd
  1. 安装php7.1

    a) 使用以下指令安装remi源

    yum -y install http://mirrors.tuna.tsinghua.edu.cn/remi/fedora/remi-release-31.rpm
    

    b) 按照指南修改/etc/yum.repos.d/remi.repo

    c) 使用以下指令安装php7.1

    yum -y install --enablerepo=remi php71 php71-php php71-php-opcache php71-php-xml php71- php-mcrypt php71-php-gd php71-php-devel php71-php-mysql php71-php-intl php71-php-mbstring php71-php-zip
    

    最后使用php71 -v指令查看php版本,结果如图2.1所示。

    查看php版本

    图 2.1 查看php版本

  2. 利用以下指令安装mariadb

yum install -y mariadb mariadb-server
  1. 利用以下指令设置samba开机启动
 systemctl start smb.service 
 systemctl enable smb.service
  1. 利用以下指令设置mariadb开机启动
 systemctl start mariadb.service 
 systemctl enable mariadb.service
  1. 利用以下指令修改/var/www/html权限
chown apache.apache /var/www/html/

至此,在虚拟机外部打开浏览器,输入虚拟机的 IP 地址,可以看到apache测试页,如图2.2所示。

apache测试页面

图 2.2 apache测试页面

  1. 安装ownCloud

    切换到/var/www/html目录下,使用以下指令下载ownCloud并解压,

    wget https://download.owncloud.org/community/owncloud-10.2.0.tar.bz2
    tar -xjvf owncloud-10.2.0.tar.bz2
    

    使用以下指令拷贝index.php到html目录下,

    cp /var/www/html/owncloud/index.php /var/www/html/
    

    然后使用以下指令修改权限

    chmod 777 /var/www/html/owncloud
    
  2. 使用以下指令重启httpd

 systemctl restart httpd.service 

至此,使用 ps -aux | grep httpd指令查看结果如图2.3所示

ps -aux | grep httpd

图 2.3 ps -aux | grep httpd指令结果

第二步:注册测试

在虚拟机外部打开浏览器,输入192.168.253.130/owncloud

首先设置管理员密码,如图2.4所示;

然后登陆管理员账号,进入主页面,并创建一个名为“学号加姓名”的文件夹,如图2.5所示

ownCloud reg

图 2.4 设置ownCloud管理员密码

ownCloud reg

图 2.5 ownCloud主页面

问题及解决方案

  1. 问题:打开ownCloud页面时提示"Service Unavailable - The server is temporarily unable to service your request due to maintenance downtime or capacity problems.

    解决方案yum -y install --enablerepo=remi php71-php-fpm

实验小结

在该部分的实验中,我完成了ownCloud的下载、安装以及配置,成功地搭建起了属于自己的私人云盘。

思考与拓展实践

完成GLuster的其余6种卷的创建和使用

1. 分布式卷(Distribute Volume)

简介

该模式下,并没有对文件进行分块处理,而是通过hash算法分布到所有brick server上,只是扩大了磁盘空间,类似window中的跨区卷。具有以下特点:文件分布在不同的服务器,不具备冗余性;更容易且廉价地扩展卷的大小;单点故障会造成数据丢失,不具备容错性;依赖底层的数据保护。其实分布式卷就是GlusterFS的默认模式。

创建和使用

使用以下指令来创建、查看和测试条带卷:

# 创建
mkdir /data/brick1/gv1	# 所有服务节点均要执行
gluster volume create gv1 192.168.253.130:/data/brick1/gv1 192.168.253.131:/data/brick1/gv1
gluster volume start gv1

# 查看
gluster volume info gv1

# 使用
mount -t glusterfs 192.168.253.130:gv1 /mnt
for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/name-copy-test-$i; done

# 检查
ls -A /data/brcik1/gv1

从图3.1中可以看出,我们已经成功创建了Type为Distribute的卷;

从图3.2中可以看出,我们可以看到服务节点1存储的是编号为奇数的文件,而服务节点2存储的是编号为偶数的文件

创建并查看分布式卷

图 3.1 创建并查看分布式卷

图 3.2 创建并查看分布式卷

2. 条带卷(Stripe Volume)

简介

在该模式下,根据偏移量将文件分成 N N N 块( N N N个条带节点),轮询地存储在每个Brick Server节点。节点把每个数据块都作为普通文件存入本地文件系统,通过扩展属性记录总块数和每块的序号。在配置时指定条带数必须等于卷中Brick所包含的存储服务器数,在存储大文件时,性能尤为突出,但是不具备冗余性。

创建和使用

在执行创建和使用条带卷的指令时,发现gluster报错“stripe option not supported”,如图3.3所示。在网上查阅资料后发现,由于条带卷的缺点太过于严重,现在已经不支持了。

图 3.3 创建条带卷时报错

3. 复制卷(Replica Volume)

简介

在该模式下,同一文件保存一份或多份副本,每个节点上保存相同的内容和目录结构。因为要保存副本,所以磁盘利用率较低,如果多个节点上的存储空间不一致,那么将按照木桶效应取最低节点的容量作为该卷的总容量。复制卷具有冗余性,即使一个节点损坏,也不影响数据的正常使用。

创建和使用

我们在实验1中所创建的卷即为复制卷,从图1.7中可以看到两个服务节点中存储的都是相同的内容。

4. 纠错卷(Dispersed Volume)

简介

纠错卷是基于纠错码的一种新类型卷(3.6版本正式发布该特性),类似于RAID5/6。通过配置冗余级别提高可靠性,在保证较高的可靠性同时,可以提升物理存储空间的利用率。

创建和使用

在执行创建和使用条带卷的指令时,发现gluster报错“disperse count must be greater than 2”,如图3.4所示,也就是集群必须有超过2个节点,因此本次实验就不测试了,希望在以后有机会的时候能够进行测试。

图 3.3 创建纠错卷时报错

5. 复合卷(Dispersed Volume)

简介

包括分布式条带卷、分布式复制卷、条带复制卷、分布式条带复制卷等,都混合了上述各种基础卷的优点。

创建和使用

因为符合卷要求集群节点数量必须超过4个、甚至8个,因此本次实验就不测试了,希望在以后有机会的时候能够进行测试

如何结合 GlusterFS 七种卷的特性,为 ownCloud 用户存储的文档提供高可靠和高可用的服务?

GlusterFS 支持七种卷,即分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、 条带复制卷和分布式条带复制卷。

  • 分布式卷:文件通过HASH算法分布到所有Brick Server上,扩大了磁盘空间,更容易且廉价地扩展卷的大小,但不具备容错能力;
  • 条带卷:数据被分割成更小块分布到块服务器群中的不同条带区,分布减少了负载且更小的文件加速了存取的速度,但没有数据冗余性;
  • 复制卷:卷中所有的服务器均保存一个完整的副本,卷的副本数量可由客户创建的时候决定,具备冗余性;
  • 分布式条带卷:兼顾分布式卷和条带卷的功能,主要用于大文件访问处理;
  • 分布式复制卷:兼顾分布式卷和复制卷的功能,主要用于需要冗余的情况下;

我们可以看到,这七种卷可以满足不同应用对高性能、高可用的需求。因此,要为 ownCloud 用户存储的文档提供高可靠和高可用的服务,我们必须要确定用户的需求,合理地为用户创建符合需求的卷。

总结

通过本次GlusterFS & ownCloud项目实践,我对云存储关键技术有了更深入的认识。特别是通过自己亲自动手搭建,我对GlusterFS这样的分布式文件系统的工作原理、操作步骤有了很清晰的认识。

我认为本次GlusterFS & ownCloud项目实践是非常有意义的。在日常的学习生活中,我们不免需要借助百度网盘等公共云盘服务,深受下载速度缓慢的困扰。而通过本次实践,我才发现其实创建自己的私人云盘只需要些许闲置的硬件和时间精力就可以完成了,极大地拓展了我的视野,相信在本次实践中学到的知识一定能在将来派上用场!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值