CentOS下实现Nginx+Tomcat+Redis应用服务器集群负载均衡和Session共享

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dc282614966/article/details/81201838

前言:

     系统:CentOS 6.4 x64

     JDK:1.7

     Tomcat:7.X

      服务器集群分布:

      nginx:192.168.2.132:80

      tomcat: 192.168.20.132:8088

                   192.168.20.132:8099

      redis:    192.168.20.132:6379

     安装包:

     nginx下载地址:http://nginx.org/en/download.html

     redis下载地址:https://redis.io/download

     tomcat和Jdk自行下载安装

    搭建集群所需要的jar包下载地址:https://download.csdn.net/download/dc282614966/10564781

一、Nginx安装

nginx版本:nginx-1.15.2

安装方式:源码编译安装

1.安装必须环境

nginx的编译需要c++,同时prce(重定向支持)和openssl(https支持)也需要安装。

[root@hadoop05 ~]# yum install gcc-c++
[root@hadoop05 ~]# yum -y install pcre*
[root@hadoop05 ~]# yum -y install openssl*

2.将下载好的nginx-1.15.2.tar.gz包解压到/usr/local/下

[root@hadoop05 ~]# tar -zxvf nginx-1.15.2.tar.gz -C /usr/local/

3.进入cd /usr/local/nginx-1.15.2/ 并设置安装目录

[root@hadoop05 nginx-1.15.2]# ./configure --prefix=/usr/local/nginx

4.如果没有报错,开始编译安装

[root@hadoop05 nginx-1.15.2]# make
[root@hadoop05 nginx-1.15.2]# install

4.防火墙端口打开80

1)在iptables下添加如下的设置:

[root@hadoop05 nginx-1.15.2]# vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW-m tcp -p tcp --dport 80 -j ACCEPT

 

2)重启iptalbes

service iptables restart

5.启动nginx服务

进入到cd /usr/local/nginx/sbin目录下

[root@hadoop05 sbin]# ./nginx 

查看进程,可以看到nginx的master和worker进程

6.可以通过访问ip:80测试,看到页面这样的提示就说明安装成功

重启的命令:

[root@hadoop05 sbin]# ./nginx -s reload

二、redis安装

1.下载安装包

wget http://download.redis.io/releases/redis-4.0.10.tar.gz或者https://redis.io/download

2.解压大/usr/local/目录下

[root@hadoop05 redis-4.0.10]# tar -zxvf redis-4.0.10.tar.gz -C /usr/local/

3.进入到/usr/local/redis-4.0.10/

[root@hadoop05 /]# cd /usr/local/redis-4.0.10/

4.编译安装

[root@hadoop05 redis-4.0.10]# make
[root@hadoop05 redis-4.0.10]# make PREFIX=/usr/local/redis install

5.启动

进入到编译后的文件目录下/usr/local/redis/bin/,启动redis,如下图:

[root@hadoop05 /]# cd  /usr/local/redis/bin/

启动:

[root@hadoop05 bin]# ./redis-server

6.设置redis后台启动

将解压目录下的redis.conf文件复制到编译后的redis文件下:

[root@hadoop05 redis-4.0.10]# cp redis.conf /usr/local/redis

修改redis.conf文件,将no改为yes,然后重亲redis

重新启动redis:

[root@hadoop05 redis]# ./bin/redis-server ./redis.conf

查看进程是否启动:

[root@hadoop05 bin]# ps -ef|grep redis

三、tomcat配置

1.下载所需的jar,然后拷贝到tomcat的lib下面:

jar包下载地址:https://download.csdn.net/download/dc282614966/10563909

2.改tomcat的context.xml配置文件,将下面的配置信息放入context标签内

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
        host="localhost"
        port="6379"
        database="0"
        maxInactiveInterval="60"/>

四、nginx配置

这里由于要做反向代理,需要在nginx的conf目录下配置nginx.conf的配置文件。画红线部分为添加的内容,修改如下:

这里指定了本机下的两个Tomcat实例,端口分别为8088,8099,权重都为1,后边配置Tomcat实例,nginx-tomcat-redis这个是我测试项目的项目名,下边要用到:

 upstream nginx-tomcat-redis{
    #weigth参数表示权值,权值越高被分配到的几率越大
    #本机上的Squid开启3128端口
        server 127.0.0.1:8088 weight=1;
        server 127.0.0.1:8099 weight=1;
    }
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://nginx-tomcat-redis;
        }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://nginx-tomcat-redis;
        }
    }

五、测试

1.jsp页面

      在测试项目中写了个简单的jsp页面,在js中调用自定义的一个servlet,然后通过servlet获取sessionId,将获取的sessionId返回到jsp页面显示,代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>First Page</title>
<script type="text/javascript" src="./js/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="./js/session.js"></script>
</head>
<body>
	<h1>第一个jsp页面</h1>
	<div id="firstSessinId">SessionId:</div>
</body>
</html>

2.js文件

       js中主要是通过ajax调用servlet来获取sessionId,代码如下:

$(function() {
	
	$.ajax({
		url : 'session',
		method : 'get',
		success : function(result){
			$("#firstSessinId").append(result);
		}
	});
	
})

3.servlet文件

      主要是用来获取sessionId,然后返回给jsp页面,代码如下:

public class SessionShareServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
    public SessionShareServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

			String id = request.getSession().getId();
			request.getSession().setAttribute("session", id);
			System.out.println(id);
			OutputStream out = response.getOutputStream();
			out.write(id.getBytes());
			
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

4.页面测试效果

访问页面如下,放反复刷新页面页面时会出现“第一个jsp页面”和“第二个jsp页面”交替出现,则证明nginx配置成功,当两个页面的SessionId相同则说明共享session配置成功。

5.项目源码下载地址:https://github.com/dengchao3119/nginx-tomcat-redis.git

猜你喜欢

转载自blog.csdn.net/dc282614966/article/details/81201838