当前位置: 首页 > news >正文

基于nginx的tomcat负载均衡和集群(超简单)

今天看到"基于apache的tomcat负载均衡和集群配置 "这篇文章成为javaEye热点。

略看了一下,感觉太复杂,要配置的东西太多,因此在这里写出一种更简洁的方法。

 

要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务器即可共享SESSION了。

 

你可以自己写tomcat的扩展来保存SESSION到memcached。

这里推荐使用memcached-session-manager这个开源项目(http://code.google.com/p/memcached-session-manager/ ),下面简称msm。

如何安装nginx、memcached、tomcat这些就不多说了。

先说明一下测试环境:

tomcat1、nginx、memcached安装在192.168.1.11

tomcat2安装在192.168.1.101

下面分步实现基于nginx的tomcat负载均衡和集群配置

 

一,tomcat集群

    1,先下载msm及其依赖包

    http://memcached-session-manager.googlecode.com/files/memcached-session-manager-1.3.0.jar

 

    http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-jodatime-1.3.0.jar

 

http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-cglib-1.3.0.jar

 

http://spymemcached.googlecode.com/files/memcached-2.4.2.jar

http://memcached-session-manager.googlecode.com/files/javolution-5.4.3.1.jar

 

2,将这5个包放到$TOMCAT_HOME/lib目录下

3,修改$TOMCAT_HOME/conf/server.xml

 

  1. <Context docBase="E:/java_codes/TestSession/WebContent" path="" reloadable="true" >  
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  memcachedNodes="n1:localhost:11211"  requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"  sessionBackupAsync="false"  sessionBackupTimeout="100"  transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"  copyCollectionsForSerialization="false"  />  
    </Context> 
     

 这里的memcachedNodes是填写memcached节点,多个节点时可以以空隔分开,如:

 n1:localhost:11211 n2:localhost:11212

 sessionBackupTimeout的单位为分钟

 

 E:/java_codes/TestSession/WebContent 替换成你的WEB目录

 

  修改后重启两个TOMCAT即可,这个时候已经解决SESSION的共享问题.

二,配置nginx实现负载均衡

   以我的nginx.conf为例

  1. #user  nobody;   
    worker_processes  1;   error_log  logs/error.log;   events {   worker_connections  1024;   
    }   http {   include       mime.types;   default_type  application/octet-stream;   sendfile        on;   keepalive_timeout  65;   #gzip  on;   upstream  www.docyeah.com   {   server   192.168.1.11:8080;   server   192.168.1.101:8080;   }   server {   listen       80;   server_name  www.docyeah.com;   charset utf-8;   location / {   root   html;   index  index.html index.htm;   proxy_pass        http://www.docyeah.com;   proxy_set_header  X-Real-IP  $remote_addr;   client_max_body_size  100m;   }   location ~ ^/(WEB-INF)/ {    deny all;    }    error_page   500 502 503 504  /50x.html;   location = /50x.html {   root   html;   }   }   
    }  

 

将www.docyeah.com替换成你的域名

192.168.1.11和192.168.1.101替换成你服务器的IP

 

OK,已经完成。启动nginx即可。

这是我采用的负载均衡及集群方案,希望大家拍砖.

 

补充:nginx在配置upstream时,有两个参数:
ip_hash(同一IP一直使用同一台server服务)
weight(server的使用权重,数值越大,nginx分发的请求越多)

通过配合这两个参数,能粗糙地解决session共享的问题。
对于一些不是太依赖session的应用,或者只有用户登录时保存,那么我认为可以用Cookies代替。
即使真的要Session共享,我认为手动写代码保存到Memcached比为Tomcat加插件好,这样能获得更好的可控性。

相关文章:

基于nginx的tomcat负载均衡和集群(超简单)

今天看到"基于apache的tomcat负载均衡和集群配置 "这篇文章成为javaEye热点。 略看了一下&#xff0c;感觉太复杂&#xff0c;要配置的东西太多&#xff0c;因此在这里写出一种更简洁的方法。 要集群tomcat主要是解决SESSION共享的问题&#xff0c;因此我利用memcac…...

ESIM实战文本匹配

引言 今天我们来实现ESIM文本匹配&#xff0c;这是一个典型的交互型文本匹配方式&#xff0c;也是近期第一个测试集准确率超过80%的模型。 我们来看下是如何实现的。 模型架构 我们主要实现左边的ESIM网络。 从下往上看&#xff0c;分别是 输入编码层(Input Ecoding) 对前…...

基于虚拟仿真技术的汽车燃油泵控制

在当前激烈的竞争环境下&#xff0c;汽车行业正在加速产业和技术更迭&#xff0c;整车厂对大型ECU嵌入式控制系统和软件的需求迫在眉睫。 然而&#xff0c;复杂而庞大的汽车系统往往由多个物理系统组成&#xff0c;系统所对应的模型都需要在不同的领域实现&#xff1a;发动机、…...

angular:HtmlElement的子节点有Shadow dom时奇怪的现象

描述&#xff1a; 这样写时&#xff0c;会自动跳过shadow dom节点的遍历 const cloneElement this.contentElement.cloneNode(true) as HTMLElement; for(let childNodeIndex 0; childNodeIndex < cloneElement.childNodes.length; childNodeIndex) {element.appendChild…...

栈与队列--删除字符串中的所有相邻重复项

给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 示例&#xff1a; 输入&#x…...

使用SSH地址拉取远程仓库代码报下面的错误

说明&#xff1a;配置了SSH秘钥后&#xff0c;使用SSH地址克隆代码&#xff0c;依旧无法拉取代码&#xff0c;提示下面这个信息。 Their offer&#xff1a;ssh-rsa&#xff0c;ssh-dss fatal&#xff1a;Could not read from remote repository. Please make sure you have the…...

easycms v5.5 分析 | Bugku S3 AWD排位赛

前言 这个awd打的悲&#xff0c;后台默认用户名密码为admin:admin&#xff0c;但是几乎所有人都改了 而且一进去看到这个cms就有点懵逼&#xff0c;都不知道这个cms是干嘛的&#xff08;没用过相似的cms&#xff09; 虽然网上找出了很多相关的漏洞&#xff0c;但是不知道为什…...

成都营运《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作

成都营运《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作...

创邻科技Galaxybase助力SPG推动知识图谱应用落地

1. 知识图谱实践应用&#xff1a;从理论到落地的全景视角 知识图谱&#xff0c;作为一种先进的数据模型和信息表示策略&#xff0c;极大地提升了信息检索与分析的能力。该模型利用图结构&#xff0c;将不同领域、层次和类别的信息有机整合&#xff0c;令复杂的数据关系变得清晰…...

《TCP/IP网络编程》阅读笔记--域名及网络地址

目录 1--域名系统 2--域名与 IP 地址的转换 2-1--利用域名来获取 IP 地址 2-2--利用 IP 地址获取域名 3--代码实例 3-1--gethostbyname() 3-2--gethostbyaddr() 1--域名系统 域名系统&#xff08;Domain Name System&#xff0c;DNS&#xff09;是对 IP 地址和域名进行相…...

我的C#基础

using System; namespace HelloWorldApplication }TOC 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。 为帮助您在CSDN创作的文章获得更多曝光和关注&#xff0c;我们为您提供了专属福利&#xff1a; 已注册且未在CSDN平台发布过…...

