fastdfs集群要如何搭建?fastdfs基本概念详解

对于现代互联网来说,分布式集群是开发者一定要知道的,小伙伴们知道fastdfs吗?它就是一个分布式文件系统,你们知道它该如何搭建环境吗?下面快跟小编一起来看看吧。

一、Fastdfs是什么?

FastDFS:一个轻量级分布式文件系统,它是开源的,它负责对文件进行管理,功能包括:文件存储、文件同步、文件访问等各种文件操作,解决了大容量存储及负载均衡的问题。

FastDFS创建时充分考虑了冗余备份、负载均衡、线性扩容等各种机制,它致力于高可用、高性能等指标,如果想使用FastDFS来搭建一套高性能的文件服务器集群,基本不会耗费多少时间。

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

二、Fastdfs环境搭建

因为FastDFS 本身不再默认集成WEB服务器了,所以现在我们都需要去结合Nginx来搭建WEB服务器。在全部流程中,我们需要使用到一个nginx与fastdfs整合模块才能够实现文件的显示。同时考虑到现实的环境,这次我们将搭建两组服务器;group1、group2。

fastdfs集群搭建windows

本次要使用的主机列表如下:

No. 主机名称 IP 地址 描述

1 fastdfs-tracker-server 192.168.122.198 Tracker、Nginx(Tracker)
2 fastdfs-storage-group1-01 192.168.122.199 Storage、Nginx(FastDFS-Module)
3 fastdfs-storage-group1-02 192.168.122.200 Storage、Nginx(FastDFS-Module)
4 fastdfs-storage-group2-01 192.168.122.201 Storage、Nginx(FastDFS-Module)
5 fastdfs-storage-group2-02 192.168.122.202 Storage、Nginx(FastDFS-Module)

现在已经准备出了两台主机,配置是相同的:

提供好了 libfastcommon 编译;

提供好了所需要使用到的软连接;

已经编译好了 fastdfs 软件。

2.1、配置 storage

首先先配置一个 storage 节点主机,而后在这台主机上配置好相应的 nginx 服务;

1、进行 storage 配置:

通过模版文件拷贝出配置文件:cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf;

建立相应的工作目录:mkdir -p /usr/data/fdfs/storage;

编辑配置文件:vim /etc/fdfs/storage.conf;

group_name=group1
base_path=/usr/data/fdfs/storage
tracker_server=192.168.122.198:22122

2、 把本次使用的 Ningx 的开发包上传到系统之中,需要如下的几个开发包:

nginx-1.11.3.tar.gz、echo-nginx-module-0.59.tar.gz、 
fastdfs-nginx-module_v1.16.tar.gz 、 ngx_cache_purge-2.3.tar.gz 、 
nginx-upstream-fair-a18b409.tar.gz 、pcre-8.36.tar.gz、zlib-1.2.8.tar.gz。

3、 将所有的源代码的开发包进行解压缩:

tar xzvf /srv/ftp/echo-nginx-module-0.59.tar.gz -C /usr/local/src/
tar xzvf /srv/ftp/fastdfs-nginx-module_v1.16.tar.gz -C /usr/local/src/
tar xzvf /srv/ftp/nginx-1.11.3.tar.gz -C /usr/local/src/
tar xzvf /srv/ftp/nginx-upstream-fair-a18b409.tar.gz -C /usr/local/src/
tar xzvf /srv/ftp/ngx_cache_purge-2.3.tar.gz -C /usr/local/src/
tar xzvf /srv/ftp/pcre-8.36.tar.gz -C /usr/local/src/
tar xvf /srv/ftp/zlib-1.2.8.tar.gz -C /usr/local/src/

4、编译 nginx:

需要建立好nginx编译之后保存的数据目录:

mkdir - p /
    usr / local / nginx /
    {
        logs
        , conf
        , fastcgi_temp
        , sbin
        , client_body_temp
        , proxy_temp
        , uwsgi_temp
        , scgi_temp
    }

 进行nginx的编译处理:cd /usr/local/src/nginx-1.11.3/;

. / configure--prefix = /usr/local / nginx /
    --sbin - path = /usr/local / nginx / sbin /
    --with - http_ssl_module
    --conf - path = /usr/local / nginx / conf / nginx.conf
    --pid - path = /usr/local / nginx / logs / nginx.pid
    --error - log - path = /usr/local / nginx / logs / error.log
    --http - log - path = /usr/local / nginx / logs / access.log
    --http - fastcgi - temp - path = /usr/local / nginx / fastcgi_temp
    --http - client - body - temp - path = /usr/local / nginx / client_body_temp
    --http - proxy - temp - path = /usr/local / nginx / proxy_temp
    --http - uwsgi - temp - path = /usr/local / nginx / uwsgi_temp
    --http - scgi - temp - path = /usr/local / nginx / scgi_temp
    --add - module = /usr/local / src / echo - nginx - module - 0.59
    --add - module = /usr/local / src / gnosek - nginx - upstream - fair - a18b409
    --add - module = /usr/local / src / ngx_cache_purge - 2.3
    --add - module = /usr/local / src / fastdfs - nginx - module / src
    --with - zlib = /usr/local / src / zlib - 1.2 .8
    --with - pcre = /usr/local / src / pcre - 8.36

