高可用分布式文件系统的组建
传统的单机版Web应用的文件管理方式,例如图片和视频文件的上传和使用等,大多是将文件存储在服务器本地,但这种管理方式无法应用在微服务应用中。一方面,微服务应用发布在分布式环境中,随时随地都可以进行多副本的部署,所以它的媒体文件必须存放在一个统一的地方。另一方面,建立一个独立而高效的文件系统,也是高可用、高性能应用平台的一个有机组成部分。
如果我们租用云服务,就可以使用云服务商提供的分布式文件系统,例如,阿里云或腾讯云的对象存储OSs。
下面,为了加深读者对分布式文件系统的理解,我们使用开源的FastDFS构建一个高可用的分布式文件系统。
FastDFS架构
FastDFS是一个轻量级的分布式文件系统,使用FastDFS可以搭建一个高可用且可持续扩展的分布式文件系统。
FastDFS由跟踪器(Tracker)和存储节点(Storage)两部分组成。跟踪器用来调度来自客户端的请求,并记录存储服务器的信息。存储节点用来保存文件及其属性,同时进行文件同步处理工作。文件的存储还使用分组(或分卷)的方式进行组织。搭建两个以上的跟踪器就可以组成一个高可用的分布式文件系统,如图14-1所示。
基于图14-1所示的架构设计,我们将使用四台服务器搭建一个高可用的分布式文件系统,代码如下所示。
代码语言:javascript复制Tracker Server1: 10.10.10.22
Tracker Server2:10.10.10.32
Storagel:10.10.10.23
Storage2:10.10.10.33
在这种架构设计中,增加存储节点即可提高和扩展文件的存取性能。在安装了分布式文件系统之后,即可使用Nginx为 Web端的文件访问搭建一个负载均衡服务。
本章会用到下列所示的安装包,读者可自行从网上下载。
代码语言:javascript复制libfastcommon-1.0.35.tar.gz
fastdfs-5.10.tar.gz
pcre-8.40.tar.gz
nginx-1.10.3.tar.gz
FastDFS的安装
下列安装过程在四个服务器中都要完成。假设把下载的安装包都放在目录/opt 中。
首先,创建FastDFS 和 Nginx用户:
代码语言:javascript复制useradd fastdfs -M -s/sbin/nologinuseradd nginx一M -s /sbin/nologin
然后,安装编译环境:
代码语言:javascript复制yum -y install gcc gcc gcc-c openssl openssl-devel pcre pcre-deve
安装libfastcommon,按顺序执行下列命令:
代码语言:javascript复制tar -zxVf libfastcommon-1.0.35.tar.gz
cd libfastcommon-1.0.35
./make.sh
./make.sh install
完成之后,建立下列所示的软链接,以便安装程序能够找到相关的库文件:
代码语言:javascript复制ln -sv /usr/include/fastcommon /usr/local/include/fastcommon
ln -sv /usr/include/fastdfs /usr/local/include/fastdfs
ln -sv /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
按顺序执行下列命令,安装FastDFS:
代码语言:javascript复制tar -zxv fastdfs-5.10.tar.gz
cd fastdfs-5.10
./make.sh
./make.sh install
安装结束后将输出成功标志,接下来配置各个服务。
跟踪服务器配置
在Tracker Server机器上,创建数据存储目录:
代码语言:javascript复制mkdir -p /data/fastdfs/tracker
按顺序执行下列命令,编辑tracker.conf配置:
代码语言:javascript复制cd /etc/fdfs
cp tracker.conf.sample tracker.conf
vi /etc/fdfs/tracker.conf
在配置文件中编辑下列各项配置:
代码语言:javascript复制#绑定IP地址,如果为空,则表示使用本机IP地址bind addr=
#端口
port=22122#连接超时时间
connect timeout=30#日志数据路径
base path=/data/fastdfs/tracker#上传文件时选择group 的方法
#0:轮询,1:指定组,2:选择剩余空间最大store lookup=2
#如果上面的配置是1,那么这里必须指定组名store group-group2
#上传文件时选择server的方法
#0:轮询,1:按IP地址排序,2:按权重排序store server=0
#storage上预留的空间
reserved storage space =10%http.server port=8080
保存并退出,然后使用下列命令启动Tracker Server:
代码语言:javascript复制service fdfs trackerd start
使用下列命令查看Tracker Server 监听的端口:
代码语言:javascript复制netstat -unltplgrep fdfs
存储节点配置
在 Storage服务器上,创建如下所示的数据存储目录:
代码语言:javascript复制mkdir -p/data/fdfs storage/base
mkdir -p /data/fdfs storage/storage0
mkdir -p /data/fdfs_storage/storage1
按顺序执行下列命令,编辑存储节点配置:
代码语言:javascript复制cd /etc/fdfs
cp storage.conf.sample storage.conf
vi storage.conf
按下列命令编辑各项内容:
代码语言:javascript复制#storage server所属组名group name=group1
#绑定IP地址
bind addr=
#storage server的端口port=23000
#连接超时时间
connect timeout=30#日志数据路径
base path=/data/fdfs storage/base#storage path 的个数
store pathcount=2
store path0=/data/fdfs storage/storage0store pathl=/data/fdfs storage/storagel#跟踪服务器
tracker server=10.10.10.22:22122tracker server=10.10.10.32:22122
保存编辑后,使用下列命令启动存储节点:
代码语言:javascript复制service fdfs_storaged start
使用下列命令检查服务运行状态:
代码语言:javascript复制/usr/bin/fdfs monitor /etc/fdfs/storage.conf
上传文件测试
现在回到Tracker Server机器上(如IP地址为10.10.10.22),使用下列方法进行上传文件测试。
按顺序执行如下命令,编辑客户端配置:
代码语言:javascript复制cd /etc/fdfs
cp client.conf.sample client.conf
vi /etc/fdfs/client.conf
修改下列各项内容:
代码语言:javascript复制base path=/data/fastdfs/tracker #Tracker服务器上的文件路径
tracker server=10.10.10.22:22122 #Tracker服务器的IP地址和端口号
http.tracker_server port=8080 # Tracker服务器上的HTTP端口号,必须和Tracker的
#设置一样
假如在/opt 中存在一个图片文件为1.png,则可以使用如下命令上传文件:
代码语言:javascript复制/usr/bin/fdfs upload file /etc/fdfs/client.conf /opt/1.png
若上传成功,则返回如下所示的文件信息:
代码语言:javascript复制group1/M00/00/00/wKgBGFk3kUqACu9JAAGmMprynZs674.png
本文给大家讲解的内容是微服务架构实战:高可用分布式文件系统的组建,FastDFS架构与安装、 跟踪服务器配置、存储节点配置、上传文件测试
- 下篇文章给大家讲解的是微服务架构实战:Nginx的安装及负载均衡配置、开机启动;
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!
本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。