centos实现基于Redis作为session的tomcat集群

本文在centos服务器使用redissessions实现tomcat集群共享httpsession信息;本文基于springmvc实现;

1. 查看JDK版本

java -version

显示

[root@localhost tomcat]# java -version
openjdk version “1.8.0_181”
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

2. 配置jdk(如果 java -version没有信息)

# 安装jdk后,修改 /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH

# source /etc/profile 生效

3. 安装 tomcat

下载地址: http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.47/bin/

tar -xzvf ....tar.gz
# 重命名,添加端口后缀 8081,再重新拷贝一份,目录后缀改为 8082
mv apache-tomcat-80.0.47 apache-tomcat-80.0.47-8081
cp apache-tomcat-80.0.47-8081/ apache-tomcat-80.0.47-8082/

将 已经编译的 tomcat redis session jar包以及 pool2 以及 jedis jar 保存到 centos 的 tomcat/libs 下;

下载后,将后缀都改为.jar;

修改 /conf/context.xml 文件

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

修改端口:  8081以及8082 (将两份 tomcat 原端口为 80 的改为 8081和8082)

<Server port="8006" shutdown="SHUTDOWN">

<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
  <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

8443 不必修改;

启动 tomcat 无法访问 : 是防火墙的问题;

启动: systemctl start firewalld 
关闭: systemctl stop firewalld 
查看状态: systemctl status firewalld  
开机禁用  : systemctl disable firewalld 
开机启用  : systemctl enable firewalld

关闭防火墙后,访问正常;

访问应用出现错误:

org.apache.jasper.JasperException: javax.servlet.ServletException: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool (redis还未安装启动);

访问接口:

@RequestMapping(value = "/usrLogin")
public ModelAndView testLogin(HttpSession session) {
	ModelAndView mav = new ModelAndView("home");
	mav.addObject("loginInfo""" + session.getId());
		
	return mav;
}

安装redis:

tar xzvf  redis.xxxx.tar.gz

[root@localhost redis]# make MALLOC=libc

[root@localhost redis]# make & make install

可能是 redis.conf 的 bind 127.0.0. 1 引起; 注释掉;

重启redis:

#设置为开机自启动服务器 chkconfig redisd on 
#打开服务 service redisd start 
#关闭服务 service redisd stop

验证 redis session 是否有效;

springmvc的spring-mvc.xml上添加如下 配置:

<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">  
    <property name="locations">  
        <list>  
           <value>classpath*:webinfo.properties</value>  
         </list>  
    </property>  
</bean>

webinfo.properties 上添加
site.port=8081 (两个tomcat 分别配置各自的端口)

Controller.java 添加

@Value("${site.port}")
private String sitePort;

@RequestMapping(value = "/usrLogin")
public ModelAndView testLogin(HttpSession session) {
	ModelAndView mav = new ModelAndView("home");
		
	if (session.getAttribute("userName"== null) {
	        System.out.println("no session");
		session.setAttribute("userName""shareName" + sitePort);
	}

	mav.addObject("loginInfo""" + session.getAttribute("userName").toString());
		
	return mav;

如果生效,则显示的 loginInfo,则第二次开始不会出现 no session的提示,每次访问端口都可能变化;

欢迎您的到来,感谢您的支持!

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注