分布式文件系统FastDFS安装配置

本文详细介绍了一个包含多个TrackerServer和StorageServer的FastDFS集群部署过程,包括依赖安装、配置详解及故障转移策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务。

1.实现目标 

 目标清单:

1)192.168.31.240和192.168.31.241为两个TrackerServer,它们将提供文件的上传/下载功能;

2)对外部应用程序来说,访问地址应始终为http://192.168.31.204,其中204是由某台TrackerServer上的Keeplived提供的VIP,并且由当前主机上的Nginx来对外提供HTTP服务;

3)默认情况下,应由240(Master)上的Nginx来提供服务,当Master上的Nginx发生故障变为不可用时,Keeplived将VIP漂移到241(Master_BackUp)上,并由该机的Nginx来继续提供服务;

4)SrorageServer将提供文件的存储服务,共分为两个组,即group1(242和243)和group2(244和245);

5)当TrackerServer上传文件并存储在某一个组的某台SrorageServer后,该组内的其余SrorageServer将上传的文件作一次同步存储处理。如果在同步期间,该组内的某一台SrorageServer处于不可用时,则当此SrorageServer恢复正常后仍然能同步到文件。

2.安装依赖  

    在所有TrackerServer和SrorageServer上进行下列步骤。

2.1安装gcc、openssl、pcre和perl

Linux命令行代码  

yum install gcc gcc+ gcc-c++   

yum install openssl openssl-devel   

yum install pcre pcre-devel  

yum install perl perl-devel  

 2.2安装libfastcommon

Linux命令行代码  

wget https://github.com/happyfish100/libfastcommon/archive/master.zip   

unzip master.zip  

cd libfastcommon-master/  

./make.sh  

./make.sh install  

    libfastcommon.so默认安装到了/usr/lib64/libfastcommon.so,而FastDFS主程序设置的lib目录是/usr/local/lib,所以设置软连接

Linux命令行代码  

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    在所有TrackerServer和SrorageServer上进行下列步骤。

Linux命令行代码  

# 将FastDFS安装文件解压到/usr/local目录后进入  

tar -zxvf FastDFS_v5.07.tar.gz -C /usr/local  

cd /usr/local/FastDFS  

 3.1修改make.sh

Linux命令行代码  

vi make.sh  

   将TARGET_PREFIX=$DESTDIR/usr 修改为 TARGET_PREFIX=$DESTDIR/usr/local

3.2编译安装

Linux命令行代码  

./make.sh  

./make.sh install  

 4.tracker配置   

    在TrackerServer(240和241)上进行下列步骤。

4.1创建数据及日志存放目录

Linux命令行代码  

mkdir -p /home/data/fastdfs/tracker  

4.2创建并编辑配置文件

Linux代码  

# 进入/etc/fdfs目录后拷贝配置文件  

cd /etc/fdfs  

cp -r tracker.conf.sample tracker.conf  

# 编辑Tracker配置文件  

vi tracker.conf  

   主要配置项如下:

Tracker.conf代码  

# tracker绑定的端口号,默认为22122  

port=22122  

# tracker的数据及日志存放目录,对应4.1节创建的目录  

base_path=/home/data/fastdfs/tracker  

max_connections=1024  

# 工作线程数,通常设置为CPU 数  

work_threads=4  

store_lookup=0  

store_server=0  

store_path=0  

download_server=0  

reserved_storage_space=4G  

run_by_group=fastdfs  

run_by_user=fastdfs  

rotate_error_log=true  

 4.3安装并配置nginx

    安装步骤省略,参考http://code727.iteye.com/blog/2248384

Linux命令行代码  

vi /etc/nginx/nginx.conf  

    主要配置内容如下:

Tracker nginx.conf摘要代码  

# storage goup1组  

upstream storageGoup1 {  

   server   192.168.31.242:80;  

   server   192.168.31.243:80;  

}  

  

# storage goup2组  

upstream storageGoup2 {  

  server   192.168.31.244:80;  

   server   192.168.31.245:80;  

}  

  

