侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

FastDFS文件分布式系统搭建说明文档

2023-11-01 星期三 / 0 评论 / 0 点赞 / 48 阅读 / 37547 字

一、集群规划: Nginx代理服务器:192.168.0.227:8001(nginx监听端口号 8001) 跟踪服务器1:192.168.0.221:22122 (nginx监听端口号 8000)

一、集群规划:

Nginx代理服务器:192.168.0.227:8001 (nginx监听端口号 8001)
跟踪服务器1:192.168.0.221:22122 (nginx监听端口号 8000)
跟踪服务器2:192.168.0.222:22122 (nginx监听端口号 8000)
存储服务器1:192.168.0.223:23000 (nginx监听端口号 8888)
存储服务器2:192.168.0.224:23000 (nginx监听端口号 8888)
存储服务器3:192.168.0.225:23001 (nginx监听端口号 8888)
存储服务器4:192.168.0.226:23001 (nginx监听端口号 8888)

操作系统:CentOS 6.7
用户:root

安装包:

libfastcommon-master.zip

perl-5.20.2.tar.gz

FastDFS_v5.05.tar.gz

fastdfs-nginx-module_v1.16.tar.gz

nginx-1.6.2.tar.gz

安装包下载:http://pan.baidu.com/s/1dFMkE6t

开始前,先将所有安装包下载到各个节点的/usr/local/src目录中。

1> 本文称节点IP最后一段就代表某个节点,如:192.168.1.206,文中提到206节点,就代表192.168.1.206。
2> 本文称tracker或跟踪服务器是同一个意思
3> 本文称storage或存储服务器是同一个意思

FastDFS集群架构图

二、安装所有集群节点:

(一)所有跟踪服务器和存储服务器均执行如下操作:

1、编译和安装所需的依赖包:

# yum install make cmake gcc gcc-c++

2、安装 libfastcommon:

(1)上传或下载 libfastcommon-master.zip 到/usr/local/src 目录

(2)解压

cd /usr/local/src/

unzip libfastcommon-master.zip

如果遇到unzip: command not found,则需要安装unzip : yum -y install unzip

cd libfastcommon-master

