Tomcat 负载均衡 及Session共享
原文:https://www.sunjianhua.cn/archives/tomcat-high-availability.html
一、安装java环境
二、安装tomcat(apache-tomcat-7.0.54)
三、安装nginx(tengine-2.2.0)
四、安装redis
五、安装keepalived (keepalived-1.3.5)
a.下载
$ wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz -P /usr/local/src/
b.编译安装
$ cd /usr/local/src/ && tar -zxvf keepalived-1.3.5.tar.gz && cd keepalived-1.3.5
$ ./configure --prefix=/usr/local/keepalived
$ make && make install
六、配置高可用集群
a.配置nginx
#在10.231服务器执行
$ vi /usr/local/nginx/conf/vhosts/tomcats.conf
upstream sunjianhua10231 {
server 192.168.10.232:8080 fail_timeout=10s max_fails=10 weight=5;
server 192.168.10.231:8080 fail_timeout=10s max_fails=10 weight=5;
}
server {
listen 99;
server_name 192.168.10.231;
charset utf-8;
location / {
proxy_pass http://sunjianhua10231/;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#在10.232服务器执行
$ vi /usr/local/nginx/conf/vhosts/tomcats.conf
upstream sunjianhua10232 {
server 192.168.10.232:8080 fail_timeout=10s max_fails=10 weight=5;
server 192.168.10.231:8080 fail_timeout=10s max_fails=10 weight=5;
}
server {
listen 99;
server_name 192.168.10.232;
charset utf-8;
location / {
proxy_pass http://sunjianhua10232/;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
b.配置keepalived
#此处操作两台服务器均执行
$ mkdir -p /etc/keepalived
$ vi /etc/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
$ cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
$ cp keepalived/etc/init.d/keepalived /etc/init.d/
$ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
$ ln -s /usr/local/keepalived/sbin/keepalived /sbin/
$ ln -s /usr/local/sbin/keepalived /usr/sbin/
$ chkconfig keepalived on
$ chmod +x /etc/keepalived/nginx_check.sh
#一个在10.231上 (设置为Master,rid10232为10.231服务器的hostname)
$ vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id rid10232
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
mcast_src_ip 192.168.10.232
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass fuckyou
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.10.16
}
}
#一个在10.232上 (设置为BACKUP,rid10232为10.231服务器的hostname)
$ vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id rid10232
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
mcast_src_ip 192.168.10.231
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass fuckyou
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.10.16
}
}
七、keepalived+nginx高可用测试
启动两个tomcat
启动10.231中的tomcat:sh /usr/local/tomcat_web/bin/startup.sh
启动10.232中的tomcat:sh /usr/local/tomcat_web/bin/startup.sh
启动两个nginx
启动: /usr/local/nginx/sbin/nginx
关闭:/usr/local/nginx/sbin/nginx -s stop
重启:/usr/local/nginx/sbin/nginx -s reload
启动两个keepalived
启动:service keepalived start
关闭:service keepalived stop
重启:service keepalived restart
Ps:注意防火墙问题
访问vip:http://192.168.10.16:99
访问 nginx1:http://192.168.10.232:99
访问 nginx2:http://192.168.10.231:99
1.关闭nginx1 keepalived会将他重新启动
2.关闭192.168.10.231中的keepalived(service keepalived stop),该节点的网络接口中的vip
将会消失,此时vip已经漂移到了192.168.10.232,在通过vip访问nginx集群,访问到的也是192.168.10.232了
八、Session共享
1.方案一:容器扩展session共享
上传3个jar到/usr/local/tomcat_web/lib/
b.在/usr/local/tomcat_web/conf/context.xml中加入(注意ip,端口,密码)
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.20.250" port="6379" password="redis1234"
database="0" maxInactiveInterval="60"
/>
2.方案二:Spring Session 集群
a.加入maven依赖
b.加入spring session配置在web.xml中
c.加入主从复制及session配置文件