server {  

    listen 80;  

    server_name localhost;  

    location /g1 {  

        proxy_redirect off;  

        proxy_set_header Host $host;  

        proxy_set_header X-Real-IP $remote_addr;  

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  

        proxy_pass http://storageGoup1;  

    }  

    location /g2 {  

        proxy_redirect off;  

        proxy_set_header Host $host;  

        proxy_set_header X-Real-IP $remote_addr;  

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  

        proxy_pass http://storageGoup2;  

    }  

}  

 4.4服务设置

4.4.1交由service管理

Linux命令行代码  

# 将tracker的启动脚本拷贝到/etc/init.d/目录后编辑    

cp /usr/local/FastDFS/init.d/fdfs_trackerd /etc/init.d/    

vi /etc/init.d/fdfs_trackerd    

    将 PRG=/usr/bin/fdfs_trackerd 修改为 PRG=/usr/local/bin/fdfs_trackerd(因为前面在安装脚本中修改了默认的安装路径为/usr/local)

依次执行:

Linux命令行代码  

service fdfs_trackerd start  

service fdfs_trackerd status  

 若出现如下示例信息:

fdfs_trackerd (pid 1454) 正在运行...

 则表示tracker已在运行

4.4.2开机设置

编辑rc.local:

Linux命令行代码  

vi /etc/rc.d/rc.local  

 加入如下配置:

Linux命令行代码  

/etc/init.d/fdfs_trackerd start  

 5.Storage group1配置

 在StorageServer(242和243)上进行下列步骤。

5.1创建数据及日志存放目录

Linux命令行代码  

mkdir -p /home/data/fastdfs/storage  

 5.2创建并编辑配置文件

Linux命令行代码  

# 进入/etc/fdfs目录后拷贝配置文件  

cd /etc/fdfs  

cp -r storage.conf.sample storage.conf  

# 编辑Storage配置文件  

vi /etc/fdfs/storage.conf  

 主要配置项如下:

Group1 storage.conf摘要代码  

# group1的名称,对应tracker的nginx配置    

group_name=g1    

# storage的数据及日志存放目录  

base_path=/home/data/fastdfs    

max_connections=1024    

# 工作线程数,通常设置为CPU 数    

work_threads=8    

# group1的文件存储路径数    

store_path_count=1    

#  group1的文件存储路径,对应5.1节的创建结果    

store_path0=/home/data/fastdfs/storage    

# 对应trackerserver的VIP和端口(默认22122)    

tracker_server=192.168.31.204:22122    

# 运行FastDFS 的用户组    

run_by_group=fastdfs    

# 运行FastDFS 的用户    

run_by_user=fastdfs    

file_distribute_path_mode=1    

rotate_error_log=true    

 5.3安装nginx并添加fastdfs集成模块

 5.3.1创建软连接

Linux命令行代码  

ln -sv /usr/include/fastcommon /usr/local/include/fastcommon  

ln -sv /usr/include/fastdfs /usr/local/include/fastdfs  

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

 5.3.2安装nginx和fastdfs集成模块

Linux命令行代码  

cd /home/tools  

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

tar -zxvf nginx-1.9.5.tar.gz  

cd nginx-1.9.5  

# 指定nginx安装路径,并添加fastdfs集成模块  

./configure --prefix=/usr/local/nginx --add-module=/home/tools/fastdfs-nginx-module/src  

make && make install  

 5.3.3fastdfs集成配置

Linux命令行代码  

# 将fastdfs的nginx模块配置文件拷贝到/etc/fdfs,并修改  

cp -r /home/tools/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/  

vi /etc/fdfs/mod_fastdfs.conf  

 主要配置项如下:

Group1 mod_fastdfs.conf摘要代码  

connect_timeout=30    

# trackerserver的vip和端口    

tracker_server=192.168.31.204:22122    

# storageserver的端口(默认为23000)    

storage_server_port=23000    

# group1的名称,对应tracker的nginx配置    

group_name=g1    

url_have_group_name = true    

# group1的文件存储路径数    

store_path_count=1    

# group1的文件存储路径,对应5.1节的创建结果    

store_path0=/home/data/fastdfs/storage    

  5.3.4修改Nginx配置文件

Linux命令行代码  

vi /etc/nginx/nginx.conf  

主要配置项如下:

Group1 nginx.conf摘要代码  

worker_processes 8;    

