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
yum install gcc gcc+ gcc-c++ yum install openssl openssl-devel yum install pcre pcre-devel yum install perl perl-devel2.2安装libfastcommon
wget https://github.com/happyfish100/libfastcommon/archive/master.zip unzip master.zip cd libfastcommon-master/ ./make.sh ./make.sh installlibfastcommon.so默认安装到了/usr/lib64/libfastcommon.so,而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.so3.安装FastDFS 在所有 TrackerServer和SrorageServer上进行下列步骤。
# 将FastDFS安装文件解压到/usr/local目录后进入 tar -zxvf FastDFS_v5.07.tar.gz -C /usr/local cd /usr/local/FastDFS3.1修改make.sh
vi make.sh将TARGET_PREFIX=$DESTDIR/usr 修改为 TARGET_PREFIX=$DESTDIR/usr/local
3.2编译安装
./make.sh ./make.sh install4.tracker配置
4.1创建数据及日志存放目录
mkdir -p /home/data/fastdfs/tracker4.2创建并编辑配置文件
# 进入/etc/fdfs目录后拷贝配置文件 cd /etc/fdfs cp -r tracker.conf.sample tracker.conf # 编辑Tracker配置文件 vi 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=true4.3安装并配置nginx
# 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服务设置
# 将tracker的启动脚本拷贝到/etc/init.d/目录后编辑 cp /usr/local/FastDFS/init.d/fdfs_trackerd /etc/init.d/ vi /etc/init.d/fdfs_trackerd
service fdfs_trackerd start service fdfs_trackerd status若出现如下示例信息:
vi /etc/rc.d/rc.local加入如下配置:
/etc/init.d/fdfs_trackerd start5.Storage group1配置
mkdir -p /home/data/fastdfs/storage5.2 创建并编辑配置文件
# 进入/etc/fdfs目录后拷贝配置文件 cd /etc/fdfs cp -r storage.conf.sample storage.conf # 编辑Storage配置文件 vi /etc/fdfs/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
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.so5.3.2 安装 nginx和fastdfs集成模块
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 install5.3.3 fastdfs集成配置
# 将fastdfs的nginx模块配置文件拷贝到/etc/fdfs,并修改 cp -r /home/tools/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/ vi /etc/fdfs/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
vi /etc/nginx/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;
}
}
}
ln -s /home/data/fastdfs/storage/data /home/data/fastdfs/storage/data/M00注意:/data/M00目录不存在时需事先创建
cp -r /usr/local/FastDFS/conf/http.conf /etc/fdfs cp -r /usr/local/FastDFS/conf/mime.types /etc/fdfsnginx启动时ngx_fastdfs_module需要加载这些文件
# 将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)
service fdfs_storaged start service fdfs_storaged status若出现如下示例信息:
则表示storage已在运行
vi /etc/rc.d/rc.local加入如下配置:
/etc/init.d/fdfs_storaged start
mkdir -p /home/data/fastdfs/storage mkdir -p /home/data/fastdfs/storage16.2 创建并编辑配置文件
# 进入/etc/fdfs目录后拷贝配置文件 cd /etc/fdfs cp -r storage.conf.sample storage.conf # 编辑Storage配置文件 vi /etc/fdfs/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=true6.3 安装 nginx并添加fastdfs集成模块
# 将fastdfs的nginx模块配置文件拷贝到/etc/fdfs,并修改 cp -r /home/tools/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/ vi /etc/fdfs/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/storage16.3.4修改Nginx配置文件
vi /etc/nginx/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文件存储的真实路径创建软连接
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不存在时需事先创建
! 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
}
}
! 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.重启系统后测试
# 进入/etc/fdfs目录后拷贝client.conf cd /etc/fdfs cp -r client.conf.sample client.conf # 编辑 vi /etc/fdfs/client.conf
connect_timeout=30 base_path=/home/data/fastdfs tracker_server=192.168.31.204:22122 http.tracker_server_port=80 log_level=info8.1.2命令行上传
fdfs_upload_file /etc/fdfs/client.conf /home/test.jpg上传成功后会返回下列示例的文件相对路径:
2) 可以 通过 TrackerServer绑定的VIP来访问,即 http://192.168.31.204/ g2/M00/00/00/ wKgf9FZC0NCAesDuAARUS1ON6x4281.jpg
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)不能访问,因为文件上传到这两台服务器上。
7)停掉两个 StorageServer group2上的任意一个 Storage,除用被停 Storage的URL不能访问外,其余不受影响;
if 从StorageServer可访问 then end; else 通过TrackerServer访问 end;
| 配置项 | 值/作用 |
| 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分布式文件系统的部署与配置流程,包括安装依赖、安装FastDFS、配置Tracker与Storage服务器、Keeplived主从切换以及测试与总结。通过统一的URL地址实现文件上传、下载和管理,同时提供了读写分离的优化方案。
1059

被折叠的 条评论
为什么被折叠?



