一、背景html
FastDFS 是一款开源的、分布式文件系统(Distributed File System),由淘宝开发平台部资深架构师余庆开发。该开源项目的主页是 http://code.google.com/p/fastdfs 。能够经过 fastdfs.sourceforge.net 下载。FastDFS论坛是 http://www.csource.org ,目前是指向 ChinaUnix 开源项目孵化平台的一个板块 FastDFS,网址为 bbs.chinaunix.net/forum-240-1.html 。(摘自 http://blog.csdn.net/poechant/article/details/6977407)java
二、上传流程linux
咱们能够经过 FastDFS 对文件的上传过程,来初步了解 FastDFS 的基本架构。首先客户端 client 发起对 FastDFS 的文件传输动做,是经过链接到某一台 Tracker Server 的指定端口来实现的,Tracker Server 根据目前已掌握的信息,来决定选择哪一台 Storage Server ,而后将这个Storage Server 的地址等信息返回给 client,而后 client 再经过这些信息链接到这台 Storage Server,将要上传的文件传送到给 Storage Server上。nginx
上传流程简述:c++
下载流程简述:vim
三、架构简析centos
FastDFS 是包括一组 Tracker Server 和 Storage Server 的。Tracker Server 与 Storage Server 之间不直接通讯,其基本的信息由配置文件在系统启动加载时获知。多台 Tracker Server 之间保证了 Tracker 的分布式,Tracker Server 之间是对等的,防止了单点故障。 Storage Server 是分红多个 Group,每一个 Group 中的Storage 都是互相备份的,也就是说,若是 Group1 有 Storage一、Storage二、Storage3,其容量分别是100GB、100GB、100GB,那么 Group1 的存储能力是 100GB,而不是 300GB,这就是互相备份的意思。进一步说,整个 Group 的存储能力由该组中该储能力最小的 Storage 决定。多个 Group 之间的存储方式,能够采用 round robin(轮训)、load balanced(负载均衡)或指定 Group 的方式。浏览器
术语缓存
FastDFS两个主要的角色:Tracker Server 和 Storage Server
Tracker Server:跟踪服务器,主要负责调度storage节点与client通讯,在访问上起负载均衡的做用,和记录storage节点的运行状态,是链接client和storage节点的枢纽。
Storage Server:存储服务器,保存文件和文件的meta data(元数据)
Group:文件组,也能够称为卷。同组内服务器上的文件是彻底相同的,作集群时每每一个组会有多台服务器,上传一个文件到同组内的一台机器上后,FastDFS会将该文件即时同步到同组内的其它全部机器上,起到备份的做用。
meta data:文件相关属性,键值对(Key Value Pair)方式,如:width=1024, height=768。和阿里云OSS的meta data类似。服务器
五、安装环境准备
提示:本例安装目标为:一台虚拟机(centos 7)安装部署一个 tracker 和一个组 group1(其中包含两个 storage)
linux 基础环境:centos 7 minimal(官方历史版本:http://vault.centos.org/)
相关源码包(此处省略经过 ftp 传送源码包,有兴趣的可移步至:)
linux 中须要事先准备相关程序(linux 联网直接安装)
yum -y install gcc (必须在最开始的环境里就已经安装了,不然上面的源码包安装过程会出错)
yum -y install gcc-c++(必须在最开始的环境里就已经安装了,不然上面的源码包安装过程会出错)
yum -y install vim (可选择,文本编辑器)
perl-5.20.2
nginx 负载均衡环境部署先的依赖程序准备
六、文件夹初始化
建立 tracker 所需的文件夹 base_path:mkdir /opt/fastdfs_tracker
建立 storage所需的日志目录:mkdir /opt/fastdfs_storage_info (这个目录是用来记录 storage 同步文件的日志)
建立 storage 存储所需的文件目录:mkdir /opt/fastdfs_storage_data (此目录存储文件)
七、 安装 libfastcommon-1.0.7
解压:tar -zxvf libfastcommonV1.0.7.tar.gz
进入安装文件夹:cd libfastcommon-1.0.7
依次执行 make 命令:./make.sh 和 ./make.sh install
从安装记录能够看出:安装路径为 /usr/lib64,可是FastDFS主程序设置的默认安装目录是lib目录:/usr/local/lib,因此要建立链接:
八、安装 FastDFS-5.0.5
解压 tar 包:tar -zxvf FastDFS_v5.05.tar.gz
进入安装文件夹:cd FastDFS
依次执行 make 命令:./make.sh 和 ./make.sh install
安装过程没有错误提示,再检查 /etc/fdfs 目录中是否含有如下文件,若是有则安装成功:
九、配置 tracker
9.1 进入 /etc/fdfs 文件夹,执行以下命令: cp tracker.conf.sample tracker.conf
9.2 编辑 tracker.conf 文件:vim tracker.conf
9.3 具体配置信息:
a. disabled=false # 启用配置文件
b. port=22122 # 设置 tracker 端口好,通常采用默认端口 22122
c. base_path=/opt/fastdfs_tracker # 设置 tracker 的数据文件和日志目录
d. http.server_port=80 # fastdfs5.0.5版本没有,保险起见,这里设置成 80 端口
其余配置信息保持默认,不用动。
9.4 启动 tracker: /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
检测是否启动成功:
方法1: netstat -unltp|grep fdfs ,看 22122 端口监听状况
方法2: 经过命令查看 tracker 启动日志:tail -100f /opt/fastdfs_tracker/logs/trackerd.log
9.5 若是成功启动 tracker,将启动命令添加到服务器的开机启动配置中:
vim /etc/rc.d/rc.local
在文本中添加这行,并保存:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
十、配置 stroage(和 trcker 配置相似)
10.1 进入 /etc/fdfs 文件夹,执行命令: cp storage.conf.sample storage.conf
10.2 编辑 storage.conf 文件,执行命令: vim storage.conf
10.3 具体配置信息:
a. disabled=false #启用配置文件
b. group_name=group1 #组名,这里本例只配置一组,因此命名为 group1
c. port=23000 #这里设置 storage 端口号,23000是默认端口,同一个组的 storage 端口号必须一致
d. base_path=/opt/fastdfs_storage_info #记录 storage 日志(预先已经建立的文件夹)
e. store_path_count=1 #存储的路径个数,个数须要和 store_path 的个数一致
f. store_path0=/opt/fastdfs_storage_data #存储路径,这里是一个 group1 组配置了两个 storage
store_path1=/opt/fastdfs_storage_data
g. tracker_server=192.168.25.131:22122 # tracker 服务器的 ip 和端口号,本 ip 是本 linux的 ip
h. http.server_port=80 # 设置 http 端口号,fastdfs-5.0.5 这个版本已经不用配置,保险起见,就配置一下吧
10.4 启动 tracker:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
检测是否启动成功:
方法1: netstat -unltp|grep fdfs ,看 23000 端口监听状况(配置的是 什么端口就监听哪一个端口)
方法2: 经过命令查看 tracker 启动日志:tail -100f /opt/fastdfs_storage_info/logs/storage.log
启动成功以后,能够经过 fdfs_monitor 查看集群状况:stroage 是否已经注册到服务器中:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf # 查看192.168.25.131:23000 是 “ ACTIVE ”状态便可
10.5 启动没有问题,则将 stroage 启动命令配置到服务器启动项里: vim /etc/rc.d/rc.local
添加这行命令,并保存: /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
===================================分割线====================================
以上安装配置步骤就是 fastdfs 的配置。
storage 中安装 nginx 目的是为了提供 http 的访问服务,同时解决 group 和 storage 同步延迟问题,
tracker 中安装 nginx 目的是为了提供 http 访问的反向代理、负载均衡及缓存服务。
===================================分割线====================================
十一、nginx 安装前的环境准备
yum install -y gcc # 前面步骤已安装,略过
yum install -y gcc-c++ # 前面步骤已安装,略过
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
十二、 在 storage 中安装 nginx
12.1 建立 nginx 默认安装文件夹: mkdir /usr/local/nginx
12.2 解压 tar 包:
tar -zxvf nginx1.7.8.tar.gz # 获得 nginx-1.7.8 文件目录
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz # 获得 fastdfs-nginx-module 文件目录
12.3 修改 fastdfs-nginx-module 文件目录中的 config 文件:
cd /fastdfs-nginx-module/src
vim config
将 CORE_INCS中 的参数路径修改一下,local 所有不要: CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
12.4 创建软链接,在第七步骤中已经建立,可略过:
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so (第七步骤中已经建立,可略过)
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so (第七步骤中已经建立,可略过)
12.5 进入nginx 安装文件夹:cd nginx-1.7.8
执行命令:./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src
备注:执行命令中的 add-module 参数为 fastdfs-nginx-module 文件目录路径,这里是 /usr/local/src 目录下的。
命令执行完毕以后,依次执行 make 和 make install,没有错误提示表示安装成功。
12.6 执行命令 cd /usr/local/nginx/conf, 编辑 vim nginx.conf 文件:
在 http 语句块中将 listen 修改为:listen 80;
在 server 语句块中添加:
location /group1/M00 {
root/fdfs/storage/data;
ngx_fastdfs_module;
}
注意:这里 group 组名是上面配置的 group1,要和第 10 步骤的 10.3 步骤中的配置组信息一致
若是 nginx 成功启动,浏览器不能访问,就在 nginx.conf 这个配置文件中,把第一行的注解打开,配置成:user root; 便可。
12.7 执行命令:cd /usr/local/rsrc/FastDFS/conf ,将 conf 文件夹目录下的 http.conf 和 mime.types 复制到 /etc/fdfs/ 下,
cp http.conf /etc/fdfs/
cp mime.types /etc/fdfs/
若是不执行这个操做,启动 nginx 会报异常
12.8 执行命令:cd/usr/local/rsrc/fastdfs-nginx-module/src
将 conf 文件夹下的 mod_fastdfs.conf 文件复制到 /etc/fdfs/下:cp mod_fastdfs.conf /etc/fdfs/
12.9 在 /etc/fdfs/ 文件目录下,打开编辑:vim mod_fastdfs.conf
a. base_path=/opt/fastdfs_storage_info # 保存日志目录
b. tracker_server=192.168.25.131:22122 # tracker的ip和端口
c. storage_server_port=23000 # storage服务器的端口号
d. group_name=group1 #当前服务器的 group名称
e. url_have_group_name= true # 文件 url中是否有 group名称
f. store_path_count=2 #存储路径个数,必须和 下面的store_path个数一致
g. store_path0=/opt/fastdfs_storage_data #文件存储路径
store_path1=/opt/fastdfs_storage_data #本例设置了两个stroage,和第 10 步骤的 10.3 步骤配置一致
h. http.need_find_content_type=true #从文件扩展名查找文件类型,这个配置 fastdfs-5.0.5没有,保险起见,仍是配置吧
i. group_count= 1 # 设置组的个数 这里设置了一个组 group1 因此配置为 1
j. 在配置信息的最后,将注解的 group 信息展开,这里设置的是一个组,因此只配置一个:
注意组的名称 端口 存储路径个数 和存储路径
12.10 建立软链接: ln -s /opt/fastdfs_storage_data/data /opt/fastdfs_storage_data/data/M00
12.11 启动 nginx:/usr/local/nginx/sbin/nginx
提示:/usr/local/nginx/sbin/nginx -s stop # 中止nginx
检查是否启动成功:netstat -anp | grep 80,若是有宽口冲突,也能够检测到,kill -9 对应的pid 便可。
启动成功只会提示一个 pid,须要本身经过浏览器验证。
常见问题:
若是上面配置都完整无误,浏览器仍是没法访问,则能够 ping 一下网络,再 telnet 一下端口,颇有多是防火墙的问题:
添加开放端口 firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
删除开放端口 firewall-cmd --zone=public --remove-port=80/tcp --permanent
添加或者删除开放端口以后须要更新防火墙规则: firewall-cmd --reload
查看全部打开的端口: firewall-cmd --zone=public --list-ports 或者 firewall-cmd --list-services
显示防火墙状态是否运行:firewall-cmd --state 或者 systemctl status firewalld.service
用了一天时间,折腾好几回,又是重装系统又是查资料的,感受能这么细致的讲解的真很少,因而就想把这个心得写下来,让读者们少走坑。
经过 java 代码测试一番,成功!
1三、tracker 中安装 nginx
待续…