解压完成后,进入文件夹,会看到make.sh文件,执行./make.sh命令,可能会报没有安装gcc和perl的错误,截图如下:

  3. 为了解决2中的问题,安装gcc和perl:

          a. 执行 yum -y install gcc 和 yum -y install gcc-c++ 这了两个命令安装(在第一步已执行

          b. 安装perl时,我们可以直接用wget命令安装,我这里安装的版本是perl-5.20.2(已在安装包中提供)。

              可以参考这篇文章安装perl http://blog.sina.com.cn/s/blog_68158ebf0100ndes.html 

              wget http://www.cpan.org/src/5.0/perl-5.20.2.tar.gz (为了便于操作,可提前下载好压缩包上传到系统

            如果没有安装wget,需要先安装wget,  命令为:yum -y install wget

            然后继续安装perl, 执行

              tar zxvf perl-5.20.2.tar.gz               

              mkdir /usr/local/perl

               进入文件夹: cd perl-5.20.2

              ./Configure -des -Dprefix=/usr/local/perl -Dusethreads -Uversiononly

              make

              make install

              perl -version   

       4.  安装完perl后,重新依次执行 ./make.sh 和 ./make.sh install 这两个命令,完成libfastcommon的安装。

(3) 编译、安装

./make.sh

./make.sh install 

 

libfastcommon 默认安装到了

/usr/lib64/libfastcommon.so

/usr/lib64/libfdfsclient.so

 

 

(4)因为 FastDFS 主程序设置的 lib 目录是/usr/local/lib,

所以需要创建软链接.

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so

ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so

# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so

ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

 

3、安装 FastDFS

(1)上传或下载 FastDFS 源码包(FastDFS_v5.05.tar.gz)到/usr/local/src 目录

 (2)解压

cd /usr/local/src/

# tar -zxvf FastDFS_v5.05.tar.gz

cd FastDFS

(3)编译、安装(编译前要确保已经成功安装了 libfastcommon)

# ./make.sh

# ./make.sh install

采用默认安装的方式安装,安装后的相应文件与目录:

 A、服务脚本在:

/etc/init.d/fdfs_storaged

/etc/init.d/fdfs_tracker 

B、配置文件在(样例配置文件):

/etc/fdfs/client.conf.sample

/etc/fdfs/storage.conf.sample

/etc/fdfs/tracker.conf.sample

 C、命令工具在/usr/bin/目录下的:

fdfs_appender_test 

fdfs_appender_test1 

fdfs_append_file 

fdfs_crc32 

fdfs_delete_file 

fdfs_download_file 

fdfs_file_info 

fdfs_monitor 

fdfs_storaged

fdfs_test  

fdfs_test1 

fdfs_trackerd 

fdfs_upload_appender

fdfs_upload_file stop.sh

restart.sh

(4)因为 FastDFS 服务脚本设置的 bin 目录是/usr/local/bin,但实际命令安装在/usr/bin,可以进入

/user/bin 目录使用以下命令查看 fdfs 的相关命令:

cd /usr/bin/

# ls | grep fdfs

因此需要修改 FastDFS 服务脚本中相应的命令路径,也就是把/etc/init.d/fdfs_storaged 和/etc/init.d/fdfs_tracker 两个脚本中的/usr/local/bin 修改成/usr/bin:

vi fdfs_trackerd 使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin

# vi fdfs_storaged 使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin

(二)配置跟踪器(Tracker)

每个tracker服务器执行如下操作

1、 复制 FastDFS 跟踪器样例配置文件,并重命名:

cd /etc/fdfs/

cp tracker.conf.sample tracker.conf

 2、 编辑跟踪器配置文件:

vi /etc/fdfs/tracker.conf 修改的内容如下:

disabled=false

port=22122 

base_path=/fastdfs/tracker

(其它参数保留默认配置,具体配置解释请参考官方文档说明:http://bbs.chinaunix.net/thread-1941456-1-1.html )

3、 创建基础数据目录(参考基础目录 base_path 配置):

mkdir -p /fastdfs/tracker

4、 防火墙中打开跟踪器端口(默认为 22122):

vi /etc/sysconfig/iptables 添加如下端口行:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT 重启防火墙:

# service iptables restart 

5、 启动 Tracker:

# /etc/init.d/fdfs_trackerd start

初次成功启动,会在/fastdfs/tracker 目录下创建 data、logs 两个目录) 查看 FastDFS Tracker 是否已成功启动:

ps -ef | grep fdfs

6、 关闭 Tracker:

/etc/init.d/fdfs_trackerd stop

7、 设置 FastDFS 跟踪器开机启动:

# vi /etc/rc.d/rc.local 添加以下内容:

## FastDFS Tracker

/etc/init.d/fdfs_trackerd start

(三)配置存储器(Storage)

group1: 192.168.0.223,192.168.0.224
group2: 192.168.0.225,192.168.0.226

每个storage服务器执行如下操作

 

1、 复制 FastDFS 存储器样例配置文件,并重命名:

cd /etc/fdfs/

cp storage.conf.sample storage.conf

2、 编辑存储器样例配置文件:

# vi /etc/fdfs/storage.conf 修改的内容如下:

 

# 修改的内容如下:

disabled=false                      # 启用配置文件

port=23000                          # storage服务端口 默认是23000,同一个组的storage端口号必须一致

group_name=group1(223、224服务器配group1,225、226服务器配group2)   # 组名(第一组为group1,第二组为group2,依次类推...)

base_path=/fastdfs/storage          # 数据和日志文件存储根目录

store_path0=/fastdfs/storage        # 第一个存储目录,第二个存储目录起名为:store_path1=xxx,其它存储目录名依次类推...

store_path_count=1                  # 存储路径个数,需要和store_path个数匹配

tracker_server=192.168.0.221:22122  # tracker服务器IP和端口

tracker_server=192.168.0.222:22122  # tracker服务器IP和端口

http.server_port=8888               # http访问文件的端口

 

(其它参数保留默认配置,具体配置解释请参考官方文档说明:http://bbs.chinaunix.net/thread-1941456-1-1.html )

(注意:

store_lookup=2
# 上传组(卷) 的方式 0:轮询方式 1: 指定组 2: 平衡负载(选择最大剩余空间的组(卷)上传)
# 这里如果在应用层指定了上传到一个固定组,那么这个参数被绕过

store_group=group2
# 当上一个参数设定为1 时 (store_lookup=1,即指定组名时),必须设置本参数为系统中存在的一个组名。如果选择其他的上传方式,这个参数就没有效了。

store_server=0
# 选择哪个storage server 进行上传操作(一个文件被上传后,这个storage server就相当于这个文件的storage server源,会对同组的storage server推送这个文件达到同步效果)
# 0: 轮询方式 
# 1: 根据ip 地址进行排序选择第一个服务器(IP地址最小者)
# 2: 根据优先级进行排序(上传优先级由storage server来设置,参数名为upload_priority) 

store_path=0
# 选择storage server 中的哪个目录进行上传。storage server可以有多个存放文件的base path(可以理解为多个磁盘)。
# 0: 轮流方式,多个目录依次存放文件
# 2: 选择剩余空间最大的目录存放文件(注意:剩余磁盘空间是动态的,因此存储到的目录或磁盘可能也是变化的)

download_server=0
# 选择哪个 storage server 作为下载服务器 
# 0: 轮询方式,可以下载当前文件的任一storage server
# 1: 哪个为源storage server 就用哪一个 (前面说过了这个storage server源 是怎样产生的) 就是之前上传到哪个storage server服务器就是哪个了)

 

3、 创建基础数据目录(参考基础目录 base_path 配置):

mkdir -p /fastdfs/storage

4、 防火墙中打开存储器端口(默认为 23000):

vi /etc/sysconfig/iptables 添加如下端口行:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT 重启防火墙:

# service iptables restart

 

5、 启动 Storage:

# /etc/init.d/fdfs_storaged start

(初次成功启动,会在/fastdfs/storage 目录下创建 data、logs 两个目录) 查看 FastDFS Storage 是否已成功启动

ps -ef | grep fdfs

6、 关闭 Storage:

/etc/init.d/fdfs_storaged stop

7、 设置 FastDFS 存储器开机启动:

vi /etc/rc.d/rc.local 添加:

FastDFS Storage

/etc/init.d/fdfs_storaged start

(四)文件上传测试

1、修改 Tracker 服务器中的客户端配置文件:

# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf

vi /etc/fdfs/client.conf

base_path=/fastdfs/tracker

tracker_server=192.168.0.221:22122

tracker_server=192.168.0.222:22122

2、执行如下文件上传命令:

# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/FastDFS_v5.05.tar.gz

返回以下ID号,说明文件上传成功:
group1/M00/00/00/wKgxxxxxxxxAVFOL7FJU4.tar.gz
group2/M00/00/00/wKgBxxxxxxxxxxxxxxFJU4.tar.gz
(从返回的ID号中也可以看出,同一个文件分别存储在两个组内group1和group2,但也有可能在同一组中,具体策略是由FastDFS根据服务器的存储情况来分配的)

 

三、存储节点的Nginx安装

storage中安装nginx,主要是为了提供http的访问服务,同时解决group中storage服务器的同步延迟问题。而tracker中安装nginx,主要是为了提供http访问的反向代理、负载均衡以及缓存服务 。

说明:每个节点执行相同的操作

1、fastdfs-nginx-module 作用说明

FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储,但是同组存储服务器之间需要进入 文件复制,有同步延迟的问题。假设 Tracker 服务器将文件上传到了 192.168.4.125,上传成功后文件 ID 已经返回给客户端。此时 FastDFS 存储集群机制会将这个文件同步到同组存储 192.168.4.126,在文件还 没有复制完成的情况下,客户端如果用这个文件 ID 在 192.168.4.126 上取文件,就会出现文件无法访问的 错误。而 fastdfs-nginx-module 可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的 文件无法访问错误。(解压后的 fastdfs-nginx-module 在 nginx 安装时使用)

2、上传 fastdfs-nginx-module_v1.16.tar.gz 到/usr/local/src 3、解压

cd /usr/local/src/

tar -zxvf fastdfs-nginx-module_v1.16.tar.gz

 

4、修改 fastdfs-nginx-module 的 config 配置文件

cd fastdfs-nginx-module/src

vi config

CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/" 修改为:

CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

(注意:这个路径修改是很重要的,不然在 nginx 编译的时候会报错的

5、上传当前的Nginx(nginx-1.6.2.tar.gz)到/usr/local/src 目录,其实nginx版本已经到了1.12.0、1.13.0了,只是当时测试用的是1.6.2的版本

6、安装编译 Nginx 所需的依赖包

yum install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel

 

7、编译安装 Nginx(添加 fastdfs-nginx-module 模块)

# cd /usr/local/src/

tar -zxvf nginx-1.6.2.tar.gz

cd nginx-1.6.2

./configure --add-module=/usr/local/src/fastdfs-nginx-module/src    (./configure --prefix=/你的安装目录  --add-module=/第三方模块目录  )

make && make install

 

8、复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录,并修改

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

vi /etc/fdfs/mod_fastdfs.conf 

修改以下配置:

第一组存储服务器的mod_fastdfs.conf配置

connect_timeout=10

base_path=/tmp

tracker_server=192.168.1.200:22122

tracker_server=192.168.1.201:22122

storage_server_port=23000

group_name=group1                       # 第一组storage的组名

url_have_group_name=true

store_path0=/fastdfs/storage

group_count=2

[group1]

group_name=group1

storage_server_port=23000

store_path_count=1

store_path0=/fastdfs/storage

[group2]

group_name=group2

storage_server_port=23000

store_path_count=1

store_path0=/fastdfs/storage

 

第二组存储服务器的mod_fastdfs.conf配置

第二组的mod_fastdfs.confg配置与第一组的配置只有group_name和storage_server_port不同:group_name=group2、storage_server_port=23001

9、复制 FastDFS 的部分配置文件到/etc/fdfs 目录

# cd /usr/local/src/FastDFS/conf

cp http.conf mime.types /etc/fdfs/

10、在/fastdfs/storage 文件存储目录下创建软连接,将其链接到实际存放数据的目录

# ln -s /fastdfs/storage/data/ /fastdfs/storage/data/M00

 

11、配置 Nginx

简洁版 nginx 配置样例: 

user  root; 

worker_processes  1; 

events {

    worker_connections  1024;

}

http {

    includemime.types;

    default_type  application/octet-stream;

     sendfileon;

     keepalive_timeout 65;

     server {

        listen 8888; 

        server_name localhost; 

     

        # FastDFS 文件访问配置(fastdfs-nginx-module模块)

        location ~/group([0-9])/M00 {

            ngx_fastdfs_module;

        }

 

        error_page 500 502 503 504 /50x.html; 

        location = /50x.html {

            root html;

        }

    }

}

注意、说明:

A、8888 端口值是要与/etc/fdfs/storage.conf 中的 http.server_port=8888 相对应, 因为 http.server_port 默认为 8888,如果想改成 80,则要对应修改过来。

B、Storage 对应有多个 group 的情况下,访问路径带 group 名,如/group1/M00/00/00/xxx, 对应的 Nginx 配置为:

    location ~/group([0-9])/M00 { 

        ngx_fastdfs_module;

    }

C、如查下载时如发现老报 404,将 nginx.conf 第一行 user nobody 修改为 user root 后重新启动。

 

12、防火墙中打开 Nginx 的 8888 端口

vi /etc/sysconfig/iptables 添加:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT

service iptables restart

 

13、启动 Nginx

# /usr/local/nginx/sbin/nginx 

ngx_http_fastdfs_set pid=xxx

(重启 Nginx 的命令为:/usr/local/nginx/sbin/nginx -s reload

 

14、通过浏览器访问测试时上传的文件  http://192.168.0.223:8888/group1/M00/00/00/wKgEfVUYNYeAb7XFAAVFOL7FJU4.tar.gz

                                                        http://192.168.0.224:8888/group1/M00/00/00/wKgEfVUYNYeAb7XFAAVFOL7FJU4.tar.gz

 

四、跟踪节点的Nginx安装

说明:每个节点执行相同的操作

1、上传当前的稳定版本 Nginx(nginx-1.6.2.tar.gz)到/usr/local/src 目录

2、安装编译 Nginx 所需的依赖包

# yum install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel

3、编译安装 Nginx(跟踪节点可不添加 fastdfs-nginx-module 模块)

cd /usr/local/src/

tar -zxvf nginx-1.6.2.tar.gz

# cd nginx-1.6.2

# ./configure    (./configure --prefix=/你的安装目录  --add-module=/第三方模块目录  )

make && make install

4、配置 Nginx

# cd /usr/local/nginx/conf/

# vi nginx.conf

 

user  root; 

worker_processes  1; 

events {

    worker_connections  1024;

}

http {

    includemime.types;

    default_type  application/octet-stream;

     sendfileon;

     keepalive_timeout 65;

    

    #设置 group1 的服务器

    upstream fdfs_group1 {

         server 192.168.0.223:8888 weight=1max_fails=2fail_timeout=30s;

         server 192.168.0.224:8888 weight=1max_fails=2fail_timeout=30s;

    }

 

    #设置 group2 的服务器

    upstream fdfs_group2 {

         server 192.168.0.225:8888 weight=1max_fails=2fail_timeout=30s;

         server 192.168.0.226:8888 weight=1max_fails=2fail_timeout=30s;

    }

 

     server {

        listen 8000; 

        server_name localhost; 

       

         #设置 group 的负载均衡参数

         location /group1/M00 {

            proxy_next_upstream http_502 http_504 error timeout invalid_header;

            proxy_pass http://fdfs_group1;

            expires 30d;

        }

 

        location /group2/M00 {

            proxy_next_upstream http_502 http_504 error timeout invalid_header; 

            proxy_pass http://fdfs_group2;

            expires 30d;

        }

 

        error_page 500 502 503 504 /50x.html; 

        location = /50x.html {

            roothtml;

        }

    }

}

5、防火墙中打开 Nginx 的 8000 端口

vi /etc/sysconfig/iptables 添加:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8000 -j ACCEPT

service iptables restart

 

6、启动 Nginx

/usr/local/nginx/sbin/nginx 

  ngx_http_fastdfs_set pid=xxx

(重启 Nginx 的命令为:/usr/local/nginx/sbin/nginx -s reload

 

7、通过浏览器访问测试时上传的文件  http://192.168.0.221:8000/group1/M00/00/00/wKgEfVUYNYeAb7XFAAVFOL7FJU4.tar.gz

                                  http://192.168.0.222:8000/group1/M00/00/00/wKgEfVUYNYeAb7XFAAVFOL7FJU4.tar.gz

五、配置Nginx对Tracker的负载均衡

1、上传当前的稳定版本 Nginx(nginx-1.6.2.tar.gz)到/usr/local/src 目录

2、安装编译 Nginx 所需的依赖包

yum install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel

3、编译安装 Nginx(跟踪节点可不添加 fastdfs-nginx-module 模块)

cd /usr/local/src/

tar -zxvf nginx-1.6.2.tar.gz

# cd nginx-1.6.2

# ./configure    (./configure --prefix=/你的安装目录  --add-module=/第三方模块目录  )

# make && make install

4、配置 Nginx

# cd /usr/local/nginx/conf/

# vi nginx.conf

user  root; 

worker_processes  1; 

events {

    worker_connections  1024;

}

http {

    includemime.types;

    default_type  application/octet-stream;

     sendfileon;

     keepalive_timeout 65;

       ## FastDFS Tracker Proxy

            upstream fastdfs_tracker {

                 server 192.168.0.221:8000 weight=1 max_fails=2 fail_timeout=30s;

                 server 192.168.0.222:8000 weight=1 max_fails=2 fail_timeout=30s;

            }

 

     server {

        listen 8001; 

        server_name localhost; 

         location / {

                            root   html;

                            index  index.html index.htm;

                            proxy_pass  http://fastdfs_tracker/;

                   }

        error_page 500 502 503 504 /50x.html; 

        location = /50x.html {

            roothtml;

        }

    }

}

5、防火墙中打开 Nginx 的 8001 端口

# vi /etc/sysconfig/iptables 添加:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8001 -j ACCEPT

# service iptables restart

 

6、启动 Nginx

# /usr/local/nginx/sbin/nginx 

  ngx_http_fastdfs_set pid=xxx

(重启 Nginx 的命令为:/usr/local/nginx/sbin/nginx -s reload)

 

7、通过浏览器访问测试时上传的文件  http://192.168.0.227:8001/group1/M00/00/00/wKgEfVUYNYeAb7XFAAVFOL7FJU4.tar.gz

                                  http://192.168.0.227:8001/group1/M00/00/00/wKgEfVUYNYeAb7XFAAVFOL7FJU4.tar.gz

广告 广告

评论区