编译并安装:make ; make install;

5、将 fastdfs-nginx-model 模块中的配置文件拷贝到"/etc/fdfs"目录下:

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

6、修改"mod_fastdfs.conf"文件:vim /etc/fdfs/mod_fastdfs.conf;

base_path = /usr/data / fdfs / storage
tracker_server = 192.168 .122 .198: 22122
group_name = group1
store_path0 = /usr/data / fdfs / storage
url_have_group_name = true "url_have_group_name"
表示现在的访问路径上是否需要追加有组名称。

7、拷贝配置文件:

拷贝 http.conf 配置文件: cp / usr / local / src / FastDFS / conf / http.conf / etc / fdfs / ;
拷贝 mime.types 配置文件: cp / usr / local / src / FastDFS / conf / mime.types /
    etc / fdfs / ;

8、修改 nginx 配置项:vim /usr/local/nginx/conf/nginx.conf

listen 9999;
location~/group[1-3]/M00
{
    root / usr / data / fdfs / storage;
    ngx_fastdfs_module;
}

9、做一个软连接:

ln -s /usr/data/fdfs/storage/data/ /usr/data/fdfs/storage/M00

10、检测当前的 nginx 配置是否正确;

/usr/local/nginx/sbin/nginx -t

现在配置的 storage 里面并没有具体的图片信息,所以此时还不敢保证操作一切都是正确的。

2.2、配置多台 storage

1)、 将已经配置好的 storage 主机关机,而后将其复制为多份主机;

2)、 storage 主机一共有两组,每组有两台服务器,那么要修改各自主机的名称:vim /etc/hostname;

3)、修改的名称:vim /etc/fdfs/storage.conf

group_name=group2

4)、修改组名称:vim /etc/fdfs/mod_fastdfs.conf;

group_name=group2

那么这个时候两组的 storage 存储就配置完成了,那么在进行存储的时候将根据 group 的信息进行对应的保存。

2.3、配置 tracker 主机

每一台 storage 主机上的 nginx 只是作为负载均衡使用的,真正起作用的还是在于 tracker 主机上。

1、将 nginx 有关的开发包上传到 tracker 之中: nginx-1.11.3.tar.gz、 echo-nginx-module-0.59.tar.gz、

ngx_cache_purge-2.3.tar.gz、nginx-upstream-fair-a18b409.tar.gz、pcre-8.36.tar.gz、zlib-1.2.8.tar.gz。

2、把所有的源代码的开发包进行解压缩:

tar xzvf /srv/ftp/echo-nginx-module-0.59.tar.gz -C /usr/local/src/
tar xzvf /srv/ftp/nginx-1.11.3.tar.gz -C /usr/local/src/
tar xzvf /srv/ftp/nginx-upstream-fair-a18b409.tar.gz -C /usr/local/src/
tar xzvf /srv/ftp/ngx_cache_purge-2.3.tar.gz -C /usr/local/src/
tar xzvf /srv/ftp/pcre-8.36.tar.gz -C /usr/local/src/
tar xvf /srv/ftp/zlib-1.2.8.tar.gz -C /usr/local/src/

3、对fastdfs-tracker-serve进行 nginx 的编译处理:

建立相应的目录:

mkdir - p /
    usr / local / nginx /
    {
        logs
        , conf
        , fastcgi_temp
        , sbin
        , client_body_temp
        , proxy_temp
        , uwsgi_temp
        , scgi_temp
    }

进入到 nginx 源代码目录之中:cd /usr/local/src/nginx-1.11.3/;

. / configure--prefix = /usr/local / nginx /
    --sbin - path = /usr/local / nginx / sbin /
    --with - http_ssl_module
    --conf - path = /usr/local / nginx / conf / nginx.conf
    --pid - path = /usr/local / nginx / logs / nginx.pid
    --error - log - path = /usr/local / nginx / logs / error.log
    --http - log - path = /usr/local / nginx / logs / access.log
    --http - fastcgi - temp - path = /usr/local / nginx / fastcgi_temp
    --http - client - body - temp - path = /usr/local / nginx / client_body_temp
    --http - proxy - temp - path = /usr/local / nginx / proxy_temp
    --http - uwsgi - temp - path = /usr/local / nginx / uwsgi_temp
    --http - scgi - temp - path = /usr/local / nginx / scgi_temp
    --add - module = /usr/local / src / echo - nginx - module - 0.59
    --add - module = /usr/local / src / gnosek - nginx - upstream - fair - a18b409
    --add - module = /usr/local / src / ngx_cache_purge - 2.3
    --with - zlib = /usr/local / src / zlib - 1.2 .8
    --with - pcre = /usr/local / src / pcre - 8.36

编译与安装:make ; make install;

4、fastdfs-tracker-server配置 tracker:

建立 tracker 工作目录: mkdir - p / usr / data / fdfs / tracker;
通过模版拷贝配置文件: cp / etc / fdfs / tracker.conf.sample / etc / fdfs / tracker.conf;
编辑配置文件: vim / etc / fdfs / tracker.conf;
base_path = /usr/data / fdfs / tracker

