pm2 管理nodejs集群,同时使用redis共享session

简介: 通过pm2来实现nodejs应用的集群,不过我之前没做session共享,导致.. 登录不上啊 啊啊啊,无奈,又重新对redis进行了集成。

通过pm2来实现nodejs应用的集群,不过我之前没做session共享,导致.. 登录不上啊 啊啊啊,无奈,又重新对redis进行了集成。

以下记录下自己集成redis 以及实现pm2 的集群管理的过程。

自己项目的整体结构是这样组成的: nodejs + express + mysql + pm2 (乱写的)

背景

最开始的时候是使用的express-session ,然后就没了。

app.use(session({
    resave: false, //添加 resave 选项
    saveUninitialized: true, //添加 saveUninitialized 选项
    secret: '***', // 建议使用 128 个字符的随机字符串
    cookie: { maxAge: 24 * 60 * 60 * 1000,secure : true }
}));

不过因为现在项目启动要检查文件,导致变慢,更新的时候会有那么十几秒失联.. 很郁闷,准备上pm2cluster ,却发现session丢失,登录不上系统了。

redis 改造

redis 安装

安装redis 直接到官网下载即可。https://redis.io/download
我是直接按照官网的步骤来的,也没有做其他的配置啥的,可以参考:https://www.cnblogs.com/xyinjie/p/9444280.html

image.png

项目改造
  • 安装模块
npm install redis connect-redis --save 
  • 代码改造
var session = require('express-session');
var redis = require('redis');
var redisClient = redis.createClient();
var RedisStore = require('connect-redis')(session);

app.use(session({
    resave: false, //添加 resave 选项
    saveUninitialized: true, //添加 saveUninitialized 选项
    secret: '0b8d3104f46ce1ce884d3c494fac1b64', // 建议使用 128 个字符的随机字符串
    // cookie: { maxAge: 24 * 60 * 60 * 1000,secure : true },
    store : new RedisStore({client : redisClient}) // redis 存储session
}));

我中间出了一个问题,session 每次都是最新的,后来发现把cookie 注释掉,就好了.. 嘿

启动项目

pm2 start ./bin/www --name xxx -i max

启动后再更新就可以一个一个来更新了..(如果项目启动快其实直接全部更新也没啥问题我是小站没人看。)

相关文章
|
7月前
|
存储 NoSQL 前端开发
Redis专题-实战篇一-基于Session和Redis实现登录业务
本项目基于SpringBoot实现黑马点评系统,涵盖Session与Redis两种登录方案。通过验证码登录、用户信息存储、拦截器校验等流程,解决集群环境下Session不共享问题,采用Redis替代Session实现数据共享与自动续期,提升系统可扩展性与安全性。
420 3
Redis专题-实战篇一-基于Session和Redis实现登录业务
|
数据库
【YashanDB 知识库】如何解决共享集群部署遇到报错:YAS-05721 invalid input parameter, reason: node name invalid.
**问题现象**:在共享集群部署数据库时,遇到错误 YAS-05721,提示节点名称无效。原因是操作系统主机名不符合服务器名称要求(字母、数字、下划线组成,长度4-64字符,以字母开头)。**解决办法**:1. 部署时加--ignore-hostname 参数,由 yasboot 自动生成合法名称;2. 修改操作系统 hostname 符合要求。
|
数据库
【YashanDB知识库】如何解决共享集群部署遇到报错:YAS-05721 invalid input parameter, reason: node name invalid.
【YashanDB知识库】如何解决共享集群部署遇到报错:YAS-05721 invalid input parameter, reason: node name invalid.
|
9月前
|
运维 Kubernetes API
解决Kubernetes集群中master节点无法与node节点通信的策略。
这些策略不仅需要执行命令来获取信息,更要深入理解集群组件如何交互,以便进行准确的故障定位与修复。一条一条地排查,并适时回顾配置文件,证书有效性等,通常可以找到问题所在。给出的命令需要根据具体环境的配置进行适当的修改。故障排除往往是一个细致且需求反复验证的过程,但遵循上述策略可以高效定位大部分通信故障的原因。
615 12
|
9月前
|
Kubernetes 网络协议 API
在k8s集群中解决master节点与node通信问题
整个排查和解决流程需要综合应用以上方法,以及根据具体情况调整排查顺序或应用其他技术细节。为保证解决方案的实用性和有效性,还需紧跟Kubernetes社区的最新动态和最佳实践。在实际操作过程中,应记录所采取的步骤和观察到的系统响应,以便在遇到类似问题时能够快速定位和解决。
561 8
|
存储 缓存 监控
|
数据库
【YashanDB 知识库】如何解决共享集群部署遇到报错:YAS-05721 invalid input parameter, reason: node name invalid.
在共享集群部署数据库时,遇到错误“YAS-05721 invalid input parameter, reason: node name invalid”。原因是操作系统的主机名不符合服务器名称要求(需由字母、数字、下划线组成,以字母开头,长度4-64字符)。解决办法:1. 部署时加--ignore-hostname参数,由yasboot生成合规名称;2. 修改操作系统hostname以符合要求。
|
数据库
【YashanDB知识库】安装共享集群时报错:YAS-05721 invalid input parameter, reason: node name invalid
【YashanDB知识库】安装共享集群时报错:YAS-05721 invalid input parameter, reason: node name invalid
|
存储 缓存 监控
|
NoSQL Redis API
限流+共享session redis实现
【10月更文挑战第7天】
193 0