Tomcat 负载均衡 及Session共享的更多相关文章
- Nginx和Tomcat负载均衡实现session共享(转)
以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架. 此框架的优 ...
- Nginx和Tomcat负载均衡实现session共享
以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架. 此框架的优 ...
- nginx+tomcat+redis负载均衡及session共享
概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...
- haproxy+tomcat实现负载均衡以及session共享(linux centos7环境)
一.安装HAProxy 1.进入home目录,下载最新haproxy安装包. cd /home wget http://haproxy.1wt.eu/download/1.4/src/haproxy- ...
- keepalived+nginx+tomcat+redis实现负载均衡和session共享(原创)
keepalived+nginx+tomcat+redis实现负载均衡和session共享 直接上链接,码了一天,就不再重写了,希望能帮到大家,有问题欢迎留言交流.
- Nginx+Tomcat8+Memcached实现负载均衡及session共享
1> 基础环境 简易拓扑图: 2> 部署Tomcat [root@node01 ~]# ll -h ~ |egrep 'jdk|tomcat'-rw-r--r-- 1 root root ...
- nginx+tomcat负载均衡和session复制
本文介绍下传统的tomcat负载均衡和session复制. session复制是基于JVM内存的,当然在当今的互联网大数据时代,有更好的替代方案,如将session数据保存在Redis中. 1.安装n ...
- nginx和tomcat实现反向代理、负载均衡和session共享
这类的文章很多,nginx和tomcat实现反向代理.负载均衡实现很容易,可以参照http://blog.csdn.net/liuzhigang1237/article/details/8880752 ...
- 玩转spring boot——负载均衡与session共享
前言 当项目上线后,如果要修复bug或扩充功能,都需要重启tomcat服务.此时,正在使用应用的用户们就需要等待服务器的重启,而这就会造成不好的用户体验.还有,当仅仅只有一台tomcat服务时,如果 ...
随机推荐
- 首发:极简的Centos主机监控方法,分分钟即可使用【转】
需求天天有,今年事更多.硬盘测试刚刚完成,就又来了性能监控的需求.一般我们生产就用zabbix了,用起来还行,就是蛮多脚本要写.开发和测试都是分散的,经常还要重装系统,用zabbix就算了,开发和测试 ...
- 揭开webRTC媒体服务器的神秘面纱——WebRTC媒体服务器&开源项目介绍
揭开webRTC媒体服务器的神秘面纱--WebRTC媒体服务器&开源项目介绍 WebRTC生态系统是非常庞大的.当我第一次尝试理解WebRTC时,网络资源之多让人难以置信.本文针对webRTC ...
- scp拷贝文件报错-bash: scp: command not found
今天用scp远程传输资料,报错如下: -bash: scp: command not found 在网上搜资料解决办法如下: 安装scp的软件包: # yum install openssh-clie ...
- Window8.1下oracle数据库报:ora-12170 操作超时
PLSQL 链接本机:oracle11g 服务名:orcl 一直链接不上,等了大概3分钟, 提示:ora-12170操作超时: 重启了数据库 问题还是无法解决;上网搜了一下,发现报ora-1217 ...
- vector的reserve和resize(转)
转自:http://www.cnblogs.com/qlee/archive/2011/05/16/2048026.html vector 的reserve增加了vector的capacity,但是它 ...
- FreeMarker使用小记(HelloWorld)
FreeMarker是开源的模板框架.对于它的介绍网上已经很多了.详情可参考主页:http://www.freemarker.org/ 现在我们就开始我们的FreeMarker版的Hello Worl ...
- PYTHON 写入list并换行的方法
f.writelines(lists) 是不换行的写入,可用以下方法在写入时换行. 方法一: for line in lists: f.write(line+'\n') 方法二: lists=[lin ...
- 【LOJ】#2076. 「JSOI2016」炸弹攻击
题解 我冷静一下,话说如果去掉建筑和R的限制好像是模拟退火吧 然后开始写模拟退火了,起始点就随机一个敌人作为起始点 没对着数据写了一下获得了70pts,感到美滋滋 然后对着数据卡了很久--发现有个数据 ...
- Gitlab Webhooks, External Services, and API(二)
一. 使用webhooks webhook 是一个API的概念,并且变得越来越流行.我们能用事件描述的事物越多,webhook的作用范围也就越大.webhook作为 个轻量的事件处理应用,正变得越来越 ...
- js文字转语音并播放
这里调用的是百度文字转语音开放API html: <div> <input type="text" id="ttsText"> < ...