使用Docker部署分布式文件系统FastDFS

易小灯塔
2018-04-12 / 0 评论 / 2,080 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2018年04月12日,已超过2420天没有更新,若内容或图片失效,请留言反馈。

使用Docker部署分布式文件系统FastDFS


FastDFS是一个开源的轻量级分布式文件系统, 功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。比较适合文件比较多的网站, FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,FastDFS比较适合以中小文件为载体的在线服务,比如跟NGINX(APACHE)配合搭建图片服务器。

FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。

跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。

FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。

上传交互过程

  1. client询问tracker上传到的storage,不需要附加参数;
  2. tracker返回一台可用的storage;
  3. client直接和storage通讯完成文件上传。

下载交互过程

  1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
  2. tracker返回一台可用的storage;
  3. client直接和storage通讯完成文件下载。

client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用


FastDFS的安装和使用

FastDFS可以使用docker进行部署

要完全使用fastdfs的功能的话,需要安装配置的文件实在太多,包括libcomment,nginx,fdfs-nginx-module等其他依赖模块,都需要浪费很多的时间和精力,为了更好的解决这个问题,提高效率,利用doker技术完成对fastdfs镜像的构建,效率提高上百倍,几分钟内就搞定了

获取镜像可以通过拉取镜像命令获得

docker image pull delron/fastdfs 

或者直接下载好镜像文件载入

docker load -i 文件路径/fastdfs_docker.tar 

镜像的下载地址

链接: https://pan.baidu.com/s/1jQ3zIPVIPuAtAcCA3Dqm0w 密码: 2ghn

加载好镜像后,就可以开启运行FastDFS的tracker和storage了。

运行Docker

开启docker服务

docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker

# 将fastDFS tracker运行目录映射到本机的 /var/fdfs/tracker目录中 

查看tracker是否运行起来

docker container ls 

如果要停止tracker服务,可以执行如下命令

docker container stop tracker 

重新运行tracker,可以执行如下命令

docker container start tracker 

运行storage

开启storage服务

docker run -dti --network=host --name storage -e TRACKER_SERVER=192.168.25.170:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage

# RACKER_SERVER=本机的ip地址:22122 本机ip地址注意不要使用127.0.0.1
# 将fastDFS storage运行目录映射到本机的/var/fdfs/storage目录中 

查看storage是否运行起来

docker container ls 

要停止storage服务,可以执行如下命令

docker container stop storage 

重新运行storage,可以执行如下命令

docker container start storage 

注意:如果无法重新运行,可以删除/var/fdfs/storage/data目录下的fdfs_storaged.pid 文件,然后重新运行storage。


FastDFS客户端的使用

FastDFS的Python客户端

安装

pip install fdfs_client-py
pip install mutagen
pip isntall requests 

使用ipython调试时发现语法错误如下

In [1]: from fdfs_client.client import Fdfs_client
Traceback (most recent call last):

  File "/home/moin/.virtualenvs/py3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2963, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)

  File "<ipython-input-1-a4c50acd3321>", line 1, in <module>
    from fdfs_client.client import Fdfs_client

  File "/home/moin/.virtualenvs/py3/lib/python3.6/site-packages/fdfs_client/client.py", line 12, in <module>
    from fdfs_client.utils import *

  File "/home/moin/.virtualenvs/py3/lib/python3.6/site-packages/fdfs_client/utils.py", line 230
    print get_file_ext_name('/bc.tar.gz')
                          ^
SyntaxError: invalid syntax

In [2]: 

应该是因为是python2的版本所以在python3下使用所以出现语法错误, 所以在网上找了个修改好的版本, 使用python3的可以下载下面这个安装使用

链接: https://pan.baidu.com/s/1eMD1MBhJifpG_APd7wOJgw 密码: tpzk

pip install fdfs_client-py-master.zip 


使用

使用FastDFS客户端,需要有配置文件。在你的项目目录下新建fastdfs目录,将新建client.conf配置文件放到这个目录中。

# 连接超时
connect_timeout=30

# 网络超时
network_timeout=60

# 存储日志文件的路径
base_path=FastDFS客户端存放日志文件的目录

#  trackerserver 地址设置 
tracker_server=运行tracker服务的机器ip:22122

# 日志级别:
log_level=info

# if use connection pool
use_connection_pool = false

# connections whose the idle time exceeds this time will be closed
connection_pool_max_idle_time = 3600

# if load FastDFS parameters from tracker server
load_fdfs_parameters_from_tracker=false

# if use storage ID instead of IP address
use_storage_id = false

# specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V4.05
storage_ids_filename = storage_ids.conf

#HTTP settings
http.tracker_server_port=80 

上传文件需要先创建fdfs_client.client.Fdfs_client的对象,并指明配置文件,如

from fdfs_client.client import Fdfs_client
client = Fdfs_client('你的项目/fastdfs/client.conf') 

通过创建的客户端对象执行上传文件的方法

client.upload_by_filename(文件名)
或
client.upload_by_buffer(文件bytes数据) 

进入ipython进行测试

In [1]: from fdfs_client.client import Fdfs_client
In [2]: client = Fdfs_client('你的项目/fastdfs/client.conf')
In [3]: client.upload_by_filename('/home/moin/Pictures/01.jpg') # 上传一张图片
getting connection
<fdfs_client.connection.Connection object at 0x7f7500da5dd8>
<fdfs_client.fdfs_protol.Tracker_header object at 0x7f7500da5cf8>
Out[4]: # 出现这个代表上传成功
{'Group name': 'group1',
 'Remote file_id': 'group1/M00/00/00/wKgZqluQiseARzRPAAISqdrr6pM456.jpg',
 'Status': 'Upload successed.',
 'Local file name': '/home/moin/Pictures/01.jpg',
 'Uploaded size': '132.00KB',
 'Storage IP': '192.168.25.170'} 

然后访问地址就可以看到刚刚上传的照片了

http://192.168.25.170:8888/group1/M00/00/00/wKgZqluQiseARzRPAAISqdrr6pM456.jpg
# 服务器地址:8888/文件路径 

image-20201108073312037

0

评论 (0)

取消