安装FastDFS

FastDFS开发者的GitHub地址为:https://github.com/happyfish100
打开上述链接,我们点击fastdfs–>release,发现最新版的FastDFS为2017年上传的V5.11,接下来我们来安装最新版的FastDFS。
在安装前,我们新建一个目录,用来存储所有下载文件:mkdir /download,进入download目录完成接下来操作:cd /download

1. 下载安装 libfastcommon

libfastcommon是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库,是FastDFS的基础环境,安装即可 。
1.1 下载 libfastcommon 压缩包:wget https://github.com/happyfish100/libfastcommon/archive/V1.0.36.tar.gz
1.2 解压 libfastcommon 压缩包:tar -zxvf V1.0.36.tar.gz
1.3 进入解压目录编译安装:
cd libfastcommon-1.0.36/
编译:./make.sh
在上面这步中报错:gcc: 未找到命令,即没有gcc命令,那就安装gcc命令:sudo yum -y install gcc gcc-c++,然后重新编译。
安装:sudo ./make.sh install

从安装日志中可以找到  usr/include/fastcommon   common_define.h   两个路径,先记录下来(之后用)

2. 下载安装FastDFS

2.1 下载FastDFS压缩包:wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
2.2 解压:tar -zxvf V5.11.tar.gz
2.3 进入解压目录编译安装:
cd fastdfs-5.11/
编译:./make.sh (注意:需要perl的支持,否则不能运行,可以参考此文章https://blog.csdn.net/wtwshui/article/details/79415799安装)
安装:sudo ./make.sh install

从安装日志中可以找到  /usr/include/fastdfs         fdfs_define.h   两个路径,先记录下来(之后用)
2.4 查看安装后的相应文件与目录
  2.4.1 服务脚本:ll /etc/init.d/ | grep fdfs
  2.4.2 配置文件(这四个是开发者给的样例配置文件):ll /etc/fdfs/
  2.4.3 命令工具:ll /usr/bin/ | grep fdfs

3. 配置FastDFS跟踪器(Tracker)

首先,将 /etc/fdfs/目录下开发者给的样例配置文件复制并重命名:
进入目录:cd /etc/fdfs/
复制文件:
sudo cp client.conf.sample client.conf
sudo cp storage.conf.sample storage.conf
sudo cp tracker.conf.sample tracker.conf
sudo cp storage_ids.conf.sample storage_ids.conf

1. 编辑配置文件: vim tracker.conf
2. 修改配置文件:其余的默认即可
配置文件是否不生效,false 为生效,不变即可:
disabled=false
提供服务的端口,不变即可:
port=22122
Tracker 数据和日志目录地址,该目录必须手动创建:
base_path=/root/data/fastdfs/tracker
HTTP 服务端口,修改为80:
http.server_port=80
3. 创建tracker基础数据目录,即base_path对应的目录
mkdir -p /root/data/fastdfs/tracker
4. 防火墙中打开跟踪端口(默认的22122):
sudo firewall-cmd --permanent --zone=public --add-port=22122/tcp
5. 重启防火墙:
sudo firewall-cmd --reload
6. 查看防火墙中开启的端口:
sudo firewall-cmd --list-port

注意:CentOS7以上使用4.5.6方式开启防火墙,CentOS6版本参考http://www.mamicode.com/info-detail-971703.html做相应操作

7. 启动Tracker,初次成功启动,会在 /home/bdc/data/fastdfs/ (配置的base_path)下创建 data、logs 两个目录。
sudo service fdfs_trackerd start
8. 查看 FastDFS Tracker 是否已成功启动 ,22122端口正在被监听,则算是Tracker服务安装启动成功。
sudo netstat -ntlp | grep 22122 或 sudo lsof -i:22122
9. 关闭Tracker命令
sudo service fdfs_trackerd stop
10. 设置Tracker开机启动
sudo chkconfig --add fdfs_trackerd
11. 查看开机启动任务:
sudo chkconfig --list

4.配置 FastDFS 存储器(Storage)

编辑配置文件:sudo vim storage.conf
修改配置文件:其余的默认即可
配置文件是否不生效,false 为生效,不变即可:
disabled=false
指定此 storage server 所在组(卷),根据自身需求更改:
group_name=group1
指定storage server 服务端口,默认即可:
port=23000
心跳间隔时间,单位为秒 (这里是指主动向 tracker server 发送心跳),默认即可:
heart_beat_interval=30
Storage 数据和日志目录地址,该目录必须手动创建:
base_path=/root/data/fastdfs/storage
存放文件时 storage server 支持多个路径。这里配置存放文件的基路径数目,通常只配一个目录。
store_path_count=1
逐一配置 store_path_count 个路径,索引号基于 0。如果不配置 store_path0,那它就和 base_path 对应的路径一样。
store_path0=/root/data/fastdfs/storage 
FastDFS 存储文件时,采用了两级目录。这里配置存放文件的目录个数。 如果本参数只为 N(如: 256),那么 storage server 在初次运行时,会在 store_path 下自动创建 N * N 个存放文件的子目录。
subdir_count_per_path=256
tracker_server 的列表 ,会主动连接 tracker_server,有多个 tracker server 时,每个 tracker server 写一行。
tracker_server=bdcTracker:22122
允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定。
sync_start_time=00:00
sync_end_time=23:59
访问端口
http.server_port=80

注意:需要重启tracker后,配置才会生效


创建Storage基础数据目录,对应base_path目录及store_path0路径
mkdir -p /root/data/fastdfs/storage 
防火墙中打开存储器端口(默认的 23000)
sudo firewall-cmd --permanent --zone=public --add-port=23000/tcp
重启防火墙:
sudo firewall-cmd --reload
查看防火墙中开启的端口:
sudo firewall-cmd --list-port '


补充:由于上面tracker地址配置的不是ip地址,所以我们要修改host文件,使之与ip对应:
sudo vim /etc/hosts
添加如下内容,下面ip为虚拟机ip:
192.168.105.133 bdcTracker


启动 Storage,启动Storage前确保Tracker是启动的。初次启动成功,会在/root/data/fastdfs/storage  目录下创建 data、 logs 两个目录。
sudo service fdfs_storaged start
查看 Storage 是否成功启动,23000 端口正在被监听,则 Storage 启动成功。
sudo netstat -ntlp | grep 23000 或 sudo lsof -i:23000或sudo netstat -ntlp | grep fdfs
关闭 Storage:
sudo service fdfs_storaged stop
查看Storage和Tracker是否在通信:
fdfs_monitor /etc/fdfs/storage.conf
在打印结果中,看到 ip_addr = 192.168.105.133 (bdcTracker) ACTIVE ,表示正在通信。
设置 Storage 开机启动
sudo chkconfig fdfs_storaged on
Storage 目录,同 Tracker,Storage 启动成功后,在base_path 下创建了data、logs两个目录,记录着 Storage Server 的信息。在 store_path0 目录下,创建了N*N个子目录,用于存储文件。

 

5. 文件上传测试

修改 Tracker 服务器中的客户端配置文件:sudo vim client.conf
修改配置,未列出的默认即可:
Client 的数据和日志目录,该目录必须手动创建:
base_path=/root/data/fastdfs/client
Tracker端口
tracker_server=bdcTracker:22122
Http访问端口
http.tracker_server_port=80


创建Client数据目录:
mkdir -p /root/data/fastdfs/client 
上传测试
在linux内部执行如下命令上传 02.jpg 图片
fdfs_upload_file /etc/fdfs/client.conf /home/bdc/图片/02.jpg
上传成功后返回文件ID号:group1/M00/00/00/wKhphVrwGUmAduGXAAHjhVtVRZw426.jpg,返回的文件ID由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。
查看文件:
ll /root/data/fastdfs/storage/data/00/00

 

安装Nginx

前言:Nginx安装环境准备工作
1) gcc准备:安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,查看是否安装gcc:
yum list installed | grep gcc
如果没有gcc环境,需要安装gcc,执行命令安装:
sudo yum -y install gcc gcc-c++
2) PCRE准备:PCRE是一个Perl库,包括 Perl 兼容的正则表达式库。nginx的http模块使用PCRE来解析正则表达式,所以需要在Linux上安装PCRE库,执行安装命令:
sudo yum -y install pcre pcre-devel
3) zlib准备:zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库,运行安装命令:
sudo yum -y install zlib zlib-devel
4) openssl准备:OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。运行安装命令:
sudo yum -y install openssl openssl-devel

