Linux 安装分布式文件存储FastDFS图片服务器以及配合nginx/使用Nginx进行负载均衡
alfresco
虚拟网络编辑器修改网关
修改成对应的网关及ip:vim /etc/sysconfig/network-script/ifcfg-ens33
重启网卡:systemctl restart network
ping 外网
xshell
1.用rz命令上传文件
输入rz命令,看是否已经安装了lrzsz,
如果没有安装则执行 yum -y install lrzsz命令进行安装
安装成功后,输入rpm命令确认是否正确安装
Linux 常用基本命令
1.创建文件夹 mkdir dirName
2.解压缩 tar -zxvf xxxx.tar.gz
3.复制文件夹 cp -r /xx/dir1/xx /xx/dir2
3.删除文件夹 rm -rf xxxx
4.修改文件夹名称 mv oldname newname
/******************************************************************************/
环境准备
yum install gcc-c++
yum -y install libevent
yum install perl
yum install make cmake gcc gcc-c++
nginx
yum -y install openssl openssl-devel
yum -y install gcc automake autoconf libtool make
yum install gd-devel
yum -y install pcre-devel
yum -y install openssl openssl-devel
安装zip、unzip命令(如果需要的话)
yum install -y unzip zip
1.安装libfastcommon(软件包下载地址:https://github.com/happyfish100/libfastcommon )
a:将libfastcommon上传至/usr/local下进行解压:
unzip libfastcommon-master.zip -d libfastcommon-master (后面-d是创建文件夹,如果有可以不用)
b:进到解压后的文件目录下
cd libfastcommon-master
c:进行安装
./make.sh
./make.sh install
2.安装FastDFS(到官网下载https://sourceforge.net/projects/fastdfs/files/FastDFS%20Server%20Source%20Code/FastDFS%20Server%20with%20PHP%20Extension%20Source%20Code%20V5.05/FastDFS_v5.05.tar.gz/download)
a:将FastDFS压缩包上传至服务器/usr/local下
b:进行安装
./make.sh
./make.sh install
c:如果安装成功,则可以看到/etc/fdfs目录下生成了3个文件
3.配置tracker节点
#创建tracker的数据文件和日志存储目录
mkdir -p /data/fastdfs
# 切换盘符
cd /etc/fdfs
# 重命名
mv tracker.conf.sample tracker.conf
#修改的文件内容如下(基础配置,不考虑性能调优情况下):
vi tracker.conf
base_path=/data/fastdfs #设置 tracker 的数据文件和日志目录(需预先创建)
http.server_port=6666 #设置http端口号,默认为8080
#保存并退出,之后创建软连接
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
#启动成功后,在/data/fastdfs目录下生成了data和logs两个目录。
4.配置storage节点
#创建
mkdir /data/fastdfs-storage
# 切换盘符
cd /etc/fdfs/
#重命名
mv storage.conf.sample storage.conf
#修改的文件内容如下(基础配置,不考虑性能调优情况下):
vi storage.conf
group_name=group1 #组名,可根据实际情况修改
base_path=/data/fastdfs-storage #设置storage数据文件和日志目录,需预先创建
store_path_count=1 #存储路径个数,需要和 store_path 个数匹配、
store_path0=/data/fastdfs-storage #存储路径
tracker_server=192.168.116.145:22122 # #tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功。
http.server_port=8888 #设置 http 端口号
#创建软连
ln -s /usr/bin/fdfs_storaged /usr/local/bin
#启动storage
service fdfs_storaged start
#查看日志以确保正常启动
cat /data/fastdfs-storage/logs/storaged.log
#确认启动成功后,可以运行 fdfs_monitor 查看 storage服务器是否已经登记到 tracker服务器。
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
5.使用fdfs_test上传图片测试
# 切换盘符
cd /etc/fdfs/
# 重命名
mv client.conf.sample client.conf
# 修改配置
vi client.conf
base_path=/data/fastdfs-storage/logs
tracker_server=10.10.169.140:22122
#上传测试(最后即表示上传的图片)
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /usr/local/test.png
#生成url即表示上传成功
6.安装FastDFS-nginx-module(官网下载https://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz/download?use_mirror=jaist&download=&failedmirror=nchc.dl.sourceforge.net)
将FastDFS-nginx-module_v1.16.tar.gz传至/usr/local/下
# 解压
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
#修改config文件将/usr/local/路径改为/usr/(去掉local)
vi /usr/local/fastdfs-nginx-module/src/config
#去掉local
# 将FastDFS-nginx-module/src下的mod_FastDFS.conf拷贝至/etc/fdfs/下
cp mod_fastdfs.conf /etc/fdfs/
# 修改mod_fastdfs.conf的内容
vi /etc/fdfs/mod_fastdfs.conf
base_path=/data/fastdfs-storage/logs
tracker_server=10.10.169.140:22122
#tracker_server=10.10.169.141:22122(多个tracker配置多行)
url_have_group_name=true #url中包含group名称
store_path0=/data/fastdfs-storage #指定文件存储路径
# 切换盘符
cd /usr/local/FastDFS/conf/
# 拷贝文件
cp http.conf mime.types /etc/fdfs/
7.安装nginx (官网下载http://nginx.org/en/download.html)
# 解压
tar -zxvf nginx-1.8.0.tar.gz
# 切换目录
cd nginx-1.8.0
# 执行
./configure \
--prefix=/data/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/usr/local/fastdfs-nginx-module/src \
--with-http_image_filter_module
# 执行
make
make install
# 切换目录
cd /data/nginx/conf/
# 修改配置文件
vi nginx.conf (一并修改/usr/local/nginx/conf/nginx.conf)
#添加location
location /group1/M00/{
ngx_fastdfs_module;
}
#可能存在权限问题
使用root权限启动的,所以修改/usr/local/nginx/conf/ ,/data/nginx/conf/ 下nginx.conf文件,
第一行原值#user nobody; 修改为 user root;
#创建临时文件夹
mkdir -p /var/temp/nginx
#启动nginx
/data/nginx/sbin/nginx -c /usr/local/nginx-1.15.6/conf/nginx.conf
(备注:后者(/usr/local/nginx-1.15.6/conf/nginx.conf)是指安装路径里面的conf,前者(/data/nginx/sbin/nginx)是自定义(--prefix=/data/nginx \)的路径具体看自己设置的路径)
#查看nginx进程
ps -ef|grep nginx
#干掉进程
kill -TERM xxxx
#浏览器验证上次上传的返回路径
如:http://192.168.17.135/group1/M00/00/00/wKgRh1v2A9OAACGNAABObh-_er8811_big.png
备注:
1.如果访问不到还要注意防火墙的拦截
#编辑防火墙
vi /etc/sysconfig/iptables
#放开80端口
#添加:
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8888 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
#保存
/etc/init.d/iptables save
/etc/init.d/iptables restart
2.虚拟机重启后要重新启动服务:
service fdfs_trackerd start
service fdfs_storaged start
/data/nginx/sbin/nginx -c /usr/local/nginx-1.15.6/conf/nginx.conf
8.nginx配合fastdfs实现图片自动更改尺寸(附加)
location /group1/M00/(.*)!([0-9]+)x([0-9]+)\.(jpg|gif|png){
root /data/fastdfs-storage/data;
ngx_fastdfs_module;
set $w $2;
set $h $3;
if ($w != "0") {
rewrite /group1/M00/(.+)!(\d+)x(\d+)\.(jpg|gif|png)$ /group1/M00/$1.$4 break;
}
image_filter resize $w $h;
image_filter_buffer 100M;
}
location ~ group1/M00/(.+)\.?(.+){
alias /data/fastdfs-storage/data;
ngx_fastdfs_module;
}
9.权限控制
前面使用nginx支持http方式访问文件,但所有人都能直接访问这个文件服务器了,所以做一下权限控制。
FastDFS的权限控制是在服务端开启token验证,客户端根据文件名、当前unix时间戳、秘钥获取token,
在地址中带上token参数即可通过http方式访问文件。
1.服务端开启token验证
修改http.conf
# vim /etc/fdfs/http.conf
#设置为true表示开启token验证
http.anti_steal.check_token=true
#设置token失效的时间单位为秒(s)
http.anti_steal.token_ttl=1800
#密钥,跟客户端配置文件的fastdfs.http_secret_key保持一致
http.anti_steal.secret_key=FASTDFS1234567890
#如果token检查失败,返回的页面
http.anti_steal.token_check_fail=/ljzsg/fastdfs/page/403.html
#重启服务
2.配置客户端
客户端只需要设置如下两个参数即可,两边的密钥保持一致。
# token 防盗链功能
fastdfs.http_anti_steal_token=true
# 密钥
fastdfs.http_secret_key=FASTDFS1234567890
3.客户端生成token
访问文件需要带上生成的token以及unix时间戳,所以返回的token是token和时间戳的拼接。
之后,将token拼接在地址后即可访问:file.ljzsg.com/group1/M00/00/00/wKgzgFnkaXqAIfXyAAEoRmXZPp878.jpeg?token=078d370098b03e9020b82c829c205e1f&ts=1508141521
例如:
// 上传到服务器
String filepath = fastDFSClient.uploadFileWithMultipart(file);
// 设置访文件的Http地址. 有时效性.
String token = FastDFSClient.getToken(filepath, environment.getProperty("fastdfs.http_secret_key"));
return "redirect:http://"+environment.getProperty("file_server_addr")+"/"+filepath+"?token="+token ;
4.注意事项
如果生成的token验证无法通过,请进行如下两项检查:
A. 确认调用token生成函数(ProtoCommon.getToken),传递的文件ID中没有包含group name。传递的文件ID格式形如:M00/00/00/wKgzgFnkTPyAIAUGAAEoRmXZPp876.jpeg
B. 确认服务器时间基本是一致的,注意服务器时间不能相差太多,不要相差到分钟级别。
附加 :CentOS7使用firewalld打开关闭防火墙与端口
1.编辑防火墙
vi /etc/sysconfig/iptables
#放开80端口
添加:-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
/etc/init.d/iptables save
/etc/init.d/iptables restart
2.开启一个端口呢
添加
firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
重新载入
firewall-cmd --reload
查看
firewall-cmd --zone= public --query-port=80/tcp
删除
firewall-cmd --zone= public --remove-port=80/tcp --permanent
3.配置nginx实现负载均衡(减少服务器的压力)
以vim模式打开nginx.conf配置文件
cd /usr/local/nginx/conf/
vi nginx.conf
根据上边的需求在nginx.conf文件中配置负载均衡,如下:
#在server上添加此upstream节点
upstream mytomcat{
#分权 即访问131与134的次数比例为1比1
server 192.168.14.131:8080 weight=1;
server 192.168.14.134:8080 weight=1;
}
server {
listen 80;
server_name localhost;
#即所有请求都到这里去找分配
location / {
#使用mytomcat分配规则,即刚自定义添加的upstream节点
proxy_pass http://mytomcat; #(与upstream名称要一样)
}
}
配置完成,保存并退出。
4.用nginx做图片服务器时配置:
location /images/ {
root /usr/DirFile/;
autoindex on;
}
参考
官方网站:https://github.com/happyfish100/
配置文档:https://github.com/happyfish100/fastdfs/wiki/
参考资料:https://www.oschina.net/question/tag/fastdfs
Java客户端:https://github.com/happyfish100/fastdfs-client-java