5、fastdfs-tracker-serve配置 nginx:

tracker 所在的主机作为整体访问的主机,所以为了访问迅速需要配置缓存交 :

mkdir -p /usr/data/nginx/{cache,tmp}

修改 nginx 的配置文件项:vim /usr/local/nginx/conf/nginx.conf;

#
user nobody;
worker_processes 1;
error_log logs / error.log;#
error_log logs / error.log notice;#
error_log logs / error.log info;#
pid logs / nginx.pid;
events
{
    worker_connections 65536;
    use epoll;
}
http
{
    include mime.types;
    default_type application / octet - stream;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32 k;
    large_client_header_buffers 4 32 k;
    client_max_body_size 300 m;
    proxy_redirect off;
    proxy_set_header Host $http_host;
    proxy_set_header X - Real - IP $remote_addr;
    proxy_set_header X - Forwarded - For $proxy_add_x_forwarded_for;
    proxy_connect_timeout 90;
    proxy_send_timeout 90;
    proxy_read_timeout 90;
    proxy_buffer_size 16 k;
    proxy_buffers 4 64 k;
    proxy_busy_buffers_size 128 k;
    proxy_temp_file_write_size 128 k;
    proxy_cache_path / usr / data / nginx / cache levels = 1: 2 keys_zone = http - cache: 500 m
    max_size = 10 g inactive = 30 d;
    proxy_temp_path / usr / data / nginx / tmp;
    upstream fdfs_group1
    {
        server 192.168 .122 .199: 9999 weight = 1 max_fails = 2 fail_timeout = 30 s;
        server 192.168 .122 .200: 9999 weight = 1 max_fails = 2 fail_timeout = 30 s;
    }
    upstream fdfs_group2
    {
        server 192.168 .122 .201: 9999 weight = 1 max_fails = 2 fail_timeout = 30 s;
        server 192.168 .122 .202: 9999 weight = 1 max_fails = 2 fail_timeout = 30 s;
    }#
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '#
    '$status $body_bytes_sent "$http_referer" '#
    '"$http_user_agent" "$http_x_forwarded_for"';#
    access_log logs / access.log main;
    sendfile on;#
    tcp_nopush on;#
    keepalive_timeout 0;
    keepalive_timeout 65;#
    gzip on;
    server
    {
        listen 80;
        server_name localhost;#
        charset koi8 - r;#
        access_log logs / host.access.log main;
        location / group1 / M00
        {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_cache http - cache;
            proxy_cache_valid 200 304 12 h;
            proxy_cache_key $uri$is_args$args;
            proxy_pass http: //fdfs_group1;
                expires 30 d;
        }
        location / group2 / M00
        {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_cache http - cache;
            proxy_cache_valid 200 304 12 h;
            proxy_cache_key $uri$is_args$args;
            proxy_pass http: //fdfs_group2;
                expires 30 d;
        }
        location~/purge(/.*)
    {
        allow 127.0 .0 .1;
        allow 192.168 .122 .0 / 24;
        deny all;
        proxy_cache_purge http - cache $1$is_args$args;
    }
    location /
    {
        root html;
        index index.html index.htm;
    }#
    error_page 404 / 404. html;#
    redirect server error pages to the static page / 50 x.html# error_page 500 502 503 504 / 50 x.html;
    location = /50x.html {
    root html;
}#
proxy the PHP scripts to Apache listening on 127.0 .0 .1: 80## location~.php$
{
    #
    proxy_pass http: //127.0.0.1;
        #
}#
pass the PHP scripts to FastCGI server listening on 127.0 .0 .1: 9000## location~.php$
{
    #
    root html;#
    fastcgi_pass 127.0 .0 .1: 9000;#
    fastcgi_index index.php;#
    fastcgi_param SCRIPT_FILENAME / scripts$fastcgi_script_name;#
    include fastcgi_params;#
}#
deny access to.htaccess files
    , if Apache 's document root#
concurs with nginx 's one##
location~/.ht {#
deny all;#
}
}#
another virtual host using mix of IP - , name - , and port - based
configuration## server
{
    #
    listen 8000;#
    listen somename: 8080;#
    server_name somename alias another.alias;#
    location /
    {
        #
        root html;#index index.html index.htm;#
    }#
}#
HTTPS server## server
{
    #
    listen 443 ssl;#
    server_name localhost;#
    ssl_certificate cert.pem;#
    ssl_certificate_key cert.key;#
    ssl_session_cache shared: SSL: 1 m;#
    ssl_session_timeout 5 m;#
    ssl_ciphers HIGH: !aNULL: !MD5;#
    ssl_prefer_server_ciphers on;#
    location /
    {
        #
        root html;#index index.html index.htm;#
    }#
}
}

此时tracker应该就可以正常运行了。

以上就是关于如何搭建Fastdfs集群环境的所有内容了,你了解了吗?如若还想了解更多相关java架构师知识,那就来关注我们的网站吧。

推荐阅读:

fastdfs的优点,fastdfs缺点介绍

fastdfs使用流程,fastdfs使用Demo详解

fastdfs是什么?fastdfs详解