FastDFS
下载libfastcommon
- libfastcommon是fastDFS依赖的函数库
1. 切换到/usr/local,下载libfastcommon命令:
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
2. 解压目录
tar -zxvf V1.0.7.tar.gz
3. 进入libfastcommon-1.0.7目录,依次执行两条命令完成编译和安装:
./make.sh --编译
./make.sh install --安装
4. 建立软连接
-
你会发现你的/usr/local多了一个目录:lib64,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
下载安装FastDFS
1、还是在/usr/local下,先下载FastDFS,命令:
wget -c "https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz" -O fastdfs-6.06.tar.gz
2、解压,解压完毕后/usr/local会有一个目录fastdfs-5.05,进入到这个目录
tar -zxvf fastdfs-6.06.tar.gz
cd fastdfs-6.06
3、编译、安装
./make.sh
./make.sh install
4、建立软连接
- FastDFS 服务脚本设置的 bin 目录是 /usr/local/bin, 但实际命令安装在 /usr/bin/ 下。
建立 /usr/bin 到 /usr/local/bin 的软链接(这一步关系到后面某些命令的执行)。
ln -s /usr/bin/fdfs_trackerd /usr/local/bin
ln -s /usr/bin/fdfs_storaged /usr/local/bin
ln -s /usr/bin/stop.sh /usr/local/bin
ln -s /usr/bin/restart.sh /usr/local/bin
配置Tracker
1、进入 /etc/fdfs,复制 FastDFS 跟踪器样例配置文件 tracker.conf.sample,并重命名为 tracker.conf
命令:
cd /etc/fdfs
cp tracker.conf.sample tracker.conf
2、切换到home目录下,创建fastdfs目录,在目录下再创建4个子目录:
client,file,storage,tracker
cd /home
mkdir -p fastdfs/{client,file,storage,tracker}
3、编辑tracker.conf ( vim tracker.conf)
下面的参数需要修改下,其它的默认即可
配置文件是否不生效,false 为生效
disabled=false
提供服务的端口(默认端口)
port=22122
Tracker 数据和日志目录地址(上面已经创建)
base_path=/home/fastdfs/tracker
HTTP 服务端口
http.server_port=80(默认端口需和nginx等保持一致)
启动Tracker
-
启动:
进入到nginx安装目录的sbin文件夹
/etc/init.d/fdfs_trackerd start
-
会在 /home/fdfsdfs/tracker/ (配置的base_path)下创建 data、logs 两个目录。
-
查看FastDFS是否启动成功:
netstat -unltp|grep fdfs //查看fastdfs是否启动
配置 FastDFS 的 Storage
1、进入 /etc/fdfs 目录,复制 FastDFS 存储器样例配置文件 storage.conf.sample,并重命名为 storage.conf
命令:
cd /etc/fdfs
cp storage.conf.sample storage.conf
2、修改storage.conf( vim storage.conf)参数
配置文件是否不生效,false 为生效
disabled=false
指定此 storage server 所在 组(组可以自定义,但在每个配置文件中要保持一致)
group_name=group1
storage server 服务端口
port=23000
心跳间隔时间,单位为秒 (这里是指主动向 tracker server 发送心跳)
heart_beat_interval=30
Storage 数据和日志目录地址(前面已经创建)
base_path=/home/fastdfs/storage
保存文件时 storage server 支持多个存储路径。这里配置存放文件的基路径数目,通常只配一个目录。
store_path_count=1
逐一配置 store_path_count 个路径,索引号基于 0,如果不配置 store_path0,那它就和 base_path 对应的路径一样。
store_path0=/home/fastdfs/file
FastDFS 存储文件时,采用了两级目录。这里配置存放文件的目录个数。
如果本参数只为 N(如: 256),那么 storage server 在初次运行时,会在 store_path 下自动创建 N * N 个存放文件的子目录。
subdir_count_per_path=256
tracker_server 代表要连接tracker的ip和端口 ,会主动连接 tracker_server,当存在多个 tracker server 时,每个 tracker server 写一行
tracker_server=ip:22122 #这里的ip是虚拟机IP地址:ifconfig
允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定。
sync_start_time=00:00
sync_end_time=23:59
访问端口:
http.server_port=80(与ngnix和trackeSever的端口一致)
启动 Storage
- 启动Storage前确保Tracker是启动的(一定要确保tracker是启动)。初次启动成功,会在 /home/fastdfs/storage目录下创建 data、 logs 两个目录。
/etc/init.d/fdfs_trackerd start //启动tracker
/etc/init.d/fdfs_storaged start //启动storage
- 关闭Storage命令:
service fdfs_storaged stop
查看Storage和Tracker是否在通信:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
配置Client
1、 修改 Tracker 服务器中的客户端配置文件
cd /etc/fdfs #进入执行目录
cp client.conf.sample client.conf #更名
vim client.conf #进入编辑文件
2、配置
Client 的数据和日志目录
base_path=/home/fastdfs/client
Tracker端口
tracker_server=ip:22122(tracker地址)(ip为centos系统服务器ip:ifconfig)
上传图片测试
- 进入图片路径目录下
示例:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf 123.jpg #图片文件目录/图片名称
执行结果:
group1/M00/00/00/wKhYgGO74XmAWMrrAABsH53bFyY870.jpg #成功
安装nginx _ fastdfs _module
- 下载
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz
- 解压
tar -zxvf V1.22.tar.gz
1、更改配置文件
cd fastdfs-nginx-module文件目录下 /src
vim config
1)ngx_module_incs路径更改为usr/include路径;
2)ngx_module_libs中libfastcommon.so、libfdfsclient.so两个so文件路径更改为usr/lib下对应文件路径;
3)DFDFS_MOD_CONF_FILENAME指向执行目录/etc/fdfs下mod_fastdfs.conf文件路径;
4)CORE_INCS后路径更改为usr/include路径;
5)DFDFS_MOD_CONF_FILENAME指向执行目录/etc/fdfs下mod_fastdfs.conf文件路径;
2、复制文件到指定目录
cp mod_fastdfs.conf /etc/fdfs/
cd /etc/fdfs
ll
fastdfs安装目录下的文件复制到运行目录etc/fdfs
http.conf
cp fastdfs安装目录/http.conf 执行目录/etc/fdfs/
mime.types
cp fastdfs安装目录/mime.types 执行目录/etc/fdfs/
安装Nginx
1、安装nginx所需环境
gcc 安装
yum install gcc-c++
PCRE pcre-devel 安装
yum install -y pcre pcre-devel
zlib 安装
yum install -y zlib zlib-devel
OpenSSL 安装
yum install -y openssl openssl-devel
2、安装Nginx
- 下载nginx,压缩包建议存在在/usr/local
wget -c https://nginx.org/download/nginx-1.12.1.tar.gz
- 解压
tar -zxvf nginx-1.12.1.tar.gz
- 新建文件夹
mkdir /var/temp/nginx -p
- 编译、安装,使用默认配置
命令:
cd nginx-1.12.1
./configure \
--prefix=/home/sunline/app/nginx \
--add-module=/home/sunline/app/fastdfs/fastdfs-nginx-module-1.22/src
1、--prefix后为指定nginx安装路径
2、--add-module后为fastdfs-nginx-module安装目录下src文件夹路径;
make
make install
- 进入/etc/fdfs/
cd /etc/fdfs/
mkdir /usr/local/fastdfs/tmp
vim mod_fastdfs.conf
- 修改配置文件
base_path=/usr/local/fastdfs/tmp #和Tracker里面的配置一样
store_path0=/usr/local/fastdfs/storge #和Tracker里面的配置一样
设置tracker访问地址ip为服务器ip地址
tracker_server=ip:22122
更改组名称
group_name=group1
启用
url_have_group_name = true
3、更改nginx配置
cd /usr/local/nginx/conf/
vim nginx.conf
更改配置:
server {
listen 80; #端口号为tracker中配置的端口号
server_name localhost;
access_log logs/access.log;
location /group1 {
ngx_fastdfs_module;
}
启动nginx
1、关闭防火墙
systemctl stop firewalld.service
查看防火墙状态
systemctl status firewalld
2、启动
cd /usr/local/nginx/sbin/
启动
./nginx
关闭
./nginx -s quit
重启
./nginx -s reopen(此方法为热重载,新进程若有问题则继续使用旧进程)
service nginx restart(此方法为重启,先停止nginx服务再重新启动,会造成服务暂时中断;若配置文件有问题,则会导致服务长时间中断)
查看进程号
ps -ef|grep nginx
查看是否启动成功
netstat -unltp|grep nginx
3、查看url是否可以正常调用
curl 域名+端口/上传图片返回的path
curl http://ip:80/group1/M00/00/00/wKhYgGO74YCADj-PAAB58-dxAdE342.jpg
Nginx设置内外网前置机跳转
提供一台服务器A,一台前置机B供程序部署。服务器A仅能访问内网(IP:192.168.1.2),前置机B与A网络互通(IP:192.168.3.2),且提供一个外网地址(IP:123.0.12.1)可映射访问前置机B(B不可访问外网),关系如图:
在内网中也可以访问程序,在外网中也可访问程序
nginx正反向代理
正向代理
- 代理服务器配置在客户端
- 正向代理代替客户端去发送请求
反向代理
- 代理服务器配置在服务端
- 反向代理代替服务端接受请求
配置前置机
- fastdfs的storage机器增加vip的配置;
- 进入通讯接入服务器,配置nginx前置机,将纳入前置机服务器,找到对应配置路径文件中,配置请求转发:
//示例:
location /test/image/ads {
proxy_pass http://ip:80/group1/M00/; #ip为tracker服务器ip地址
}
1、/test/image/ads为映射到外网的前缀地址
2、proxy_pass http://ip:80/group1/M00/,为需要替换的前缀(ip+端口/组名称grup1/M00/)
- 外网服务器配置,接收到内网nginx前置区转发出的地址后,截取/test/image/后将地址变更为“域名(http://***.com/psbc)+/image/test/”,提供给外网访问程序。(***为最后一层代理,直接使用此域名进行访问)
- 注:如果只需要内网环境访问图片,则不需要配置外网服务访问地址,可直接配置前置机服务后,通过替换后的前缀+path路径访问
创建连接并上传
//导入maven依赖
<dependency>
<groupId>org.csource</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.29-SNAPSHOT</version>
</dependency>
//后端代码:
//从客户端获取tracker对象
InetAddress ip = InetAddress.getByName("ip地址");
InetSocketAddress inetSocketAddress = new InetSocketAddress(ip,端口号);
TrackerServer trackerServer = new TrackerServer(inetSocketAddress);
//创建storage客户端
StorageServer storageServer = null;
//连接
StorageClient1 storageClient1 = new StorageClient1(trackerServer,storageServer);
//获取上传图片名称
String name = imageFileUpDownloadRequest.getImageName();
//扩展名, 获取扩展名
String extension = FilenameUtils.getExtension(name);
//获取上传图片文件大小
long size = fileBytes.length;
//设置图片meta信息
NameValuePair[] metaList = new NameValuePair[3];
metaList[0] = new NameValuePair("filename", name);
metaList[1] = new NameValuePair("fileext", extension);
metaList[2] = new NameValuePair("filesize", String.valueOf(size));
//上传且返回path
String storePath = storageClient1.upload_file1(fileBytes, extension, metaList);
//返回路径为group1/M00/08/03/FMb3H2PYySSAaiUSAANRpfiG7Yc251.jpg