error_log  /home/logs/nginx/error.log;      

pid        /home/logs/nginx/nginx.pid;     

worker_rlimit_nofile 51200;    

events {    

        use epoll;    

        worker_connections 51200;    

}    

http {    

        include mime.types;    

        default_type application/octet-stream;    

        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  /home/logs/nginx/access.log  main;      

        server {    

            listen 80;    

            server_name localhost;    

            location /g1/M00 {    

                # /g1/M00请求路径对应的文件存储的真实路径    

                root /home/data/fastdfs/storage/data;    

                # 加入fastdfs集成模块    

                ngx_fastdfs_module;    

        }    

    }    

}    

 5.3.5为group1文件存储的真实路径创建软连接

Linux命令行代码  

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

 注意:/data/M00目录不存在时需事先创建

5.3.6将fastdfs安装目录下的http.conf和mime.types拷贝到/etc/fdfs

Linux命令行代码  

cp -r /usr/local/FastDFS/conf/http.conf /etc/fdfs  

cp -r /usr/local/FastDFS/conf/mime.types /etc/fdfs  

    nginx启动时ngx_fastdfs_module需要加载这些文件

5.4服务设置

5.4.1交由service管理

Linux命令行代码  

# 将storage的启动脚本拷贝到/etc/init.d/目录后编辑  

cp /usr/local/FastDFS/init.d/fdfs_storaged /etc/init.d/  

vi /etc/init.d/fdfs_storaged  

   将 PRG=/usr/bin/fdfs_storaged 修改为 PRG=/usr/local/bin/fdfs_storaged(因为前面在安装脚本中修改了默认的安装路径为/usr/local)

依次执行:

Linux命令行代码  

service fdfs_storaged start  

service fdfs_storaged status  

 若出现如下示例信息:

fdfs_storaged (pid 8385) 正在运行...
则表示storage已在运行

5.4.2开机设置

编辑rc.local:

Linux命令行代码  

vi /etc/rc.d/rc.local  

 加入如下配置:

Linux命令行代码  

/etc/init.d/fdfs_storaged start  

6.Storage group2配置

 在StorageServer(244和245)上进行下列步骤。

6.1创建数据及日志存放目录

Linux命令行代码  

mkdir -p /home/data/fastdfs/storage  

mkdir -p /home/data/fastdfs/storage1  

6.2创建并编辑配置文件

Linux命令行代码  

# 进入/etc/fdfs目录后拷贝配置文件  

cd /etc/fdfs  

cp -r storage.conf.sample storage.conf  

# 编辑Storage配置文件  

vi /etc/fdfs/storage.conf  

 主要配置项如下:

Group2 storage.conf摘要代码  

# group2的名称,对应tracker的nginx配置  

group_name=g2  

# storage的数据及日志存放目录  

base_path=/home/data/fastdfs  

max_connections=1024  

# 工作线程数,通常设置为CPU 数  

work_threads=8  

# 配置group2的存储路径有两个  

store_path_count=2  

# group2的文件存储路径,对应6.1节的创建结果    

store_path0=/home/data/fastdfs/storage  

store_path1=/home/data/fastdfs/storage1  

# 对应trackerserver的VIP和端口(默认22122)    

tracker_server=192.168.31.204:22122  

# 运行FastDFS 的用户组  

run_by_group=fastdfs  

# 运行FastDFS 的用户  

run_by_user=fastdfs  

file_distribute_path_mode=1  

rotate_error_log=true  

6.3安装nginx并添加fastdfs集成模块

6.3.1创建软连接(与5.3.1节一样)

6.3.2安装nginx和fastdfs集成模块(与5.3.2节一样)

6.3.3fastdfs集成配置

Linux命令行代码  

  1. # 将fastdfs的nginx模块配置文件拷贝到/etc/fdfs,并修改  

  2. cp -r /home/tools/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/  

  3. vi /etc/fdfs/mod_fastdfs.conf  

 主要配置项如下:

Group2 mod_fastdfs.conf摘要代码  

connect_timeout=30  

# trackerserver的vip和端口  

tracker_server=192.168.31.204:22122  

# storageserver的端口(默认为23000)  

storage_server_port=23000  

# group2的名称,对应tracker的nginx配置  