正式安装Nginx

目前版本的FastDFS还不支持http访问文件,所以要想通过http来访问已经上传成功的文件,需要安装Nginx支持;Nginx只需要安装到StorageServer所在的服务器即可,用于支持http访问文件。
1. 下载Nginx:
wget https://nginx.org/download/nginx-1.14.0.tar.gz
2. 解压
tar -zxvf nginx-1.14.0.tar.gz
3. 进入解压目录编译安装:
3.1 进入目录:
cd nginx-1.14.0
3.2 配置Nginx:启用 openssl密码库,并使用当前用户启动nginx,其余默认即可
./configure --with-http_ssl_module --user=root
3.3 编译 Nginx:
make -j 4
3.4 安装:
sudo make install
3.5 创建软链接(类似快捷方式),并启动 Nginx:
sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/
sudo nginx
其他命令:
sudo nginx -s stop
sudo nginx -s reload
3.6 查看是否启动成功:
sudo netstat -anp | grep nginx
3.7 设置nginx开机启动
sudo vim /etc/rc.local
添加下面一行:
/usr/local/nginx/sbin/nginx
然后更改文件权限
sudo chmod 744 /etc/rc.d/rc.local
3.8 查看nginx的版本及模块
nginx -V
3.9 访问刚刚上传的图片

