FastDFS在Docker集群安装

一、简介

FastDFS是由国人余庆所开发,其项目地址:https://github.com/happyfish100

FastDFS是一个轻量级的开源分布式文件系统,主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。

FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。它只能通过 专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用。准确地讲,Google FS以及FastDFS、mogileFS、 HDFS、TFS等类Google FS都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。

二、分布式文件系统

 

三、FastDFS 架构原理

Client 客户端:上传与下载文件、图片等的客户端

Tracker 调度器:负责维持集群的信息等,例如各group及其内部的storage node,这些信息也是storage node报告所生成;

每个storage node会周期性向tracker发心跳信息

Storage 存储服务器:存储数据。以group为单位进行组织,任何一个storage server都应该属于某个group,一个group应该包含多个storage server;在同一个group内部,各storage server的数据互相冗余

四、文件上传流程

 

 

当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、文件名、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成

五、文件下载流程

六、实战安装

1、环境以及依赖

(1)docker(如果不需要docker容器中操作,可以忽略此步骤)

(2)libfastcommon包(安装FastDFS依赖需要

(3)FastDFS

(4)FastDFS的Nginx模块

(5)Nginx

2、docker安装

(1)安装docker引擎

yum install docker

(2)拉取镜像

docker pull  centos:7

(3)创建容器

docker run -di --name java5-tracker-01 -p 8080:80 centos:7

(4)查看镜像

docker ps -a

3、下载安装包

(1)下载 libfastcommon

https://github.com/happyfish100/libfastcommon/releases

wget https://github.com/happyfish100/libfastcommon/releases/tag/V1.0.39

(2)下载FastDFS

https://github.com/happyfish100/libfastcommon/releases

wget https://github.com/happyfish100/fastdfs/releases/tag/V5.11

(3)下载FastDFS的Nginx模块

https://github.com/happyfish100/fastdfs-nginx-module/releases

wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz

(4)下载Nginx

https://github.com/nginx/nginx/releases

wget http://nginx.org/download/nginx-1.15.6.tar.gz

下载结果:

(5)把下载包拷贝到容器

docker cp nginx-1.15.6.tar.gz java5-tracker-01:/opt
docker cp V1.0.39.tar.gz java5-tracker-01:/opt
docker cp V1.20.tar.gz java5-tracker-01:/opt
docker cp V5.11.tar.gz java5-tracker-01:/opt

(6)登录容器,查看是否拷贝成功

docker exec -it java5-tracker-01 /bin/bash

4、安装

(1)容器里安装依赖

yum -y install zlib zlib-devel  pcre  pcre-devel gcc gcc-c++ openssl  openssl-devel libevent libevent-devel  perl  unzip net-tools wget vim

(2)安装与编译libfastcommon

解压libfastcommon

tar -zxvf V1.0.39.tar.gz

进入解压目录

cd libfastcommon-1.0.39

安装

./make.sh && ./make.sh  install

拷贝 libfastcommon.so 文件至 /usr/lib 目录(新版本不需要此步)

cp  /usr/lib64/libfastcommon.so  /usr/lib/

注:

libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录,所以需要将/usr/lib64下的库文件拷贝至/usr/lib下

(3)安装 FastDFS

解压

tar -zxvf  V5.11.tar.gz

进入解压目录

cd fastdfs-5.11

安装

./make.sh && ./make.sh install

拷贝/root/opt/fastdfs-5.11/conf目录下的文件到/etc/fdfs目录下

cp fastdfs-5.11/conf/* /etc/fdfs/

(4)tracker server配置

修改/etc/fdfs/tracker.conf

vim /etc/fdfs/tracker.conf

修改内容如下 :

base_path=/zhuzq/server/fastdfs/tracker

创建tracker服务器上面的目录

mkdir /zhuzq/server/fastdfs/tracker -p

(5)storage server配置

修改/etc/fdfs/storage.conf

vim /etc/fdfs/storage.conf

修改内容如下:

#指定storage的组名

group_name=group1

#日志与数据路径

base_path=/zhuzq/server/fastdfs/storage

#M00虚拟磁盘路径

store_path0=/zhuzq/server/fastdfs/storage

#配置tracker服务器IP和端口 

tracker_server=172.18.0.3:22122

创建storage服务器上面的目录

mkdir /zhuzq/server/fastdfs/storage -p

(6)安装FastDFS的Nginx模块

解压

tar -zxvf V1.20.tar.gz

进入解压目录

cd fastdfs-nginx-module-1.20/src

修改

vim config

修改前的内容如下

ngx_addon_name=ngx_http_fastdfs_module

if test -n "${ngx_module_link}"; then
    ngx_module_type=HTTP
    ngx_module_name=$ngx_addon_name
    ngx_module_incs="/usr/local/include"
    ngx_module_libs="-lfastcommon -lfdfsclient"
    ngx_module_srcs="$ngx_addon_dir/ngx_http_fastdfs_module.c"
    ngx_module_deps=
    CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
    . auto/module
else
    HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
    NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
    CORE_INCS="$CORE_INCS /usr/local/include"
    CORE_LIBS="$CORE_LIBS -lfastcommon -lfdfsclient"
    CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
fi

**其中第6行和第15行要进行修改,修改后的内容如下:

ngx_addon_name=ngx_http_fastdfs_module

if test -n "${ngx_module_link}"; then
    ngx_module_type=HTTP
    ngx_module_name=$ngx_addon_name
    ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
    ngx_module_libs="-lfastcommon -lfdfsclient"
    ngx_module_srcs="$ngx_addon_dir/ngx_http_fastdfs_module.c"
    ngx_module_deps=
    CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
    . auto/module
else
    HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
    NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
    CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
    CORE_LIBS="$CORE_LIBS -lfastcommon -lfdfsclient"
    CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
fi

拷贝mod_fastdfs.conf

fastdfs-nginx-module-1.20/src/mod_fastdfs.conf拷贝至/etc/fdfs/

cp mod_fastdfs.conf /etc/fdfs/

修改mod_fastdfs.conf

vim /etc/fdfs/mod_fastdfs.conf

文件内容修改如下:

base_path=/zhuzq/server/fastdfs/storage

tracker_server=172.18.0.3:22122

url_have_group_name = true

store_path0=/zhuzq/server/fastdfs/storage

(7)安装Nginx

解压

tar -xf nginx-1.15.6.tar.gz

进入解压目录

cd nginx-1.15.6/

编译与安装

./configure \
--prefix=/zhuzq/servier/nginx  \
--pid-path=/var/run/nginx/nginx.pid  \
--lock-path=/var/lock/nginx.lock  \
--error-log-path=/var/log/nginx/error.log  \
--http-log-path=/var/log/nginx/access.log  \
--http-client-body-temp-path=/var/temp/nginx/client  \
--http-proxy-temp-path=/var/temp/nginx/proxy  \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi  \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi  \
--http-scgi-temp-path=/var/temp/nginx/scgi  \
--with-http_gzip_static_module  \
--add-module=/opt/fastdfs-nginx-module-1.20/src

注意:

prefix=/zhuzq/servier/nginx中的/zhuzq/servier/nginx指的是要安装的nginx的路径

add-module=/opt/fastdfs-nginx-module-1.20/src中的路径指的是fastdfs-nginx-module模块的解压缩路径

创建目录

mkdir /zhuzq/servier -p
mkdir /var/temp/nginx -p

安装

make & make install

修改nginx.conf 配置

vim /zhuzq/servier/nginx/conf/nginx.conf

说明:

location /group1/M00/:以/group1/M00/开头的请求,才会正常使用Nginx模块ngx_fastdfs_module下载访问图片。

5、启动

(1)启动tracker

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

(2)启动storage

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

(3)启动Nginx

/zhuzq/servier/nginx/sbin/nginx

6、上传测试图片

(1)进入/etc/fdfs目录

cd /etc/fdfs

(2)修改配置

vim  /etc/fdfs/client.conf

(3)执行上传图片

/usr/bin/fdfs_test  /etc/fdfs/client.conf  upload  /etc/fdfs/anti-steal.jpg 

说明:

http://172.18.0.3/group1/M00/00/00/rBIAA10p-66AZpEpAABdrSqbHGQ206_big.jpg

因为这个是容器,浏览器测试

http://外网IP:8080/group1/M00/00/00/rBIAA10p-66AZpEpAABdrSqbHGQ206_big.jpg

8080是服务器映射容器80端口

七、集群搭建

(1)架构设计

2个tracker服务器,4台storage服务器,分为2组

(2)创建镜像

docker commit java5-tracker-01 java5-fastdfs

(3)创建tracker和storage

docker run -di --name java5-tracker01 -p 8081:80 java5-fastdfs /bin/bash
docker run -di --name java5-tracker02 -p 8082:80 java5-fastdfs /bin/bash

docker run -di --name java5-storage01 -p 9091:80 java5-fastdfs /bin/bash
docker run -di --name java5-storage02 -p 9092:80 java5-fastdfs /bin/bash
docker run -di --name java5-storage03 -p 9093:80 java5-fastdfs /bin/bash
docker run -di --name java5-storage04 -p 9094:80 java5-fastdfs /bin/bash

(4)修改java5-tracker01与java5-tracker02的tracker.conf

主要为了效果修改上传文件的选组方式为轮询

store_lookup=0

java5-tracker01

java5-tracker02

(5)修改java5-storage01与java5-storage02

java5-storage01

修改nginx配置nginx.conf文件

vim /zhuzq/servier/nginx/conf/nginx.conf

 

修改storage.conf配置文件

vim /etc/fdfs/storage.conf

 

修改mod_fastdfs.conf文件

vim /etc/fdfs/mod_fastdfs.conf

java5-storage02

修改nginx配置nginx.conf文件

vim /zhuzq/servier/nginx/conf/nginx.conf

修改storage.conf配置文件

vim /etc/fdfs/storage.conf

 

修改mod_fastdfs.conf文件

vim /etc/fdfs/mod_fastdfs.conf

 

(5)修改java5-storage03与java5-storage03

与修改java5-storage03与java5-storage03一样,唯一不同就是文件中的group1变成group2

(6)启动服务

java5-tracker01与java5-tracker02执行

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

java5-storage01与java5-storage02、java5-storage03、java5-storage04

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
/zhuzq/servier/nginx/sbin/nginx

(7)测试

进入java5-storage01

/usr/bin/fdfs_test  /etc/fdfs/client.conf  upload  /etc/fdfs/anti-steal.jpg 

结果

http://172.18.0.6/group2/M00/00/00/rBIABl0x-kyAJL3HAABdrSqbHGQ169_big.jpg

浏览器访问改为

http://39.97.176.160:9093/group2/M00/00/00/rBIABl0x-kyAJL3HAABdrSqbHGQ169_big.jpg

http://172.18.0.7/group2/M00/00/00/rBIAB10x-m-ANTxKAABdrSqbHGQ197_big.jpg

浏览器访问改为

http://39.97.176.160:9094/group2/M00/00/00/rBIAB10x-m-ANTxKAABdrSqbHGQ197_big.jpg

(8)测试扩展

备份镜像

docker save -o java5-fastdfs.tar java5-fastdfs

导入镜像

 docker load -i java5-fastdfs.tar

八、基本命令

(1)防火墙关

systemctl stop firewalld

(2)禁止防火墙开机启动

systemctl disable firewalld

(3)Tracker 启动命令

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

(4)Storage 启动命令

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

(5)集群状态检查命令

fdfs_monitor /etc/fdfs/storage.conf

(6)删除 Storage

fdfs_monitor /etc/fdfs/storage.conf delete 组名 storage的ip

(7)Tracker 关闭命令

killall fdfs_trackerd

(8)Storage 关闭命令

killall fdfs_storaged

(9)缺少 killall 命令进行安装

yum install psmisc -y

(10)Tracker 开机自启动

vim /etc/rc.d/rc.local

将运行命令行添加进文件:

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

(11)Storage 开机自启动

vim /etc/rc.d/rc.local

将运行命令行添加进文件:

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

推荐文章

https://www.cnblogs.com/1477717815fuming/p/8404882.html

https://zhuanlan.zhihu.com/p/61735659

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2014Team

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值