group_name=g2  

url_have_group_name = true  

# group2的文件存储路径数  

store_path_count=2  

# group2的文件存储路径,对应6.1节的创建结果  

store_path0=/home/data/fastdfs/storage  

store_path1=/home/data/fastdfs/storage1  

 6.3.4修改Nginx配置文件

Linux命令行代码  

vi /etc/nginx/nginx.conf  

 主要配置项如下:

Group2 nginx.conf摘要代码  

worker_processes 8;  

error_log  /home/logs/nginx/error.log;      

pid        /home/logs/nginx/nginx.pid;   

worker_rlimit_nofile 51200;  

events {  

    use epoll;  

    worker_connections 51200;  

}  

http {  

    include mime.types;  

    default_type application/octet-stream;  

    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  /home/logs/nginx/access.log  main;      

    server {  

        listen 80;  

        server_name localhost;  

        location /g2/M00{  

                        # /g2/M00请求路径对应的文件存储的真实路径    

            root /home/data/fastdfs/storage/data;  

                        # 加入fastdfs集成模块    

            ngx_fastdfs_module;  

        }  

        location /g2/M01{  

                        # /g2/M01请求路径对应的文件存储的真实路径    

            root /home/data/fastdfs/storage1/data;  

                        # 加入fastdfs集成模块    

            ngx_fastdfs_module;  

        }  

    }  

}  

 6.3.5为group2文件存储的真实路径创建软连接

Linux命令行代码  

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

ln -s /home/data/fastdfs/storage1/data /home/data/fastdfs/storage1/data/M01  

 注意:/data/M00和/data/M01不存在时需事先创建

6.3.6将fastdfs安装目录下的http.conf和mime.types拷贝到/etc/fdfs(与5.3.6节一样)

6.4服务设置(与5.4节一样)

7.在TrackerServer上安装配置Keeplived实现主从切换

    和http://code727.iteye.com/blog/2248384第3节的内容几乎一样,区别在于Master和Backup上的keepalived.conf有所不同

Master keepalived.conf代码  

! Configuration File for keepalived    

    

global_defs {    

   notification_email {    

     code727@163.com    

   }    

   notification_email_from pub@easymobi.cn    

   smtp_server 127.0.0.1    

   smtp_connect_timeout 30    

   router_id LVS_DEVEL    

}    

    

vrrp_script chk_http_port {     

   script "/opt/nginx_keepalived.sh"     

   interval 2       

    weight 3     

}     

    

vrrp_instance VI_1 {    

    state Master    

    interface eth2    

    virtual_router_id 53     

    mcast_src_ip 192.168.31.240    

    priority 100    

    advert_int 1    

    authentication {    

        auth_type PASS    

        auth_pass 1111222    

    }    

    virtual_ipaddress {    

        192.168.31.204    

    }    

    track_script {    

        chk_http_port    

    }    

}   

Backup keepalived.conf代码  

! Configuration File for keepalived    

    

global_defs {    

   notification_email {    

     code727@163.com    

   }    

   notification_email_from pub@easymobi.cn    

   smtp_server 127.0.0.1    

   smtp_connect_timeout 30    

   router_id LVS_DEVEL    

}    

    

vrrp_script chk_http_port {     

   script "/opt/nginx_keepalived.sh"     

   interval 2       

    weight 3     

}     

    

vrrp_instance VI_1 {    

    state Backup    

    interface eth3  

    virtual_router_id 53     

    mcast_src_ip 192.168.31.241    

    priority 99    

    advert_int 1    

    authentication {    

        auth_type PASS    

        auth_pass 1111222    

    }    

    virtual_ipaddress {    

        192.168.31.204    

    }    

    track_script {    

        chk_http_port    

    }    

}   

 8.重启系统后测试

8.1在tracker上利用fdfs_upload_file来上传测试图片

8.1.1配置

Linux代码  

# 进入/etc/fdfs目录后拷贝client.conf  

cd /etc/fdfs  

cp -r client.conf.sample client.conf  

# 编辑  

vi /etc/fdfs/client.conf  

Client.conf摘要代码  

connect_timeout=30  

base_path=/home/data/fastdfs  

tracker_server=192.168.31.204:22122  