1)修改nginx.conf配置
编辑文件:sudo vim /usr/local/nginx/conf/nginx.conf
注:原配置文件中有很多注释掉的内容,这里不再粘贴,,并且需要改动的地方已经加注释标示出来了

#修改nginx启动用户,和系统启动用户一致,nginx默认启动用户为nobody,在nginx安装的时候已经指定为root用户
user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
#侦听端口
listen 80;
server_name localhost;
#修改映射地址,将http中的地址/group1/M00/映射为系统实际地址/home/bdc/data/fastdfs/storage/data/
location /group1/M00/ {
alias /root/data/fastdfs/storage/data/;
}
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

 

重启nginx:sudo nginx -s reload 

访问文件:
方式一:http://ip:80/group1/M00/00/00/wKhphVrwGUmAduGXAAHjhVtVRZw426.jpg
注意这里可能出现问题:Centos7自带的最初版火狐浏览器解析上面地址的时候可能解析为一个目录,即:http://bdctracker:8081/group1/M00/00/00/wKhphFrhIVuADqfzAASB-wpUaac425.jpg/这种形式,导致访问不到文件,问题出在wKhphFrhIVuADqfzAASB-wpUaac425.jpg这个位置,把文件和访问地址的后缀名改为.jpeg就可以访问到,具体原因不太清楚,不过谷歌浏览器或者更新后的火狐浏览器又不会出现问题,按上面地址又可以访问到文件,学艺不精,不再研究。。。。

另外注意:防火墙要放行80端口
方式二:wget http://bdc:80/group1/M00/00/00/wKhphVrwGUmAduGXAAHjhVtVRZw426.jpg,可以获取到文件则nginx配置成功。

 

FastDFS 配置 Nginx 模块


前言: fastdfs-nginx-module 模块说明
  FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储, 但是同组存储服务器之间需要进行文件复制, 数据同步有延迟的问题。
  假设 Tracker 服务器将文件上传到了 Stroage1,上传成功后文件 ID已经返回给客户端。此时 FastDFS 存储集群机制会将这个文件同步到同组存储 Stroage2,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 Stroage2 上取文件,就会出现文件无法访问的错误。而 fastdfs-nginx-module 可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。

安装配置fastdfs-nginx-module模块
1) 下载 fastdfs-nginx-module
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/master.zip
2) 解压
unzip master.zip
3) 停止nginx服务
sudo nginx -s stop
4) nginx添加fastdfs-nginx-module模块重新编译安装
进入nginx解压目录
cd nginx-1.14.0/
nginx配置fastdfs-nginx-module模块
./configure --with-http_ssl_module --user=root --add-module=../fastdfs-nginx-module-master/src/
编译 
make

注意:编译时可能会出现错误,如出现,解决方式如下:

 cd fastdfs-nginx-module-master/src/

vim config 

修改文件内容如下:

  ngx_module_incs="/usr/include/fastcommon /usr/include/fastdfs"  说明:里面两个路径是上文中记录的

  CORE_INCS="$CORE_INCS /usr/include/fastcommon /usr/include/fastdfs"

修改后重新  nginx配置fastdfs-nginx-module模块

安装
sudo make install
5) 查看Nginx的模块
nginx -V
若有下面配置则证明模块添加成功:
configure arguments: --add-module=../fastdfs-nginx-module-master/src/
6) 修改配置文件1
复制 fastdfs-nginx-module 源码中的配置文件mod_fastdfs.conf,并修改配置
sudo cp ~/download/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
编辑mod_fastdfs.conf文件:
sudo vim /etc/fdfs/mod_fastdfs.conf
修改如下配置,其余默认即可:

