Nginx+tomcat+redis 实现负载与session

[TOC]

** 部分内容源于网络,文档是个人学习笔记与记录**

安装需要准备的包

commons-pool2-2.2.jar
jedis-2.7.2.jar
tomcat-redis-session-manage-tomcat7.jar
#目前上面这些组件不支持tomcat8.0
apache-tomcat-7.0.75.tar.gz
jdk-8u45-linux-x64.tar.gz    #用以支持JAVA
nginx-1.7.8.tar.gz
nginx_upstream_check_module-master.zip   #后台健康监测插件,需要安装Nginx时编译进去

YUM源为epel

规划—(测试机的配置基本一致,本文只书写其一)

IP备注
192.168.247.151Nginx+Redis
192.168.247.152tomcat(test1)
192.168.247.153tomcat(test2)

192.168.247.151

安装Nginx

为了支持Nginx的rewrite功能,首先安装pcre*模块

yum -y install pcre*

为了进行后台的健康检测,所以下载淘宝的检测插件,安装Nginx直接编译进去

/usr/local/src

nginx_upstream_check_module-master.zip 和nginx-1.7.8.tar.gz

unzip  nginx_upstream_check_module-master.zip
tar -zxvf nginx-1.7.8.tar.gz
cd nginx-1.7.8
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_spdy_module --with-http_stub_status_module --with-pcre --add-module=/usr/local/src/nginx_upstream_check_module-master
make
make install

注意:如果是Nginx安装后进行的编译

cd nginx-1.7.8
patch -p1 < ../nginx_http_upstream_check_module/check_1.7.?+.patch    #版本根据Nginx选择
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_spdy_module --with-http_stub_status_module --with-pcre --add-module=/usr/local/src/nginx_upstream_check_module-master
make     #千万不能  make install  不然就真的覆盖了
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-1.7.0.bak
cp ./objs/nginx /usr/local/nginx/sbin/
/usr/local/nginx/sbin/nginx    #启动Nginx

Nginx安装完毕。配置Nginx

/usr/local/nginx/conf/nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    #开启负载均衡,指向后台tomcat集群
    upstream test {
        server 192.168.247.152:8080;
        server 192.168.247.153:8080;
        #开启健康检测机制
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_send "HEAD /test HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
        }
        
    server{
        listen  80;
        #server_name test.test.com; #设置域名
        #健康检测界面
        location = /nstatus {
            check_status;
            access_log off;
            allow all;
            }
        #测试页面 自己在tomcat上新建的
        location /test {
            proxy_pass http://test;
            proxy_set_header Host $host; 
            proxy_redirect off; 
            proxy_set_header X-Real-IP $remote_addr; 
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
           }
        }
}

启动Nginx 输入健康检测地址即可看到后台tomcat状态

安装Redis 实现session共享

下载redis包官网http://redis.io

注:redis的test需要tcl的支持,所以可先检查下是否安装了tcl

yum - y install
wget http://download.redis.io/redis-stable.tar.gz
tar –zxvf redis-stable.tar.gz
cd redis-stable
make

完毕后 src下会多出几个文件

redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server

可手动将其复制到/usr/local/bin目录下,也可执行make install

此处选择make install

make install

注意:若此时执行redis-server –v (查看版本命令),若提示redis-server command not found,则需要将/usr/local/bin目录加到环境变量,如何添加,此处不做详细介绍,可查看修改/etc/profile,(查看环境变量命令:echo $PATH)

redis安装完毕

修改redis配置文件

创建redis目录用以存放redis 日志 数据库 进程

mkdir -p /var/redis/{data,log,run}

拷贝解压包下的redis.conf文件至/etc/redis

cp -p /usr/local/src/redis-stable/redis.conf /etc/redis.conf
vim /etc/redis.conf
port 6379
daemonize yes #开启后台进程
pidfile /var/redis/run/6379.pid
logfile /var/redis/log/redis.log
dbfilename dump.rdb
dir /var/redis/data  #数据库路径 默认是./
requirepass centos #设置密码为centos
#bind 127.0.0.1  默认是开启的,只允许本地登陆,所以,要不添加IP,要不给注释了 

启动redis

redis-server /etc/redis.conf
ps -aux | grep redis
redis-cli    #客户端连接,进入redis

AUTH centos  #密码认证
SHUTDOWN
exit

service redis start

设置redis开机启动

cp -p /usr/local/src/redis-stable/utils/redis_init_script /etc/init.d/redis
ll    #看有没有执行权限

修改脚本的pid,conf等路径,添加开机启动权限

#开机启动
#chkconfig: 2345 90 10
#description: Redis is a persistent ket-value database
#added by zili on 20170218  

REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

PIDFILE=/var/redis/run/6379.pid
CONF="/etc/redis.conf"
...
#如果是在生产环境,那么就规划好端口等,尽量使用变量去实现,加以区分
比如
PIDFILE=/var/redis/run/${REDISPORT}.pid
CONF="/etc/redis_${REDISPORT}.conf"
service redis star | stop #等均可使用了,不能使用就查看权限 ll
chkconfig redis on

192.168.254.152/153

安装tomcat

tomcat 安装依赖JAVA的JDK 所以判断JDK是否安装并进行安装

rpm -qa | grep java

删除openjdk

rpm -e --nodeps java-1.7....... # -e 删除 --nodeps强行删除

下载 jdk-8u45-linux-x64.tar.gz 解压 到 /usr/java/

配置全局变量 vim /etc/profile 在末尾添家,注意路径!特别是JDK文件名字

export JAVA_HOME=/usr/java/jdk1.8.0_45
export JRE_HOME=/usr/java/jdk1.8.0_45/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$PATH:$JAVA_HOME/bin
java -version  #不报错,能看版本,安装成功

下载tomcat包 apache-tomcat-7.0.75.tar.gz (注意redis组件目前不支持tomcat8.0)

以及三个是jar插件 commons-pool2-2.2.jar jedis-2.7.2.jar tomcat-redis-session-manage-tomcat7.jar

解压 tomcat安装包 到/usr/local/tomcat

tar -zxvf apache-tomcat-7.0.75.tar.gz 
mv apache-tomcat-7.0.75 /usr/local/tomcat
mv  3个插件  /usr/local/tomcat/lib
/usr/local/tomcat/bin/startup.sh

浏览器即可访问tomcat 默认端口8080

tomcat配置

manager-gui等配置,去conf文件下修改 tomcat-users.xml

添加相应权限 注!只可以本地访问manager

 <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <role rolename="admin"/>
  <role rolename="admin-gui"/>
  <role rolename="manager-gui"/>
  <user username="vic" password="tomcat" roles="manager-gui,admin-gui,admin"/>
</tomcat-users>

重启生效

编辑test下的测试页面 主要测试session

<%@ page language="java" %><html>
  <head><title>152</title></head>
  <body>
    <h1><font color="green">152</font></h1>
    <table align="centre" border="1">
      <tr>
       <td>Session ID</td>
        <% session.setAttribute("tomcat.suzf.net","tomcat.suzf.net"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
      </tr>
    </table>
  </body>
</html> 

session共享保存设置

vim /usr/local/tomcat/conf/context.xml
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />        
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" 
    host="192.168.247.151"             <!-- Redis地址 -->
    port="6379"                        <!-- Redis端口 -->
    password="centos"                  <!-- Redis密码 -->
    database="0"                       <!-- 存储Session的Redis库编号 -->
    maxInactiveInterval="60"           <!-- Session失效的间隔(秒) -->
/>

重启生效

如若出现500错误 查看防火墙,selinux,iptables等以及redis是否启动

完毕

点赞