Nginx+SpringSession+FastDFS总结

本文详细介绍了如何使用Nginx作为反向代理和负载均衡器,结合SpringSession解决多实例session共享问题,以及如何部署和配置FastDFS分布式文件系统。重点讲述了FastDFS的安装、配置、启动过程,以及在Web项目中的应用,包括Nginx的负载均衡配置和FastDFS的集群搭建步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nginx主要功能:静态代理、负债均衡、动静分离、虚拟主机

SpringSession
TTP协议本身是无状态的,为了保存会话信息,浏览器Cookie通过SessionID标识会话请求,服务器以SessionID为key来存储会话信息。在单实例应用中,可以考虑应用进程自身存储,随着应用体量的增长,需要横向扩容,多实例session共享问题随之而来。
Spring Session就是为了解决多进程session共享的问题

Nginx是一个高性能的Web服务器和反向代理服务器,也可以作为邮件代理服务器
内存少,并发处理能力强,高性能,低系统资源消耗

反向代理:以代理服务器来接收连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器.

VPN---->正向代理

通过配置文件启动
./nginx -c 绝对路径

快速关闭Nginx
找出nginx进程号 ps -ef |grep nginx
kill -TERM 主pid

重启nginx
./nginx -s reload

sz 从linux中下载文件
rz 上传到linux

Nginx主要应用
1.静态网站部署
2.负载均衡
1.轮询
2.权重
3.ip_hash (解决session丢失的问题)
4.最少连接

3.静态代理
	
4.动静分离
	负载均衡和静态代理结合在一起
	tomcat负责动态,nginx负责静态

5.虚拟主机

FastDFS是一个开源的轻量级分布式文件系统,它主要对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题,特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDfs
分布式文件系统是一个软件/软件服务器,用来管理文件.
//它可以是一个tomcat或一个单独的计算机只用于存放文件
解决传统方式的单点故障问题.如果某一个节点故障还有其他的节点可以读取和写入文件,可以提供数据的备份避免因磁盘损坏导致的文件丢失.还可以提供扩容机制,无限增加文件存放的空间上限.

文件存储,文件同步,文件访问(文件上传,下载,删除).解决大容量文件存储的问题,特别适合以文件为载体的在线服务.		冗余备份,线性扩容,高可用高性能.

分两部分
1.客户端 Java代码
2.服务端
1.跟踪器----调度,在内存中记录集群中存储节点storage的状态信息.Tracker server的性能是非常好的
2.存储节点----存储文件,包括文件和文件属性都存储到服务器磁盘,完成文件管理:存储,同步,访问.

FastDFS启动
fdfs_storaged /etc/fdfs/storage.conf
fdfs_storaged /etc/fdfs/tracker.conf
启动 start
关闭 stop
重启 restart
//不建议使用 kill -9 强制关闭,可能会导致文件信息不同步问题.

加入fastdfs-client-java依赖
在fastdfs.conf中加入tracker_server=192.168.0.242:22122