#连接超时时间
connect_timeout=15
# TrackerServer的IP和端口
tracker_server=bdcTracker:22122
# StorageServer端口
storage_server_port=23000
# 如果文件ID的uri中包含group分组信息,则要设置为true
url_have_group_name = true
# Storage配置的store_path0路径,必须和storage.conf中的一致
store_path0=/root/data/fastdfs/storage 
7) 修改配置文件2
复制 FastDFS 源码中的配置文件到/etc/fdfs 目录:
cd ~/download/fastdfs-5.11/conf/
sudo cp anti-steal.jpg http.conf mime.types /etc/fdfs/
8) 修改配置文件3
修改nginx的配置文件nginx.conf,修改下面配置,其它不变:
sudo vim /usr/local/nginx/conf/nginx.conf

#location /group1/M00/ {
#alias /home/bdc/data/fastdfs/storage/data/;
#}
#添加fastdfs-nginx-module模块
location ~/group([0-9])/M00/ {
ngx_fastdfs_module;
}
注意:
1) nginx.conf 配置中的 listen 80端口值要与/etc/fdfs/storage.conf中的http.server_port=80 (前面配置为80了)端口值相对应;如果改成其它端口,则需要统一,同时在防火墙中打开该端口。
2) location 的配置,在集群模式中,有多个group,所以这里以正则的方式配置,如果是单一节点可以只配置指定group。
9) 启动Nginx
sudo nginx
打印类似如下信息,则配置成功:
ngx_http_fastdfs_set pid=119826
10) http访问
能获取到文件,则nginx配置成功;注意和前面中直接使用nginx路由访问不同的是,这里配置 fastdfs-nginx-module 模块,可以重定向文件链接到源服务器取文件。
http://bdc:80/group1/M00/00/00/wKhphVrwGUmAduGXAAHjhVtVRZw426.jpg
wget http://bdc:80/group1/M00/00/00/wKhphVrwGUmAduGXAAHjhVtVRZw426.jpg
好了,到此FastDFS单节点安装配置成功,接下来我们使用Java操作FastDFS实现文件上传和下载,最后将单节点模式改为集群模式

 

JAVA代码上传

package com.fdfs.demo;import org.csource.fastdfs.ClientGlobal;import org.csource.fastdfs.StorageClient;import org.csource.fastdfs.StorageServer;import org.csource.fastdfs.TrackerClient;import org.csource.fastdfs.TrackerServer;public class Demo1 {    public static void main(String[] args) throws Exception {        //加载配置文件,配置文件中的内容就是tracker服务的地址        ClientGlobal.init("fdfs_client.conf");        //创建一个TrackerClient对象        TrackerClient trackerClient = new TrackerClient();        //使用TrackerClient对象创建连接,获得一个TrackerServer对象        TrackerServer trackerServer = trackerClient.getConnection();                // 定义存储服务器对象句柄        StorageServer storageServer = null;                StorageClient storageClient = new StorageClient(trackerServer, storageServer);                String[] strings = storageClient.upload_file("D:/log.txt", "txt", null);                for (String str : strings) {            System.out.println(str);        }    }}
connect_timeout = 2network_timeout = 30charSet = UTF-8http.tracker_http_port = 80http.anti_steal_token = nohttp.secret_key = FastDFS1234567890tracker_server = 192.168.220.128:22122

 

©著作权归作者所有:来自51CTO博客作者wx5dcb63a3604aa的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. laravel框架入门和基本使用(一)
  2. Tomcat控制台日志输出到本地文件
  3. 坚果云和亿方云用哪个?
  4. robots.txt文件用法(针对搜索引擎收录的措施)
  5. Eclipse安装springboot支持(sts)
  6. Laravel 添加自定义函数
  7. svn命令使用
  8. Linux目录结构详解(最全最详细版)
  9. Linux 实用的命令小技巧

随机推荐

  1. android内核编译方法 转载
  2. Android的JNI实现基础
  3. android获得设备信息
  4. Android--把文件发送给另一个设备
  5. cocos2dx3.0 build_native.sh 需要这些环
  6. android 相对布局覆盖问题
  7. android 弹出窗口
  8. editText设置最大长度
  9. android manifest.xml中元素含义
  10. Android TextSwitcher的使用