分布式文件服务器——图片服务器FastDFS

分布式图片服务器——FastDFS

FastDFS由淘宝开发平台部资深架构师余庆开发。该开源项目的主页是 http://code.google.com/p/fastdfs
github:https://github.com/happyfish100
  FastDFS 是用 c 语言编写的一款开源的分布式文件系统。FastDFS 为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
  FastDFS 架构包括 Tracker server 和 Storage server。客户端请求 Tracker server 进行文件上传、下载,通过 Tracker server 调度最终由 Storage server 完成文件上传和下载。
Tracker server 作用是负载均衡和调度,通过 Tracker server 在文件上传时可以根据一些策略找到 Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务器。
Storage server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上,Storage server 没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。
在这里插入图片描述

Tracker:管理集群,tracker 也可以实现集群。每个 tracker 节点地位平等。收集 Storage 集群的状态。
Storage:实际保存文件 Storage 分为多个组,每个组之间保存的文件是不同的。每个组内部可以有多个成员,组成员内部保存的内容是一样的,组成员的地位是一致的,没有主从的概念。

安装

安装libfastcommon

  • 安装gcc yum install gcc
  • 解压libfastcommon-1.0.39.tar
  • 进入到解压好的目录编译 ./make.sh
  • 安装编译好的库 ./make.sh install

libfastcommon默认会被安装到/usr/lib64/libfastcommon.so,且安装完后,会建立软链接到:/usr/lib/libfastcommon.so
可以查看,ll /usr/lib目录下:
在这里插入图片描述
安装FastDFS

  • 解压fastdfs-5.11.tar
  • 进入解压好的目录 ./make.sh 进行编译
  • 安装编译好的类库 ./make.sh install(如果有错误信息就删除重新安装或者重启,最好安装在usr目录下)
  • 修改配置文件格式(把/etc/fdfs下的.sample的配置文件修改为.conf)
    在这里插入图片描述
cd /etc/fdfs/
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf

安装tracker

  • 创建tracker工作目录(用来保存tracker的data和log),这个目录可以根据个人习惯来创建目录的位置
mkdir -p  /usr/fdfs/tracker
  • 配置tracker

cd /etc/fdfs
vi tracker.conf

1.disabled=false     #默认开启 
2.port=22122       #默认端口号 
3.base_path=/usr/fdfs/tracker       #我刚刚创建的目录 
4.http.server_port=6666            #默认端口是8080,容易冲突
  • 启动tracker:service fdfs_trackerd start
  • 如果不能启动或提示用systemctl可改用命令:systemctl start fdfs_trackerd

启动成功后可以看到Starting FastDFS tracker server:

进入创建的tracker目录,发现目录中多了data和log两个目录
查看进程:ps -ef | grep fdfs
查看一下tracker的端口监听情况(需要先安装net-tools网络工具包:yum install net-tools -y)
netstat -antp|grep fdfs
端口22122是否成功监听

设置tracker开机启动
1、查看开启启动文件权限:ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 220 11月 23 2013 /etc/rc.d/rc.local
2、有x执行权限(如果没有,需要加一下:chmod +x /etc/rc.d/rc.local)
3、修改rc.local
vi /etc/rc.d/rc.local
service fdfs_trackerd start

安装storage

  • 创建storage工作目录(一个storage和一个storage_data用来存储数据),可以根据个人习惯来创建目录的位置
mkdir -p /usr/fdfs/storage
mkdir -p  /usr/fdfs/storage_data
  • 配置storage

vi /etc/fdfs/storage.conf

1.disabled=false         #默认
2.group_name=group1    #组名,根据实际情况修改 
3.port=23000   #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致 
4.base_path=/usr/fdfs/storage    #设置storage数据文件和日志目录 
5.store_path_count=1              #存储路径个数,需要和store_path个数匹配 
6.store_path0=/usr/fdfs/storage_data    #实际文件存储路径 
7.tracker_server=192.168.188.138:22122      #我虚拟机的ip地址 
8.http.server_port=8888                    #设置 http 端口号
  • 启动storage:service fdfs_storaged start
  • 如果不能启动或提示用systemctl可改用命令:systemctl start fdfs_storaged

启动成功后可以看到Starting FastDFS storage server:

进入创建的tracker目录,发现目录中多了data和log两个目录
查看进程:ps -ef | grep fdfs
查看一下tracker的端口监听情况(需要先安装net-tools网络工具包:yum install net-tools -y)
netstat -antp|grep fdfs
端口22122是否成功监听

设置storage开机启动
1、查看开启启动文件权限:ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 220 11月 23 2013 /etc/rc.d/rc.local
2、有x执行权限(如果没有,需要加一下:chmod +x /etc/rc.d/rc.local)
3、修改rc.local
vi /etc/rc.d/rc.local
service fdfs_storaged start

校验整合
fastdfs的东西都已安装完成,最后我们还要确定一下,storage是否注册到了tracker中去
查看命令:/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
如果输出截图所示,则整合成功
在这里插入图片描述

测试文件上传

