nginx之 nginx + tomcat + redis 负载均衡且session一致性
说明:
本文描述的是 nginx + tomcat + redis 实现应用负载均衡且满足session一致性,从安装到配置的全部过程,供大家学习!
nginx 代理服务器ip: 10.219.24.26
tomcat_1 应用服务器ip与端口: 10.219.24.21:8080
tomcat_2 应用服务器ip与端口: 10.219.24.21:8081
redis 缓存服务器ip: 10.219.24.23
一、 nginx-1.9.7 编译安装
下载地址: http://nginx.org/download/nginx-1.9.7.tar.gz
补充: 安装 nginx之前,需要先安装一些依赖包:gcc、pcre、zlib
a、nginx gzip模块需要zlib库
b、nginx rewrite模块需要pcre库
c、nginx ssl模块需要openssl库
1、安装必要依赖包
[root@mysql03 ~]# yum install -y pcre pcre-devel
centos 6.7 配置 yum 本地源 链接参考: http://blog.csdn.NET/zhang123456456/article/details/56690945
2、 Nginx安装
[root@mysql03 ~]# ll nginx-1.9.7.tar.gz
-rw-r--r--. 1 root root 885562 Jun 14 21:46 nginx-1.9.7.tar.gz
[root@mysql03 ~]# tar zxvf nginx-1.9.7.tar.gz
[root@mysql03 ~]# cd nginx-1.9.7
-- 配置nginx安装选项
[root@mysql03 nginx-1.9.7]# ./configure --prefix=/usr/local/nginx
说明: 配置完毕后可以看到一个配置概要,概要中的5项必须都有了相应的库支持
Configuration summary
+ using system PCRE library
+ OpenSSL library is not used
##如果想要安装openssl模块,安装时需指定 ./configure --prefix=/usr/local/nginx --with-openssl=/root/openssl-1.0.2d ##
+ md5: using system crypto library
+ sha1: using system crypto library
+ using system zlib library
-- 安装nginx
[root@mysql03 nginx-1.9.7]# make && make install
3、 检查安装是否正常
[root@mysql03 nginx-1.9.7]# cd /usr/local/nginx
[root@mysql03 nginx]# ll
total 16
drwxr-xr-x. 2 root root 4096 Jun 14 22:14 conf
drwxr-xr-x. 2 root root 4096 Jun 14 22:14 html
drwxr-xr-x. 2 root root 4096 Jun 14 22:14 logs
drwxr-xr-x. 2 root root 4096 Jun 14 22:14 sbin
-- 启动
[root@mysql03 nginx]# ./sbin/nginx #如果不能正常启动,可能是端口占用
[root@mysql03 nginx]# ps -ef|grep nginx
root 5212 1 0 22:17 ? 00:00:00 nginx: master process ./sbin/nginx
nobody 5213 5212 0 22:17 ? 00:00:00 nginx: worker process
root 5228 2359 0 22:20 pts/0 00:00:00 grep nginx
-- 访问
浏览器输入: http://10.219.24.26/ #ip换成自己的ip
看到以下页面内容,一切正常。
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.
Thank you for using nginx.
-- 关闭
[root@mysql03 nginx]# ./sbin/nginx -s stop
[root@mysql03 nginx]# ps -ef|grep nginx
root 5241 2359 0 22:25 pts/0 00:00:00 grep nginx
二、 单机多实例 tomcat 安装
前言:
JDK(JavaDevelopment Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的javaSDK. JDK是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。所以要想运行jsp的程序必须要有JDK的支持,理所当然安装Tomcat的前提是安装好JDK.
二、1 JDK安装
1. 查看os版本
[root@MySQL ~]# uname -a
Linux mysql 2.6.32-200.13.1.el5uek #1 SMP Wed Jul 27 21:02:33 EDT 2011 x86_64 x86_64 x86_64 GNU/linux
解释:如果有x86_64就是64位的,没有就是32位的。后面是x686或x86_64则内核是64位的,i686或i386则内核是32位的。
2. 下载安装包
下载JDK,地址:http://www.Oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,
我下载【jdk-8u131-linux-x64.tar.gz】,如下图所示:

3. 安装Java JDK8.0
3.1、然后将下载了的JDK安装包mv到local文件夹下
[root@mysql ~]# mv jdk-8u131-linux-x64.tar.gz /usr/local/
3.2、跳转到local下面:
[root@mysql ~]# cd /usr/local/
[root@mysql local]# ll jdk-8u131-linux-x64.tar.gz
-rw-r--r-- 1 root root 185540433 Jun 17 17:08 jdk-8u131-linux-x64.tar.gz
3.3、再将JDK解压
[root@mysql local]# tar zxvf jdk-8u131-linux-x64.tar.gz
4. 配置环境变量
4.1、 在 /etc/profile 文件中添加Java相关的环境变量,将下面的内容复制到底部:
JAVA_HOME=/usr/local/jdk1.8.0_131
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
注意:根据上面的配置信息,我们既可以将环境变量的配置完成,需要注意的是,PATH在配置的时候,一定要把JAVA_HOME/bin放在最前面,不然使用java命令时,系统会找到以前的java,再不往下找了,这样java这个可执行文件运行的目录其实不在$JAVA_HOME/bin下,而在其它目录下,会造成很大的问题。
4.2、 立即生效
[root@mysql local]# source /etc/profile
5. 验证是否安装成功
[root@mysql local]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
二、2 安装 apache-tomcat-7.0.78
前言:
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML 页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
1、 安装 apache-tomcat-7.0.78 版本的 jdk 版本要求
Tomcat 7.0 requires Java SE 6 or later.
Read the RELEASE-NOTES and the RUNNING.txt file in the distribution for more details.
2、 os 查看 JDK 版本
[root@mysql ~]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
3. 安装 apache-tomcat-7.0.78
3.0、 apache-tomcat-7.0.78 的下载网址为:http://tomcat.apache.org/download-70.cgi ,截图如下:

____________________________________
3.1、然后将下载了的 apache-tomcat-7.0.78.tar.gz 安装包mv到 /usr/local/tomcat_1/ 文件夹下
[root@mysql ~]# mkdir /usr/local/tomcat_1/
[root@mysql ~]# cp apache-tomcat-7.0.78.tar.gz /usr/local/tomcat_1/
3.2、跳转到local下面:
[root@mysql ~]# cd /usr/local/tomcat_1/
[root@mysql tomcat_1]# ll apache-tomcat-7.0.78.tar.gz
-rw-r--r-- 1 root root 8968516 Jun 18 09:43 apache-tomcat-7.0.78.tar.gz
3.3、再将 apache-tomcat-7.0.78.tar.gz 解压
[root@mysql tomcat_1]# tar -zxvf apache-tomcat-7.0.78.tar.gz
3.4、 catalina.sh 放置在 /etc/init.d/ 下为 tomcat 启动启动做准备
[root@mysql tomcat_1]# cp -p /usr/local/tomcat_1/apache-tomcat-7.0.78/bin/catalina.sh /etc/init.d/tomcat_1
3.5 编辑 /etc/init.d/tomcat_1
vim /etc/init.d/tomcat_1
在第二行加入以下内容:
# chkconfig: 112 63 37
# description: tomcat server init script
# Source Function Library
. /etc/init.d/functions
JAVA_HOME=/usr/local/jdk1.8.0_131/
CATALINA_HOME=/usr/local/tomcat_1/apache-tomcat-7.0.78
4、 修改权限及创建目录
[root@mysql tomcat]# chmod 755 /etc/init.d/tomcat_1
[root@mysql tomcat]# chkconfig --add tomcat_1
[root@mysql tomcat]# chkconfig tomcat_1 on
同理配置 tomcat2 ,注意相应的地方要修改 如:/usr/local/tomcat_1/ 改为 /usr/local/tomcat_2/
__________________________________________________
5、 修改每个tomcat实例中server.xml中的端口
[root@mysql apache-tomcat-7.0.78]# pwd
/usr/local/tomcat_2/apache-tomcat-7.0.78
[root@mysql apache-tomcat-7.0.78]# cat conf/server.xml
<Server port="8006" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
.....
<Connector port="8081" protocol="HTTP/1.1"
.....
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
.....
</Host>
</Engine>
</Service>
</Server>
说明:上面是裁剪过后的server.xml,分别修改以上三个端口(Server、HTTP、AJP),这里我将tomcat_1端口号不变,
tomcat_2的端口都相应的+1 ,比如:Server 由 8005 + 1 =8006,注意 不要和其它实例的端口或系统已经占用的端口发生冲突。
6、 启动、关闭tomcat
-- 启动
[root@mysql tomcat]# service tomcat_1 start
[root@mysql tomcat]# service tomcat_2 start
7、 登录验证

三、 nginx-1.9.7 + apache-tomcat-7.0.78 反向代理+应用负载均衡 安装配置
1、 tomcat_1 配置 webapps/ROOT/index.jsp 修改成如下所示
[root@MySQL apache-tomcat-7.0.78]# pwd
/usr/local/tomcat_1/apache-tomcat-7.0.78
[root@mysql apache-tomcat-7.0.78]# vi webapps/ROOT/index.jsp
[root@mysql apache-tomcat-7.0.78]# cat webapps/ROOT/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html lang="en">
SessionID:<%=session.getId()%>
</br>
SessionIP:<%=request.getServerName()%>
</br>
<h1>tomcat1</h1>
</html>
说明: 同理配置另外一台 tomcat_2 服务器
2、 配置完 tomcat 后,接下来,修改 nginx.conf 配置,如下
[root@mysql03 nginx]# pwd
/usr/local/nginx
[root@mysql03 nginx]# cat conf/nginx.conf
user root root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
upstream web_app {
server 10.219.24.21:8080 weight=1 max_fails=2 fail_timeout=30s;
server 10.219.24.21:8081 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name aa.com;
charset utf8;
location / {
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_pass http://web_app;
proxy_redirect default;
}
}
}
说明: server段 proxy_pass定义的web_app需要跟upstream 里面定义的web_app一致,否则server找不到均衡。
3、 启动 tomcat 与 Nginx
4、 测试
本机浏览器输入:http://10.219.24.26/ 反复点击刷新 发现链接在 tomcat_1 与 tomcat_2 之间轮转,达到负载均衡。