【UnityShaderLab实现“Billboard“始终面向相机_播放序列图的效果_案例分享(内附源码)】

"Billboard"始终面向相机 Shader "billboard" {Properties{_MainTex ("Main Tex", 2D) = "white" {}_Color (...

Ceph入门到精通-S3 基准测试工具warp使用入门

S3 基准测试工具。 下载 下载适用于各种平台的二进制版本。 配置 可以使用命令行参数或环境变量配置 Warp。 可以使用 、 在命令行上指定要使用的 S3 服务器&#xff0c;也可以选择指定 TLS 和自定义区域。--host--access-key--secret-key--tls--region 也可以使用 、、 和…...

Docker--未完结

一.Docker是干什么的 在没亲自使用过之前&#xff0c;再多的术语也仅仅是抽象&#xff0c;只有写的人或者使用过的人能看懂。 所以&#xff0c;作为新手来说&#xff0c;只要知道Docker是用于部署项目就够了&#xff0c;下面展示如何用Docker部署项目及Docker常用命令。 二、…...

string的使用和模拟实现

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; C&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大…...

基础算法---区间合并

直接上题目,不废话! 题目 给定 n 个区间 [l,r]&#xff0c;要求合并所有有交集的区间。 注意如果在端点处相交&#xff0c;也算有交集。 输出合并完成后的区间个数。 例如&#xff1a;[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。 输入格式 第一行包含整数 n。 接下来 n 行&am…...

C++(day4)

思维导图 封装Mystring #include <iostream> #include<cstring>using namespace std;class Mystring{ public://无参构造函数Mystring():size(10){strnew char[size];strcpy(str,"");cout<<"无参构造函数"<<endl;}//有参构造函数…...

docker 部署 node.js(express) 服务

1、在 express 项目根目录下新增 Dockerfile 文件&#xff0c;内容如下&#xff1a; 创建服务容器的方法&#xff0c;可以根据自己的情况选择&#xff1a; 1、以下示例为宿主机没有安装 node 环境的写法&#xff1b; 2、先在本地构建包含 node 和 express 的基础镜像&#xff0…...

商城系统开发,如何确保用户数据的安全性?

确保用户数据的安全性是商城系统开发中至关重要的一项任务。随着数字化时代的到来&#xff0c;用户的个人信息和交易数据已成为黑客和不法分子的重要目标&#xff0c;因此保护用户数据的安全性对于商城系统的成功运营至关重要。在开发商城系统时&#xff0c;以下几个方面是确保…...

黑客必备工具Kali Linux,安装与使用教程全包含,从入门到精通,全网最详细全面的Kali Linux教程

Kali Linux是一个高级渗透测试和安全审计Linux发行版&#xff0c;目前可以说是网络安全人员的专用系统。 Kali Linux功能非常强大&#xff0c;能够进行信息取证、渗透测试、攻击WPA / WPA2保护的无线网络、离线破解哈希密码、将android、Java、C编写的程序反编译成代码等等&am…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...