目录
简介
上传交互过程
下载交互过程
Tracker安装
Storage安装
fastdfs-nginx-module安装:
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文 件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点存储文件,完成文件管理的所有功能:就是这样的存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。
跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
1. client询问tracker上传到的storage,不需要附加参数;
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件上传。
1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件下载。
需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。
下面开始正式搭建:
1、先下载以下文件
参考网址:https://github.com/happyfish100/fastdfs/releases
2、使用yum -y install unzip zip安装解压zip文件的命令
root@iZ94zf4v7s1Z:/usr/local/fastdfs# yum -y install unzip zip
报错:The program 'yum' is currently not installed. You can install it by typing: apt-get install yum
先安装yum命令
root@iZ94zf4v7s1Z:/usr/local/fastdfs# apt-get install yum
成功后再重新执行
root@iZ94zf4v7s1Z:/usr/local/fastdfs# yum -y install unzip zip
3、解压libfastcommon-master.zip
root@iZ94zf4v7s1Z:/usr/local/fastdfs# unzip libfastcommon-master.zip
4、安装libfastcommon-master
解压完成后就可以进行编译安装了,分别执行./make.sh和./make.sh install
如果报错缺少gcc编译器环境,那么使用yum -y install gcc-c++ 安装gcc,然后使用./make.sh再次编译,不出现报错证明暗转成功,使用./make.sh install命令,出现以下截图,证明安装成功
至此libfastcommon就已经安装成功了,但注意一下上图中红色框标注的内容,libfastcommon.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.so
执行ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so时会报错:
ln: failed to create symbolic link `/usr/lib/libfastcommon.so': File exists
这个错误没特别大的影响 不影响整个环境的搭建,可以忽略不计.。
如果真的需要修改的话,在下面安装编译玩fastdfs的压缩包时找到
client/fdfs_link_library.sh.in,编辑修改红色区域替换为:
ln -fs $TARGET_LIB/libfastcommon.so.1 /usr/lib/libfastcommon.so ln -fs $TARGET_LIB/libfdfsclient.so.1 /usr/lib/libfdfsclient.so
记得先把原来的备份防止出错:
ln -fs $TARGET_LIB/libfastcommon.so.1 /usr/lib64/libfastcommon.so
ln -fs $TARGET_LIB/libfdfsclient.so.1 /usr/lib64/libfdfsclient.so
再执行ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
接下来安装FastDFS:
5、解压压缩文件fastdfs-5.11.tar.gz
root@iZ94zf4v7s1Z:/usr/local/fastdfs# tar -zxvf fastdfs-5.11.tar.gz
6、进入fastdfs-5.11进行编译
root@iZ94zf4v7s1Z:/usr/local/fastdfs# cd fastdfs-5.11/
root@iZ94zf4v7s1Z:/usr/local/fastdfs/fastdfs-5.11# ./make.sh
root@iZ94zf4v7s1Z:/usr/local/fastdfs/fastdfs-5.11# ./make.sh install
看到编译成功,日志出现如下信息:
已经安装在/etc/fdfs中,我们看一下该目录下的文件
root@iZ94zf4v7s1Z:/usr/lib64# cd /etc/fdfs/
root@iZ94zf4v7s1Z:/etc/fdfs# ll
如上图,安装成功后就会生成如上的3个.sample文件(示例配置文件),我们再分别拷贝出3个后面用的正式的配置文件:
cp client.conf.sample client.conf cp storage.conf.sample storage.conf cp tracker.conf.sample tracker.conf
到这里已经安装完FastDFS,接下来是安装Tracker和Storage
在配置Tracker之前,首先需要创建Tracker服务器的文件路径,即用于存储Tracker的数据文件和日志文件等,我这里选择在/opt目录下创建一个fastdfs_tracker目录用于存放Tracker服务器的相关文件:
进入opt目录创建fastdfs_tracker目录
root@iZ94zf4v7s1Z:/# cd /opt
root@iZ94zf4v7s1Z:/opt# mkdir fastdfs_tracker
接下来就要重新编辑上一步准备好的/etc/fdfs目录下的tracker.conf配置文件,打开文件后依次做以下修改:
disabled=false #启用配置文件(默认启用)
port=22122 #设置tracker的端口号,通常采用22122这个默认端口
base_path=/opt/fastdfs_tracker #设置tracker的数据文件和日志目录
http.server_port=4418#设置http端口号,默认为8080
由于有多个这样的文件需要修改,建议使用xshell将刚刚我们复制的附件直接通过ftp传输到我们Windown桌面
按照上面的进行修改
配置完成后就可以启动Tracker服务器了,但首先依然要为启动脚本创建软引用,因为fdfs_trackerd等命令在/usr/local/bin中并没有,而是在/usr/bin路径下:
ln -s /usr/bin/fdfs_trackerd /usr/local/bin ln -s /usr/bin/stop.sh /usr/local/bin ln -s /usr/bin/restart.sh /usr/local/bin
最后通过命令启动Tracker服务器:
service fdfs_trackerd start
如果启动命令执行成功,那么同时在刚才创建的tracker文件目录/opt/fastdfs_tracker中就可以看到启动后新生成的data和logs目录,tracker服务的端口也应当被正常监听,最后再通过netstat命令查看一下端口监听情况:
netstat -unltp|grep fdfs
确认tracker正常启动后可以将tracker设置为开机启动,打开/etc/rc.d/rc.local并在其中加入以下配置:
service fdfs_trackerd start
如果重启后发现未能自动启动则通过命令ll /etc/rc.d/rc.local检查一下rc.local是否具备可执行权限,若是无可执行权限则通过chmod +x /etc/rc.d/rc.local进行授权,如下图:
Tracker至此就配置好了,接下来就可以配置FastDFS的另一核心——Storage。
同理,步骤基本与配置Tracker一致,首先是创建Storage服务器的文件目录,需要注意的是同Tracker相比我多建了一个目录,因为Storage还需要一个文件存储路径,用于存放接收的文件:
mkdir /opt/fastdfs_storage
mkdir /opt/fastdfs_storage_data
root@iZ94zf4v7s1Z:/opt# mkdir fastdfs_storage
root@iZ94zf4v7s1Z:/opt# mkdir fastdfs_storage_data
接下来修改/etc/fdfs目录下的storage.conf配置文件,打开文件后依次做以下修改:
disabled=false #启用配置文件(默认启用)
group_name=group1 #组名,根据实际情况修改
port=23000 #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
base_path=/opt/fastdfs_storage #设置storage数据文件和日志目录
store_path_count=1 #存储路径个数,需要和store_path个数匹配
store_path0=/opt/fastdfs_storage_data #实际文件存储路径
tracker_server=192.168.111.11:22122 #tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功(此处的ip是我的CentOS虚拟机ip)
http.server_port=4419 #设置 http 端口号
配置完成后同样要为Storage服务器的启动脚本设置软引用:
ln -s /usr/bin/fdfs_storaged /usr/local/bin
接下来就可以启动Storage服务了:
service fdfs_storaged start
启动成功,/opt/fastdfs_storage中就可以看到启动后新生成的data和logs目录,端口23000也应被正常监听,还有一点就是文件存储路径下会生成多级存储目录,那么接下来看看是否启动成功了:
/opt/fastdfs_storage/data目录下生成好的pid文件和dat文件,那么再看一下实际文件存储路径下是否有创建好的多级目录呢。查看是否成功启动并监听端口:
如上图,可以看到此时已经正常监听tracker的22122端口和storage的23000端口,至此storage服务器就已经配置完成,确定了storage服务器启动成功后,还有一项工作就是看看storage服务器是否已经登记到 tracker服务器(也可以理解为tracker与storage是否整合成功),运行以下命令:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
添加开机启动,打开/etc/rc.d/rc.local并将如下配置追加到文件中:
service fdfs_storaged start
测试配置
测试时需要设置客户端的配置文件,编辑/etc/fdfs目录下的client.conf 文件,打开文件后依次做以下修改:
base_path=/opt/fastdfs_tracker #tracker服务器文件路径
tracker_server=120.76.189.0:22122 #tracker服务器IP地址和端口号
如果是阿里云这些云服务器,那么这个ip地址为公网ip地址(除了这个之外其余的配置文件均是内网地址)
http.tracker_server_port=4418# tracker 服务器的 http 端口号,必须和tracker的设置对应起来
然后通过执行客户端上传命令尝试上传:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /opt/1.jpg
4.0.5版本开始移除了自带的HTTP支持(因为之前自带的HTTP服务较为简单,无法提供负载均衡等高性能服务),nginx上使用FastDFS的模块fastdfs-nginx-module,下载地址如下:https://github.com/happyfish100/fastdfs-nginx-module,这样做最大的好处就是提供了HTTP服务并且解决了group中storage服务器的同步延迟问题,接下来就具体记录一下fastdfs-nginx-module的安装配置过程。
GitHub上下载好fastdfs-nginx-module上传到我们的CentOS中就可以开始安装了,在安装nginx之前需要先安装一些模块依赖的lib库,安装代码:
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
依次装好这些依赖之后就可以开始安装nginx了。
storage nginx
首先是为storage服务器安装nginx,首先将nginx和fastdfs-nginx-module的安装包上传。
解压
unzip fastdfs-nginx-module-master.zip
./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs/fastdfs-nginx-module-master/src
执行后报错:
FastDFS安装Nginx的模块,fastdfs-nginx-module报错:fdfs_define.h:15:27: 致命错误:common_define.h:没有那个文件或目录。
编辑fastdfs-nginx-module-master文件:
改变的文件内容
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
再执行
./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs/fastdfs-nginx-module-master/src 后 make
修改nginx目录下的nginx.conf文件
加上:
server {
listen 9999;
location ~/group1/M00 {
root /opt/fastdfs_storage_data/data;
ngx_fastdfs_module;
}
}
root@iZ94zf4v7s1Z:/soft/nginx/nginx-1.9.9/objs# cd /usr/local/nginx/conf/
然后进入FastDFS安装时的解压过的目录,将http.conf和mime.types拷贝到/etc/fdfs目录下
把fastdfs-nginx-module安装目录中src目录下的mod_fastdfs.conf也拷贝到/etc/fdfs目录下
对mod_fastdfs.conf文件进行修改
base_path=/opt/fastdfs_storage #保存日志目录
tracker_server=xxxxx:22122 #tracker服务器的IP地址以及端口号
storage_server_port=23000 #storage服务器的端口号
url_have_group_name = true #文件 url 中是否有 group 名
store_path0=/opt/fastdfs_storage_data # 存储路径
group_count = 3 #设置组的个数,事实上这次只使用了group1
设置了group_count = 3,接下来就需要在文件尾部追加这3个group setting
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
接下来还需要建立 M00 至存储目录的符号连接:
ln -s /opt/fastdfs_storage_data/data /opt/fastdfs_storage_data/data/M00
进入安装好Nginx的sbin目录下:
./nginx -s start
出现上图的结果证明Nginx启动成功。
浏览器访问测试Nginx是否能访问。出现下图证明能访问Nginx
使用命令:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /opt/1.jpg
重新上传一张图片然后进行访问
如果不想暴露端口的,可以再配置一个Nginx进行转发,具体的方法自己百度查一下,都有的。
1、在sbin目录下启动nginx./nginx -s reload出现报错信息:
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
执行:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
/usr/local/nginx-tracher/sbin/nginx -c /usr/local/nginx-tracher/conf/nginx.conf
2、Linux cp: omitting directory错误的原因及解决办法
在Linux下拷贝文件夹的时候出现cp:omitting directory xxx的错误 。
原因:因为在websocketServer文件夹下面还存在着其他的文件夹,所以不能直接拷贝到目标文件夹中。
解决方法:使用递归拷贝,在cp命令后面加上 -r 参数。 -r 表示递归的意思。
-p参数解析:
此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。
3、文件服务器添加第三方组件
./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=/usr/local/fastdfs/fastdfs-nginx-module-master/src
./configure --prefix=/usr/local/nginx-tracher --add-module=/usr/local/fastdfs/fastdfs-nginx-module-master/src