注意:此时 session 并不一致, sessionID每次轮转都会改变。
四、 centos 6.7 下安装 redis-3.2.5
前期准备:
1. 操作系统需要安装 gcc 包 与 TCL 库, 通过配置本地 yum 源 ,yum -y install gcc 、 yum -y install tcl安装
2. 下载 redis 安装包,上传至 linux 下。 网址: http://download.redis.io/releases/
[root@mysql ~]# ll redis-3.2.5.tar.gz
-rw-r--r--. 1 root root 1544040 Jun 1 22:57 redis-3.2.5.tar.gz
说明: centos 6 配置本地Yum源,请参考 http://blog.csdn.net/zhang123456456/article/details/56690945
正式安装
3. 解压
[root@mysql ~]# tar -xzvf redis-3.2.5.tar.gz
4. 编译安装
[root@mysql ~]# cd redis-3.2.5
[root@mysql redis-3.2.5]# make && make install
说明:逐次执行上述命令,这样 Redis 会安装在/usr/local/bin/路径下。
5. 修改配置文件
在 redis-3.2.5路径下有一个 redis.conf 文件,需要拷贝并创建到/etc 路径下,命令如下
所示:
[root@mysql redis-3.2.5]# mkdir -p /etc/redis
[root@mysql redis-3.2.5]# mv redis.conf /etc/redis/
6. 修改配置文件
[root@mysql redis-3.2.5]#vim /etc/redis/redis.conf
[root@mysql redis-3.2.5]# cat /etc/redis/redis.conf
daemonize yes
pidfile /var/run/redis_6379.pid
port 6379
7. 运行/ 停止 Redis
-- 启动
[root@mysql redis-3.2.5]# redis-server /etc/redis/redis.conf
[root@mysql redis-3.2.5]# ps -ef|grep redis
root 5845 1 0 23:29 ? 00:00:00 redis-server *:6379
root 5854 2553 0 23:30 pts/1 00:00:00 grep redis
说明:第一条命令表示启动 redisserver,第二条命令表示查看 redis 服务是否启动正常。
-- 关闭
[root@mysql redis-3.2.5]# redis-cli shutdown
[root@mysql redis-3.2.5]# ps -ef|grep redis
root 5861 2553 0 23:31 pts/1 00:00:00 grep redis
五、配置 nginx + tomcat + redis 的 session 一致性
1、修改 redis 配置文件vi /etc/redis/redis.conf
将bind的127.0.0.1修改为本机地址,否则只能本机访问了,如下:
[root@redis01 ~]# cat /etc/redis/redis.conf
bind 10.219.24.23
daemonize yes
pidfile /var/run/redis_6379.pid
port 6379
2、导入redislib中三个jar包到 tomcat 的lib中

