执子之手

与子偕老


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

  • 搜索
close

在Mac上如何安装FastDFS

时间: 2017-06-18   |   分类: 开发     |   阅读: 2243 字 ~5分钟   |   访问: 0

项目中用到了FastDFS来做文件存储。最近重构的时候,因为经常处于移动办公的状态,所以访问公司的服务器不是很方便,所以感觉有必要在本机上搭建一套FastDFS的测试环境。

FastDFS是什么?

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。 FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。 FastDFS里面有两种角色:Tracker、Storage。Tracker主要做调度工作,在访问上起负载均衡的作用。Storage存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件meta data是文件属性列表,可以包含多个键值对。

1. Docker方式

因为之前用Docker用的比较多,所以首先想到的是用Docker来运行FastDFS。上hub.docker.io上找了找镜像,最后选择了luhuiguo/fastdfs这个镜像。很快写了一个docker-compose脚本:

 1version: '3.3'
 2services:
 3  tracker:
 4    image: luhuiguo/fastdfs
 5    ports:
 6      - "22122:22122"
 7    command:
 8      - tracker
 9    volumes:
10      # let container use same timezone as host
11      - /etc/localtime:/etc/localtime
12      - /opt/docker/fastdfs/tracker:/var/fdfs
13  storage:
14    image: luhuiguo/fastdfs
15    ports:
16      - "23000:23000"
17    links:
18      - tracker
19    command:
20      - storage
21    environment:
22      TRACKER_SERVER: 192.168.255.199:22122
23      GROUP_NAME: group1
24    volumes:
25      - /etc/localtime:/etc/localtime
26      - /opt/docker/fastdfs/storage:/var/fdfs

执行起来,看起来也是正常的。但是使用程序访问的时候却失败了。抛出了异常:java.net.SocketTimeoutException: connect timed out。通过跟踪代码发现了原因:使用docker的时候,storage向tracker汇报的地址是docker内部的地址,而这个地址在Mac本机是无法直接访问的。通过代码访问Tracker的时候返回的地址就是docker内部的地址,自然会出现SocketTimeoutException了。

1.1 network host模式

因为知道docker有host这一网络模式,可以使docker容器使用与宿主机一样的网络。感觉上这样或许可以解决上面的问题,而且镜像的说明中也提到了这一点。于是加上了network_mode: host。但是启动之后发现还是一样的错误。经过搜索找到了原因:

**Mac上的Docker实际上是通过虚拟化方式运行在Mac系统上的。通过xhyve技术模拟出来一台Linux主机,然后在其中跑Docker进程。当使用host模式跑的时候,docker使用的是这个虚拟出来的Linux主机的网络作为Host网络,无法直接使用Mac主机的网络。因此依然无法连接是正常的。**也就是说,在Mac主机上,host这种网络是无法使用的。

2. 本机编译执行

既然使用Docker无法运行FastDFS,那只能通过编译源码来运行了。最新版本的FastDFS已经可以直接在Mac上编译了(不需要修改源码)。因此这种方法也不难。主要步骤如下:

2.0 关闭系统保护

从OSX 10.11开始,Mac对关键目录进行了保护(例如:/bin, /usr/bin等)。而要编译FastDFS却是要安装文件到/usr/bin等目录下,所以首先需要禁用系统保护。关闭的方法如下:

  • 重启系统,重启的过程中按住Command+R进入Recovery模式;
  • 从菜单中选择“终端”或“Terminal”进入命令行模式;
  • 输入命令csrutil disable关闭保护模式,然后输入reboot重启系统即可。

2.1 libfastcommon

FastDFS依赖于libfastcommon,因此需要首先编译、安装libfastcommon,步骤如下:

1unzip libfastcommon-1.0.35.zip
2cd libfastcommon-1.0.35
3./make.sh
4./make.sh install

2.2 fastdfs

FastDFS源码通过Github下载。下面以最新的5.10为例。编译、安装步骤如下:

1unzip fastdfs-5.10.zip
2cd fastdfs-5.10
3./make.sh
4./make.sh install

安装成功后,FastDFS相关的可执行文件被安装到/usr/bin目录下。相关的配置文件被放在/etc/fdfs下,这和在Linux上安装的结果是一样的。

2.3 启动tracker

下面首先启动Tracker服务。首先准备存储数据的目录,Tracker将会在该目录中保存运行时信息以及日志文件:

1mkdir -p /opt/tools/fastdfs/tracker
2chown -R cap:cap /opt/tools/fastdfs/tracker

然后准备配置文件,从sample文件复制一份以便修改:

1cd /etc/fdfs
2cp tracker.conf.sample tracker.conf

然后修改配置文件/etc/fdfs/tracker.conf,在Mac上单机安装只需要修改base_path,修改成上面刚刚创建的目录:

1base_path=/opt/tools/fastdfs/tracker

然后启动fastdfs,启动完成之后应该占用了22122端口:

1/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
2netstat -nl | grep 22122

启动服务使用如下命令:

1/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start

停止服务可以使用如下命令:

1/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop

2.4 启动storage

首先还是准备目录供Storage节点使用:

1mkdir -p /opt/tools/fastdfs/storage
2chown -R cap:cap /opt/tools/fastdfs/storage

准备配置文件:

1cp storage.conf.sample storage.conf

修改配置文件:

1# 基本路径,日志等存储在该目录下
2base_path=/opt/tools/fastdfs/storage
3# 存储目录,可以存在多个。FastDFS会按照调度方法使用这些不同的目录。默认使用Round Robin调度方法。
4store_path0=/opt/tools/fastdfs/storage
5# 如果部署集群的话,只要多写几个tracker_server就可以了。
6tracker_server=192.168.255.199:22122

启动服务可以使用如下命令:

1/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start

停止服务命令:

1/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop

附录A. 参考资料

  • FastDFS
  • FastDFS on Github
  • FastDFS分布式文件系统集群安装与配置
  • Unable to connect to container using host network from host
  • How to turn off system integrity protection on OS X
#Mac# #FastDFS#
在Mac上运行SOAPUI 5.3.0
Nginx配置导致的SSL证书认证失败
  • 文章目录
  • 站点概览
Orchidflower

Orchidflower

Do one thing at a time, and do well.

77 日志
6 分类
84 标签
GitHub 知乎 OSC 豆瓣
  • 1. Docker方式
    • 1.1 network host模式
  • 2. 本机编译执行
    • 2.0 关闭系统保护
    • 2.1 libfastcommon
    • 2.2 fastdfs
    • 2.3 启动tracker
    • 2.4 启动storage
  • 附录A. 参考资料
© 2009 - 2024 执子之手
Powered by - Hugo v0.113.0
Theme by - NexT
ICP - 鲁ICP备17006463号-1
0%