Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的。
何为反向代理呢?即以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
而Nginx主要完成的工作就是反向代理,比如我们向一台服务器的80端口发送了请求,该请求首先由Nginx监听到,其接受到请求内容后再转发给其他服务器,其他服务器处理完后再将结果传送给Nginx,最后由Nginx来统一返回给初始请求端。
使用redis解决tomcat集群session共享问题,把session存储在redis中。
配置nginx
进入到nginx配置文件目录:/usr/local/nginx/conf
编辑nginx.conf:
保存后退出,重启nginx:./nginx -s reload
启动nginx之后,通过nginx访问tomcat,nginx会把请求根据一定策略分发到三个tomcat,实现负载均衡:
多刷新,可以看到出现不同的tomcat
配置redis,session共享
redis是基于内存的nosql数据库,读写效率相当高,提供键值过期机制,比较适合session机制
使用开源项目tomcat-redis-session-manager来完成配置
上git下载源码tomcat-redis-session-manager
使用src下的类来重新构建项目,使用eclipse重新编译成jar包
在eclipse创建一个maven project项目(simple),
修改pom.xml,添加tomcat、jedis依赖:
redissessionmanager不支持高版本的tomcat,具体为org.apache.catalina.util.LifecycleSupport类
改为使用8.0.53版本的tomcat
并修改代码
把tomcat-redis-session-manager-master中src/main/java下的com包拷贝至项目中:
拷贝完进行打包,runas--maven install
在target下可以看到jar包:
把这个jar分别拷贝带linux中三台tomcat的lib目录下
依赖的的包同样也需要拷贝:commons-pool2-2.4.2、jedis-2.9.0,如下三个包:
修改三台tomcat的配置文件,修改tomcat下conf目录下context.xml:
配置好redis的相关信息注意,如果没设置redis密码,不需要指定password,默认不需指定
jedis连接不上redis,报错JedisConnectionException: Could not get a resource from the pool
解决办法:
修改/etc/redis/6379.conf配置文件,修改bind节点为0.0.0.0,表示所有节点都可以连接redis,修改peotected-model 为no;
然后再重启redis
配置完毕,访问nginx:
可以看到三台tomcat获取的sessionid是相等的
进入redis,查看key,查看剩余过期时间
tomcat集群的session共享设置成功