3、在 tomcat/conf/server.xml 的最下面的中增加 sessionCookieName 配置你想要的Redis中key的前缀,如下所示:
[root@mysql apache-tomcat-7.0.78]# pwd
/usr/local/tomcat_1/apache-tomcat-7.0.78
[root@mysql apache-tomcat-7.0.78]# vi conf/server.xml (在</Server>前添加如下配置,也就是倒数第二行处添加)
<Context docBase="/root/YOUR_WEB_APP"
path=""
reloadable="true"
sessionCookieName="YOURJSessionID" />
4、 在 tomcat的conf目录下,编辑context.xml , 在末尾</Context>前添加如下配置。如果你是用Redis单点,则可以仿照如下配置:
[root@mysql apache-tomcat-7.0.78]# pwd
/usr/local/tomcat_1/apache-tomcat-7.0.78
[root@mysql apache-tomcat-7.0.78]# vi conf/context.xml
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="10.219.24.23" #redis服务器ip
port="6379"
database="1"
maxInactiveInterval="60" />
5、 启动 nginx 、 tomcat 、redis
6、 测试
在浏览器中输入 : http://10.219.24.26/ 反复点击刷新 发现链接在 tomcat_1 与 tomcat_2 之间轮转,
达到负载均衡并保持 session一致性,sessionID保持不变。
>成功!
nginx之 nginx + tomcat + redis 负载均衡且session一致性的更多相关文章
- 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- ...
- Linux 下配置 nginx + 两个 tomcat 的负载均衡
前提:已经安装了 nginx 和两个 tomcat 1.修改 nginx.conf 配置文件 1)在 http{} 节点之间添加 upstream 配置 2)修改 nginx 的监听端口,默认是 ...
- nginx和tomcat配置负载均衡和session同步
一.背景 因业务需求,现需配置多台服务器,实现负载均衡. 二.解决方案 使用 nginx + tomcat,在这一台应用服务器部署一个nginx和两个tomcat.通过nginx修改配置后reload ...
- nginx配置分发Tomcat服务,负载均衡
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中瓦片资源越来越多,如果提高瓦片的访问效率是一个需要解决的 ...
- Nginx+Tomcat+memcached负载均衡实现session共享
http://blog.csdn.net/love_ubuntu/article/details/8464983 1. 安装各个软件不用说了. 2. 到tomcat的安装目录lib中,加入: me ...
- nginx+tomcat实现负载均衡以及session共享(linux centos7环境)
一.nginx的安装 1.准备三份tomcat tomcat1 设置端口 8080 tomcat2 设置端口 8081 tomcat3 设置端口 8082 2. 下载nginx 3. 解压到/home ...
- Nginx+Tomcat+Memcached负载均衡和session共享
1. 演示搭建 说明:本文参考网络日志http://blog.csdn.net/remote_roamer/article/details/51133790,结合实际操作,仅做个演示记录. 1.1. ...
- nginx实现后端tomcat的负载均衡调度
一.编译安装nginx 请跳转查阅:编译安装nginx 二.tomcat的二进制安装 请跳转查阅:二进制安装tomcat 三.配置nginx代理 # cat /apps/nginx/conf/ngin ...
随机推荐
- Kafka协议兼容性改进
在Kafka 0.10.2.0之前,Kafka服务器端和客户端版本之间的兼容性是"单向"的,即高版本的broker可以处理低版本client的请求.反过来,低版本的broker不能 ...
- centos GUI界面与命令行的切换
Linux 系统任何时候都运行在一个指定的运行级上,并且不同的运行级的程序和服务都不同,所要完成的工作和所要达到的目的都不同.Centos设置了如下表所示的运行级,并且系统可以在这些运行级别之间进行切 ...
- 【原创】Android 5.0 BLE低功耗蓝牙从设备应用
如果各位觉得有用,转载+个出处. 现如今安卓的低功耗蓝牙应用十分普遍了,智能手环.手表遍地都是,基本都是利用BLE通信来交互数据.BLE基本在安卓.IOS两大终端设备上都有很好支持,所以有很好发展前景 ...
- iOS APP打包分发给远程的手机测试
APP要打包给远程的朋友或客户测试,但又不是企业账号的情况下,我们只能根据手机的udid进行描述证书的配置,再打包分发给提供了udid的手机进行安装 一.如何得到udid? 手机连接到mac电脑,打开 ...
- 微信公众号开发笔记2(nodejs)
本篇主要记录调用微信各种api和功能实现 一.始于access_token 无论调用微信的什么api,都需要一个查询参数,就是我们每隔1小时或者2小时获取的access_token,笔记1中已经保证了 ...
- Spring Cloud 学习笔记(一)——入门、特征、配置
[TOC] 0 放在前面 0.1 参考文档 http://cloud.spring.io/spring-cloud-static/Brixton.SR7/ https://springcloud.cc ...
- Python 与 C/C++ 交互的几种方式
python作为一门脚本语言,其好处是语法简单,很多东西都已经封装好了,直接拿过来用就行,所以实现同样一个功能,用Python写要比用C/C++代码量会少得多.但是优点也必然也伴随着缺点(这是肯定的, ...
- Cygwin Unable to get setup from *
Cygwin Unable to get setup from * 错误 解决方案 是因为用自定义镜像站点,比如 http://mirrors.xdlinux.info/cygwin/x86_64/ ...
- VR全景智慧城市
随着虚拟现实产业的发展,我国对虚拟现实产业也越来越重视了.我国虚拟现实VR市场增长速度很快,市场活跃性很高,很多人都看好我国的虚拟现实VR市场,而且未来国内虚拟现实VR市场的销量还将有更大的增长.据赛 ...
- Spring MVC 请求处理流程概览
SpringMVC工作流程 图一:请求流程概述 图二:请求在每个组件的处理 解释Spring工作流程 1.用户向服务器发送请求,请求被spring前端控制Servelt DispatcherServe ...