public static void upload() {
//读取fastDFS配置文件,用于将所有的tracker地址读取到内存中

    StorageServer ss = null;
    TrackerServer ts = null;


    try {
        ClientGlobal.init("fastdfs.conf");
        TrackerClient tc = new TrackerClient();
        ts = tc.getConnection();
        ss = tc.getStoreStorage(ts);
        //定义Storage的客户端对象,需要使用这个对象来完成具体的文件上传下载和删除
        StorageClient sc = new StorageClient(ts,ss);

        /*
        * 文件上传
        * 参数1 为需要上传的文件的绝对路径
        * 参数2 为需要上传的文件扩展名
        * 参数3 为文件的属性文件 通常不上传
        *
        *   返回一个String数组,这个数据非常重要,建议保存到数据库
        *
        * 数组中的第一个元素为文件所在的组名,第二个元素是所在远程路径名
        * */


        String[] result = sc.upload_file("d://网.txt","txt",null);
        for (String str:result) {
            System.out.println(str);
        }

    } catch (IOException e) {
        e.printStackTrace();
    } catch (MyException e) {
        e.printStackTrace();
    }finally {
        if (ss != null) {
            try {
                ss.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (ts != null) {
            try {
                ts.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

download
int result = sc.download_file(groupName,remoteFileName,“d:/”+localFileName);
返回值为0表示下载成功,参数1.组名 2.远程文件名 3.要存放的文件名

delete
int result = sc.delete_file(groupName,remoteFileName);
返回0表示删除成功。

启动nginx的命令 /usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf -t

//=============================================================

FastDFS在web项目中的应用

限制spring文件上传大小限制
#限制springMVC允许上传文件的单个文件大小,默认值为1M,
spring.servlet.multipart.max-file-size=1
#设置SpringMVC允许的表单请求中允许上传总文件大小为10M
spring.servlet.multipart.max-request-size=10

2020/10/25

FastDFS分布式文件系统集群环境搭建-操作步骤手册

搭建一个FastDFS分布式文件系统集群,推荐至少部署6个服务器节点;
==搭建FastDFS的集群
第一步:安装6个迷你版的Linux,迷你版Linux没有图形界面,占用磁盘及资源小,企业里面使用的Linux都是没有图形界面的Linux;

第二步:由于迷你版Linux缺少一些常用的工具库,操作起来不方便,推荐安装如下的工具库:
1、安装lrzsz, yum install lrzsz -y
2、安装wget, yum install wget -y
4、安装vim, yum install vim -y
5、安装unzip,yum install unzip -y
6、安装ifconfig,yum install net-tools -y

yum install lrzsz wget vim unzip net-tools -y

7、安装nginx及fastdfs需要的库依赖:
yum install gcc perl openssl openssl-devel pcre pcre-devel zlib zlib-devel libevent libevent-devel -y

第三步 安装fastdfs
1、 上传fastdfs的安装包和libfastcommon的安装包
2、 解压libfastcommon 安装libfastcommon
3、 解压fastdfs 安装fastdfs
4、 拷贝fastdfs目录中的http.conf和mime.types到/etc/fdfs 目录中
注:6台机器全部执行这些操作

第四步:部署两个tracker server服务器,需要做的工作:

修改两个tracker服务器的配置文件:
tracker.conf: 修改一个地方:
base_path=/opt/fastdfs/tracker   #设置tracker的数据文件和日志目录(需预先创建)
启动tracker服务器 fdfs_trackerd /etc/fdfs/tracker.conf

第五步 修改两个组中的4台storage中storage.conf文件
第一组group1的第一个storage server(修改storage.conf配置文件):
group_name=group1 #组名,根据实际情况修改,值为 group1 或 group2
base_path=/opt/fastdfs/storage #设置storage的日志目录(需预先创建)
store_path0=/opt/fastdfs/storage/files #存储路径
tracker_server=192.168.171.135:22122 #tracker服务器的IP地址以及端口号
tracker_server=192.168.171.136:22122

第二组group2的第一个storage server(修改storage.conf配置文件):
group_name=group2   #组名,根据实际情况修改,值为 group1 或 group2
base_path=/opt/fastdfs/storage   #设置storage的日志目录(需预先创建)
store_path0=/opt/fastdfs/storage/files    #存储路径
tracker_server=192.168.171.135:22122  #tracker服务器的IP地址以及端口号
tracker_server=192.168.171.136:22122

启动storage服务器
使用之前的Java代码测试FastDFS的6台机器是否可以上传文件

注意:FastDFS默认是带有负载均衡策略的可以在tracker的2台机器中修改tracker.conf文件
store_lookup=1

0 随机存放策略
1 指定组
2 选择磁盘空间的优先存放 默认值

修改后重启服务
fdfs_trackerd /etc/fdfs/tracker.conf restart

使用Nginx进行负载均衡========

第六步 安装 nginx ,使用nginx 对fastdfs 进行负载均衡
上传 nginx-1.12.2.tar.gz以及 nginx的fastdfs扩展模块安装包fastdfs-nginx-module-master.zip
添加nginx的安装依赖
yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
解压nginx
tar -zxvf nginx-1.12.2.tar.gz
解压fastdfs扩展模块
unzip fastdfs-nginx-module-master.zip
配置nginx的安装信息
2台tracker服务器的配置信息(不需要fastdfs模块)
./configure --prefix=/usr/local/nginx_fdfs
4台storage服务器其的配置信息(需要使用fastdfs模块)
./configure --prefix=/usr/local/nginx_fdfs --add-module=/root/fastdfs-nginx-module-master/src
编译并安装nginx
./make
./make install

4台storage的服务器需要拷贝mod_fastdfs文件
将/root/fastdfs-nginx-module-master/src目录下的mod_fastdfs.conf文件拷贝到 /etc/fdfs/目录下,这样才能正常启动Nginx;

第七步 配置tracker 的两台机器的nginx
进入安装目录
cd /usr/local/nginx_fdfs

添加一个location 对请求进行拦截,配置一个正则规则 拦截fastdfs的文件路径, 并将请求转发到其余的4台storage服务器(修改 conf目录下nginx.conf 文件)
#nginx拦截请求路径:
location ~ /group[1-9]/M0[0-9] {   
    proxy_pass http://fastdfs_group_server; 
}



添加一个upstream 执行服务的IP为 另外的4台stroage 的地址
#部署配置nginx负载均衡:
upstream fastdfs_group_server {  
    server 192.168.171.137:80;  
    server 192.168.171.138:80;
    server 192.168.171.139:80;  
    server 192.168.171.140:80;  
}

第八步 配置另外4台storage的nginx添加http访问的请求路径拦截
进入安装目录
cd /usr/local/nginx_fdfs
添加一个location 对请求进行拦截,配置一个正则规则 拦截fastdfs的文件路径,使用fastdfs的nginx模块转发请求(修改 conf目录下nginx.conf 文件)
#nginx拦截请求路径:
location ~ /group[1-9]/M0[0-9] {
ngx_fastdfs_module;
}

第九步 分别修改4台storage服务器的mod_fasfdfs.conf文件(/etc/fdfs/mod_fastdfs.conf)
#修改基本路径,并在指定路径创建对应文件夹
base_path=/opt/fastdfs/nginx_mod #保存日志目录
#指定两台tracker服务器的ip和端口
tracker_server=192.168.171.135:22122 #tracker服务器的IP地址以及端口号
tracker_server=192.168.171.136:22122
#指定storage服务器的端口号
storage_server_port=23000 #通常情况不需要修改
#指定当前的storage服务器所属的组名 (当前案例03和04为group1 05和06为group2)
group_name=group1 #当前服务器的group名
#指定url路径中是否包含组名 (当前案例url包含组名)
url_have_group_name=true #文件url中是否有group名
store_path_count=1 #存储路径个数,需要和store_path个数匹配(一般不用改)
store_path0=/opt/fastdfs/storage/files #存储路径
#指定组个数,根据实际配置决定,(当前案例拥有2个组group1和group2)
group_count = 2 #设置组的个数

在末尾增加2个组的具体信息:
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs/storage/files

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs/storage/files

第一个组的第二个storage按照相同的步骤操作;

另外一个组的两个storage也按照相同的步骤操作;

#测试nginx的配置文件是否正确(测试全部6台服务器)
   /usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf -t
#启动nginx服务器(全部6台服务器)
  /usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf

测试:使用浏览器分别访问 6台 服务器中的fastdfs文件

第十步:部署前端用户访问入口服务器,即访问192.168.230.128上的Nginx,该Nginx负载均衡到后端2个tracker server;
配置nginx.conf文件
location ~ /group[1-9]/M0[0-9] {
proxy_pass http://fastdfs_group_server;
}

添加一个upstream 执行服务的IP为 2台tracker 的地址
#部署配置nginx负载均衡:
upstream fastdfs_group_server {  
    server 192.168.171.135:80;  
    server 192.168.171.136:80; 
}

测试:使用浏览器访问128(唯一入口的nginx服务器)服务器中的fastdfs文件
注意:由于之前128的nginx中可能拥有静态资源拦截会导致访问不到文件,这时可以注释或删除这些静态资源拦截

补充资料==============
最后,为了让服务能正常连接tracker,请关闭所有机器的防火墙:
systemctl status firewalld 查看防火墙状态
systemctl disable firewalld 禁用开机启动防火墙
systemctl stop firewalld 停止防火墙
systemctl restart network 重启网络
systemctl start network 启动网络
systemctl stop network 停止网络

可能安装的linux(无图形的)没有开启网卡服务,可以修改/etc/sysconfig/network-scripts 下的网卡配置文件设置 ONBOOT=yse
表示开机启动网卡,然后启动网络服务即可

Keepalived当主nginx出现故障后会自动切换到备用nginx服务器的一款软件 通常由运维人员进行使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值