fastdfs执行./make.sh install后,一些执行命令会被安装到/usr/bin/下
在这里插入图片描述
查看/usr/bin下的fastdfs执行命令:ls -la /usr/bin/fdfs*
在这里插入图片描述
配置客户端
修改客户端的配置文件:vi /etc/fdfs/client.conf
修改内容:

base_path=/usr/fdfs/tracker        #tracker服务器文件路径
tracker_server=192.168.2.123:22122    #tracker服务器IP地址和端口号
http.tracker_server_port=6666           # tracker 服务器的http端口号,必须和tracker的设置对应起来

模拟上传
上传一张本地图片到usr目录
确定图片位置后,我们输入上传图片命令把图片上传到FastDFS服务器

/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /usr/test.jpg

成功后会返回图片的路径:group1/M00/00/00/wKgCe162rfuAQjZfAADFbi0oR0A946.jpg
组名:group1
虚拟磁盘:M00
目录:00/00
文件名称:wKgCe162rfuAQjZfAADFbi0oR0A946.jpg
在这里插入图片描述
我们上传的图片会被上传到我们创建的storage_data目录的data目录下
在这里插入图片描述

fastdfs的nginx模块安装

安装nginx之前的准备:安装nginx所需的依赖lib(yum安装存在就覆盖,没有进行安装)

yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel

安装nginx并添加fastdfs-nginx-module
准备工作

  • 上传nginx、fastdfs-nginx-module至usr:
  • 分别解压:tar -xvf
  • 将nginx额外复制一份,形成nginx-1.14.2-1和nginx-1.14.2-2(因为tracker和storage各需一个nginx)
  • 通过fastdfs-nginx-module将nginx-1.14.2-1和nginx-1.14.2-2粘合在一起

在这里插入图片描述
开始整合

  • 修改fastdfs-nginx-module中的错误(路径)
  • 配置storage-nginx
  • 配置tracker-nginx
  • 测试
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

上述路径是我们安装fastdfs自动配置好的路径,而fastdfs-nginx-module中配置文件的这两项路径与我们安装好后自动生成的路径不一致,如果不修改会造成整合错误
修改之前
在这里插入图片描述
修改好之后进入nginx-1.14.2-1,重新configure(配置,前缀内容为输出路径):

./configure --prefix=/usr/nginx-1 --add-module=/usr/fastdfs-nginx-module-1.20/src

配置完成后进行编译make:make
编译完成后进行安装:make install
回到usr目录下ls查看,可以看到nginx-1目录,说明第一个nginx和fastdfs-nginx-module粘合编译完成
在这里插入图片描述
配置storage-nginx
修改 vim /usr/nginx-1/conf/nginx.conf
  修改监听端口 listen 9999, 新增location

server {
        listen       9999;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location ~/group1/M00 {
            root /usr/fdfs/storage_data/data;
            ngx_fastdfs_module;
        }

        location = /50x.html {
            root   html;
        }
}

然后进入FastDFS安装时解压的目录,将http.conf和mime.types拷贝到/etc/fdfs目录下:

cd /usr/fastdfs-5.11/conf
cp http.conf /etc/fdfs/
cp mime.types /etc/fdfs/

把fastdfs-nginx-module安装目录中src目录下的mod_fastdfs.conf也拷贝到/etc/fdfs目录下:

cd /usr/fastdfs-nginx-module-1.20/src
cp mod_fastdfs.conf /etc/fdfs/

在/etc/fdfs/下 对mod_fastdfs.conf文件进行修改

vim /etc/fdfs/mod_fastdfs.conf
 base_path=/usr/fdfs/storage            #保存日志目录
 tracker_server=192.168.188.138:22122   #tracker服务器的IP地址以及端口号
 storage_server_port=23000            #storage服务器的端口号,默认即可
 url_have_group_name = true           #文件 url 中是否有 group 名,改为true
 store_path0=/usr/fdfs/storage_data      #存储路径
 group_count = 1        #设置组的个数,事实上这次只使用了group1

在文件的最后,设置group

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/usr/fdfs/storage_data

启动nginx-1:/usr/nginx-1/sbin/nginx
在这里插入图片描述
设置开机自动启动nginx:
修改rc.local
vim /etc/rc.d/rc.local
在最后增加:/usrl/nginx-1/sbin/nginx
配置tracker-nginx
进入nginx-1.14.2-1-2,配置:

./configure --prefix=/usr/nginx-2 --add-module=/usr/fastdfs-nginx-module-1.20/src

配置完成后进行编译make:make
编译完成后进行安装:make install
修改nginx-2的nginx.conf,在http中做修改

    upstream fdfs_group1 {
        server 127.0.0.1:9999;
    }
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /group1/M00 {
            proxy_pass http://fdfs_group1;
        }
        #location / {
        #    root   html;
        #    index  index.html index.htm;
        #}

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

启动测试,访问默认端口80
在这里插入图片描述
设置开机自启
修改rc.local
vim /etc/rc.d/rc.local
在最后增加:/usrl/nginx-2/sbin/nginx

测试访问tracker拿到storage中存储的数据
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章