【原创】搭建Nginx(负载均衡)+Redis(Session共享)+Tomcat集群
一、环境搭建
二、Nginx的安装配置与测试
*虚拟机下转至root
sudo -i
1)下载并解压(目前官网最新版本)
创建安装目录:mkdir /usr/local/soft && cd /usr/local/soft
命令下载Nginx压缩包:wget http://nginx.org/download/nginx-1.9.15.tar.gz
解压压缩包:tar zxvf nginx-1.9.15.tar.gz
2)尝试安装Nginx
root@precise64:/usr/local/soft/nginx-1.9.15# ./configure
在最后提示:
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
能看到PCRE的字眼,说明Nginx是依赖其它一些模块的,Nginx共依赖以下三个包:
1.gzip 模块需要 zlib 库 ( 下载: http://www.zlib.net/ )
2.rewrite 模块需要 pcre 库 ( 下载: http://www.pcre.org/ )
3.ssl 功能需要 openssl 库 ( 下载: http://www.openssl.org/ )
依赖包安装顺序依次为:openssl、zlib、pcre, 最后安装Nginx包
3)下载并安装openssl
命令下载openssl压缩包:wget https://www.openssl.org/source/openssl-1.0.1t.tar.gz
解压压缩包:tar zxvf openssl-1.0.1t.tar.gz
安装:cd openssl-1.0.1t && ./config && make && make install
在最后可能会提示你:
sh: 1: make: not found
The program 'make' is currently not installed. You can install it by typing:
apt-get install make
按照提示:apt-get install make
再次安装:./config && make && make install
4)下载并安装zlib
下载zlib压缩包:wget http://zlib.net/zlib-1.2.8.tar.gz
解压:tar zxvf zlib-1.2.8.tar.gz
安装:cd zlib-1.2.8/ && ./configure && make && make install
5)下载并安装PCRE
下载PCRE:wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz
解压:tar zxvf pcre-8.37.tar.gz
安装:cd pcre-8.37 && ./config
可能会提示你:
configure: error: You need a C++ compiler for C++ support.
安装C++:apt-get install g++(网速有限没有尝试)
再次安装:./configure && make && make install
6)再次尝试安装Nginx
安装命令:cd nginx-1.9.15/ && ./configure && make && make install
提示信息:
|| mkdir -p '/usr/local/nginx/logs'
test -d '/usr/local/nginx/html' \
|| cp -R html '/usr/local/nginx'
test -d '/usr/local/nginx/logs' \
|| mkdir -p '/usr/local/nginx/logs'
make[1]: Leaving directory `/usr/local/soft/nginx-1.9.15'
表示安装成功并安装至:/usr/local/nginx/
7)测试开启Nginx
尝试启动:cd /usr/local/nginx/sbin/ && ./nginx
可能会提示:
error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
搜索该文件:whereis libpcre.so.1
提示:libpcre.so: /lib64/libpcre.so.0 /usr/local/lib/libpcre.so /usr/local/lib/libpcre.so.1
或 libpcre.so: /usr/local/lib/libpcre.so.1 /usr/local/lib/libpcre.so
添加:ln -s /usr/local/lib/libpcre.so.1 /lib64
或:ln -s /usr/local/lib/libpcre.so.1 /lib
再次尝试启动:./nginx
打开浏览器,跳转至Vagrant配置的IP地址(没有端口号),显示如下即成功:
三、配置Tomcat集群
1)复制出两个Tomcat
复制:cp -r Tomcat-7 ./Tomcat7-2
重命名:mv Tomcat-7 Tomcat7-1
查看:ls
bin etc games include lib man nginx sbin share soft src ssl Tomcat7-1 Tomcat7-2
2)修改其中一个Tomcat的 server.xml
打开配置文件:vim conf/server.xml
<Server port="8005"shutdown="SHUTDOWN"> 改为 8006
<Connector port="8080"protocol="HTTP/1.1" 改为 8081
<Connector port="8009"protocol="AJP/1.3" 改为 8010
保存::wq
3)添加测试页面
创建应用文件夹:
mkdir /usr/local/Tomcat7-1/webapps/www
mkdir /usr/local/Tomcat7-2/webapps/www
添加测试页面:vim /usr/local/Tomcat7-1/webapps/www/index.jsp
<%@ pagelanguage="java" %> <html> <head><title>TomcatA</title></head> <body> <h1style="color: red;">Tomcat A</h1> <tablealign="centre"border="1"> <tr> <td>Session ID</td> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html> sessionID:<%=session.getId()%> <br> SessionIP:<%=request.getServerName()%> <br> SessionPort:<%=request.getServerPort()%> <% out.println("This is Tomcat Server A"); %> |
复制测试页面:cp /usr/local/Tomcat7-1/webapps/www/index.jsp /usr/local/Tomcat7-2/webapps/www/
4)分别启动两个Tomcat
启动服务:/usr/local/Tomcat7-1/bin/startup.sh
可能提示:-bash: /usr/local/Tomcat7-1/bin/startup.sh: Permission denied
解决:cd /usr/local/Tomcat7-1/bin && chmod u+x *.sh
再次尝试启动服务:./startup.sh
浏览器打开IP:8080/www/index.jsp 与 IP:8081/www/index.jsp,显示如下
四、用Nginx实现集群的负载均衡
1)修改Nginx配置文件
打开配置文件:vim /usr/local/nginx/conf/nginx.conf
在http { 内添加:
#Tomcat
upstream zhengbin {
server 192.168.33.10:8080 max_fails=1 fail_timeout=10s;
server 192.168.33.10:8081 max_fails=1 fail_timeout=10s;
}
在http { 的 server { 的 location / { 内添加:
proxy_pass http://zhengbin;
保存配置::wq
2)重启Nginx
重新加载命令:/usr/local/nginx/sbin/nginx -s reload
查看更多命令:nginx/sbin/nginx -h
现在浏览器打开http://IP/www/,同样显示TomcatA或TomcatB,尝试不断刷新,两个页面会交替显示,即成功
但发现SessionID并不相同,接下来通过Redis来实现Session的共享(同步)
五、安装配置Redis并实现Session共享
1)安装测试Redis
安装:sudo apt-get install redis-server
测试:redis-server
提示:
[8206] 13 May 00:47:49 # Opening port: bind: Address already in use
测试:
- redis-cli
redis 127.0.0.1:6379> exit
说明安装成功
注意:
redis-cli shutdown 为关闭连接
再次连接时显示:
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
重新读取配置:redis-server /etc/redis/redis.conf
再次连接:
redis-cli
redis 127.0.0.1:6379> exit
2)下载相关jar
1.下载commons-pool,建议下载1.6,2.4.2没有测试成功
2.下载tomcat-redis-session-manager,我用的jdk7所以用的是-7.jar
3.下载jedis作为java的redis客户端,建议用2.1.0,最新版本没有测试成功
最后将三个jar分别放在两个Tomcat的 /lib 中
3)配置Tomcat
修改配置文件:vim /usr/local/Tomcat7-1/conf/context.xml
在<Context>节点中,添加以下内容:
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="127.0.0.1"
port="6379"
database="0"
maxInactiveInterval="60"/>
复制:cp /usr/local/Tomcat7-1/conf/context.xml /usr/local/Tomcat7-2/conf/
4)启动测试
1.启动Nginx:/usr/local/nginx/sbin/nginx 2.启动Redis:redis-server
3.启动Tomcat:/usr/local/Tomcat7-1/bin/startup.sh && /usr/local/Tomcat7-2/bin/startup.sh
浏览器打开http://IP/www/index.jsp
发现即使两个Tomcat在切换,但各自的SessionID是相同的
到此配置全部完成
感谢以下博主的精彩博文,虽然坑较多。。内容重复较多。。
nginx+redis+tomcat实现session共享 *Session处的解决方法没有测试成功
【原创】搭建Nginx(负载均衡)+Redis(Session共享)+Tomcat集群的更多相关文章
- 【转载】解决nginx负载均衡的session共享问题
https://blog.csdn.net/u012081441/article/details/71787164 之前有写过ubuntu环境下搭建nginx环境,今天来谈一下nginx sessio ...
- 怎么样 解决nginx负载均衡的session共享问题呢
php服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态,下面提供了几种方式来解决ses ...
- 解决nginx负载均衡的session共享问题
1.不使用session,换用cookie session是存放在服务器端的,cookie是存放在客户端的,我们可以把用户访问页面产生的session放到cookie里面,就是以cookie为中转站. ...
- nginx:负载均衡的session共享
一.场景 当nginx做了负载均衡之后,同一个ip的url请求服务器的时候,负载均衡会根据每台服务器的权重等一些设置将请求转发到不同的服务器上去进行处理,这样的话针对一些带有状态请求的情况来说就是个很 ...
- 几个常见用于解决nginx负载均衡的session共享问题的办法
查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享: PHP服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果sessio ...
- Nginx负载均衡和HTTPS配置及集群搭建
Nginx的高可用(HA)配置 1.高可用配置结构(画图说明) 2.KeepAlived的安装和配置 1.安装 yum install keepalived 2.keepalived.conf配置文件 ...
- keepalived+nginx+tomcat+redis实现负载均衡和session共享(原创)
keepalived+nginx+tomcat+redis实现负载均衡和session共享 直接上链接,码了一天,就不再重写了,希望能帮到大家,有问题欢迎留言交流.
- nginx+tomcat+redis负载均衡及session共享
概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...
- Nginx+Tomcat8+Memcached实现负载均衡及session共享
1> 基础环境 简易拓扑图: 2> 部署Tomcat [root@node01 ~]# ll -h ~ |egrep 'jdk|tomcat'-rw-r--r-- 1 root root ...
- Net分布式系统之二:CentOS系统搭建Nginx负载均衡
一.关于CentOS系统介绍 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat ...
随机推荐
- poj 3635(bfs+优先队列)
题目链接:http://poj.org/problem?id=3635 思路:本题主要运用的还是贪心思想,由于要求st->ed的最小花费,那么每经过一个城市,能不加油就尽量不加油,用dp[i][ ...
- poj 3522(最小生成树应用)
题目链接:http://poj.org/problem?id=3522思路:题目要求最小生成树中最大边与最小边的最小差值,由于数据不是很大,我们可以枚举最小生成树的最小边,然后kruskal求最小生成 ...
- mq_unlink
NAME mq_unlink - 销毁一个消息队列 (REALTIME) SYNOPSIS #include <mqueue.h> int mq_unlink(const char *na ...
- 替换应用程序exe图标,主要使用BeginUpdateResource,UpdateResource API函数
替换应用程序exe图标,主要使用的API函数是BeginUpdateResource(),UpdateResource(),EndUpdateResource()来使用自定义的ico文件类替换exe程 ...
- Android百度地图开发01之初体验
做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需求需要使用百度地图的一些功能,所以这几天研究了一下,现写一下blog记录一下,欢迎大家评论指正! 一.申请AK(API Key) ...
- [转]C:int型指针
开源中国:http://my.oschina.net/lotte1699/blog/142538 网页快照:http://www.piaocafe.com/295977937/139381567037 ...
- TOMCAT服务器不写端口号、不写项目名访问项目、虚拟目录配置
一.不写端口. 这个问题都被问烂了,因为TOMCAT默认的访问端口为8080,而TCP/IP协议默认80端口访问,大家之所以看到别的网站都不写端口号是因为人家用的的80端口访问的,而80端口因为的TC ...
- Linux 下Git的安装和配置
Git是分布式的版本控制系统,实际上是不需要固定的服务器的,Git与svn的最大区别是,它的使用流程不需要联机,可以先将对代码的修改,评论,保存在本机.等上网之后,再实时推送过去.同时它创建分支与合并 ...
- jQuery练习二球队移动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【USACO】【Section1.1】Greedy Gift Givers
小白题,也没啥好说的.关键我的算法感觉特别菜的一点是每次要遍历数组从人名找对应的编号,这个效率就很低了.看了ANALYZE里面也是这样的.不过它比我好的一点是我多余设置了initial_money变量 ...