前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式文件系统FastDFS安装配置

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

作者头像
BUG弄潮儿
发布2022-06-30 15:05:35
9440
发布2022-06-30 15:05:35
举报
文章被收录于专栏:JAVA乐园

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] "

'status body_bytes_sent "

'"

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] "

'status body_bytes_sent "

'"

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 path0:轮训策略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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BUG弄潮儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档