nginx+tomcat+redis负载均衡,实现session共享

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx+tomcat+redis负载均衡,实现session共享相关的知识,希望对你有一定的参考价值。

实验环境:

系统: centos 7.4  3.10.0-327.el7.x86_64
docker: 18.03.0-ce
docker-compose:docker-compose version 1.21.0
redis: 4.0.9
nginx: 1.12.2
tomcat:8.5.30
jdk:1.8.161

基础理论

session 统一方案:
1、单机的session会话保持机制如nginx的ip-hash,如果单个机器下线,那么session将会全部丢失
2、session共享,如tomcat集群,多个应用服务器共享同步session,单台机器下线,根据负载均衡原理,调度器会遍历寻找可用节点,不足在于,只能是同一种中间件如tomcat集群。并且session复制会带来性能损失,session内容通过广播同步给成员,会造成网络流量瓶颈。
3、session服务器 如memcached/redis ,应用服务器接受请求后会将session保存cache db中,当应用服务器出现问题,调度器会遍历所有节点,没发现都没有这个session时会去成cached db中查找,如果找到就复制到本机,这样就能实现session共享和高可用。
实验使用 session服务器的方式

tomcat:
Tomcat的工作模式3种:独立Servlet,进程内servlet,进程外servlet。
Tomcat是一个基于组件的服务器,他的构建组件都是可以配置的,其中最外层的组件是Catalina Servlet容器,其他组一定要按照一定的格式要求配置在这个顶层的容器中。
  Tomcat各个组件是在$CATLINA_HOME/conf/server.xml文件中配置的。
tomat是一个servlet容器,来处理http请求。在平时的使用中我们都会再浏览器中输入http地址来访问服务资源,比如格式http://host[":"port][abs_path] ,这里我们将它做为中间件使用

nginx
nginx负载均衡实现方式: 分别是

  • 轮询,
  • 加权轮询,
  • least-conn, 最小连接
  • ip-hash,
  • fail,
  • url-hash

mysql主从理论

  • 1、主从建立连接后
  • 2、从库会生成一个IO线程 一个SQL线程,
  • 3、IO线程会去请求主库的二进制日志并将日志记录到本地的 中继日志中
  • 4、主库会生成一个log dump线程 用来给从库的IO线程传递二进制日志
  • 5、从库的SQL线程会解析中继日志生成具体操作,最终实现主从的操作一致数据一致。
    理论待继续完善, 实验拓扑如下

2、拓扑

技术分享图片
为了更好的理解安装,软件都直接使用源码安装的方式

3、安装

3.1、docker安装

需要先了解一下基本原理: docker基础,第四节安装
?docker组成:docker daemon, docker client, 镜像,仓库,容器
客户端通过api连接服务端,本地命令执行服务端执行完之后返回给客户端,镜像可以直接从dockerhub中下载,镜像可以生成容器,容器可以打包成镜像,仓库可以保存镜像。如图
技术分享图片

3.2、nginx安装

以上是关于nginx+tomcat+redis负载均衡,实现session共享的主要内容,如果未能解决你的问题,请参考以下文章

高性能站点架构之负载均衡 Nginx+tomcat+redis实现tomcat集群

Tomcat +redis +nginx 搭建高性能负载均衡 集群

转 tomcat+nginx+redis实现均衡负载session共享

nginx+tomcat+redis负载均衡,实现session共享

通过Nginx+tomcat+redis实现反向代理 负载均衡及session同步

(转)tomcat+nginx+redis实现均衡负载session共享