http.tracker_server_port=80  

log_level=info  

 8.1.2命令行上传

Fastdfs客户端上传文件代码  

fdfs_upload_file /etc/fdfs/client.conf /home/test.jpg  

 上传成功后会返回下列示例的文件相对路径:

g2/M00/00/00/wKgf9FZC0NCAesDuAARUS1ON6x4281.jpg

8.1.3测试

1)可以通过TrackerServer来访问,即http://192.168.31.240/g2/M00/00/00/wKgf9FZC0NCAesDuAARUS1ON6x4281.jpg和http://192.168.31.241/g2/M00/00/00/wKgf9FZC0NCAesDuAARUS1ON6x4281.jpg
2)可以通过TrackerServer绑定的VIP来访问,即http://192.168.31.204/g2/M00/00/00/wKgf9FZC0NCAesDuAARUS1ON6x4281.jpg

3)文件的相对路径是以“g2/M00”开头的,这匹配于6.3.4节中关于StorageServer group2的nginx。因此,在244和255的/home/data/fastdfs/storage/data/00/00目录中能找到上传的文件;
4)可以直接通过StorageServer group2来访问,即http://192.168.31.244/g2/M00/00/00/wKgf9FZC0NCAesDuAARUS1ON6x4281.jpg和http://192.168.31.245/g2/M00/00/00/wKgf9FZC0NCAesDuAARUS1ON6x4281.jpg。但StorageServer group1(将ip最后一位换成242和243)不能访问,因为文件上传到这两台服务器上。

5)停掉两个TrackerServer上的任意一个Keepalived,第1)- 第4)步的测试结果不受影响;

6)停掉两个TrackerServer上的任意一个Tracker,除用被停Tracker的URL不能访问外,其余不受影响;
7)停掉两个StorageServer group2上的任意一个Storage,除用被停Storage的URL不能访问外,其余不受影响;

9.总结

     FastDFS还提供了一套专有的API,通过客户端程序调用API可以轻松实现文件的上传、下载和删除等功能。通过情况下,我们都是按照统一的URL地址(此架构为http://192.168.31.204)来实现上述功能,即所有的功能都是通过TrackerServer来进行的。

      为了分摊TrackerServer的并发压力,实现类似于数据库的“读写分离”,我们可以直接访问具体某一台StorageServer来读取文件,但这样做会引起两个问题:第一,脱离了TrackerServer的调度管理,不能控制StorageCluster的负载均衡。第二,StorageServer的单点问题,当要访问的StorageServer处于不可用的状态时会使应用程序报错。因此,可以为每一个StorageServer增加一台备份机,并通过Keepalived来实现故障切换。或在应用程序层面做如下判断处理:

Fastdfs伪代码代码  

if 从StorageServer可访问 then end;  

else 通过TrackerServer访问 end;  

      TrackerServer在整个架构体系中主要做调度工作,在访问上起负载均衡的作用。其中负载策略可以通过tracker.conf的如下几个配置项实现:

配置项值/作用
store_lookup

存储文件时选择group的策略

0:轮训策略

1:指定某一个组

2:负载均衡,选择空闲空间最大的group

store_group如果store_lookup选择了1,则此配置项必填,其值对应一个存在的group名称
store_server

选择哪台storage做主storage,当一个文件上传到主storage后,就由这台机器同步文件到group内的其他storage上

0:轮训策略

1:根据ip地址排序,第一个

2:根据优先级排序,第一个

download_server

选择那个storage作为主下载服务器

0:轮训策略

1:将主上传storage作为主下载服务器

store_path

选择文件上传到storage中的哪个(目录/挂载点),storage可以有多个存放文件的base path

0:轮训策略

2:负载均衡,选择空闲空间最大的

reserved_storage_space系统预留空间,当一个group中的任何storage的剩余空间小于定义的值,整个group就不能上传文件了。例如:reserved_storage_space=4GB

关于FastDFS配置文件的更多详情可以参考:

http://blog.163.com/023_dns/blog/static/11872736620121020105322220/

FastDFS代码仓库:

https://sourceforge.net/projects/fastdfs/

https://github.com/happyfish100

FastDFS论坛:

http://bbs.chinaunix.net/forum-240-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值