在开发中的开源项目JeePlatform:github.com/u014427391/… 欢迎start(s收藏),打算集成单点登录到自己的开源项目里,所以先搭建环境
【集群简介】 使用nginx作为负载均衡,使用redis存储tomcat session,来实现集群中tomcat session的共享,使用redis作为cas ticket的仓库,来实现集群中cas ticket的一致性。
【安装教程】 【keepalived安装】 下载keepalived到/usr/local/src
tar -xzvf keepalived-1.2.19.tar.gz
cd /usr/local/src/keepalived-1.2.19
配置
./configure --prefix=/usr/local/keepalived
编译
make && make install
复制建立服务启动脚本,以便使用service命令控制之:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
chmod +x /etc/init.d/keepalived
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
启动keepalived
service keepalived start|stop
【nginx安装】 nginx安装之前要先安装pcre、openssl、zlib
注意:./configure --prefix=/usr/local/keepalived configure:error:!!! OpenSSL is not properly installed on your system. !!! !!! Can not include OpenSSL headers files. 解决方法:安装openssl,同时pcre也一起安装一下,gcc、zlib没有安装也可以安装一下
yum -y install pcre pcre-devel openssl openssl-devel zlib* gcc
解压 下载nginx到/usr/local/src
tar -xzvf nginx-1.11.4.tar.gz
cd nginx-1.11.4
执行配置文件
./configure
编译
make && make install
启动
cd /usr/local/nginx/sbin
./nginx
重启
cd /usr/local/nginx/sbin
./nginx -s reload
检验配置文件是否正确 检验:
ps -ef|grep nginx
/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
或者
cd /usr/local/nginx/sbin
./nginx -t
【Tomcat集群】 tar -xzvf apache-tomcat-7.0.82.tar.gz cp -r apache-tomcat-7.0.82 tomcat2 mv apache-tomcat-7.0.82 tomcat1 修改其中一个tomcat的配置文件:vi 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
创建tomcat应用文件夹 mkdir /opt/tomcat1/webapps/www mkdir /opt/tomcat2/webapps/www
在www文件夹上传index.jsp测试文件
<%@ page language="java" %>
<html>
<head><title>Tomcat1</title></head>
<body>
<table align="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 1");
%>
访问Tomcat1:http://ip1:8080/www/index.jsp,测试是否成功 同理,在tomcat2的www文件夹里也上传index.jsp测试文件
<%@ page language="java" %>
<html>
<head><title>Tomcat2</title></head>
<body>
<table align="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 2");
%>
访问Tomcat2:http://ip2:8081/www/index.jsp 给Tomcat启动文件添加权限
cd /opt/tomcat1/bin && chmod u+x *.sh
cd /opt/tomcat2/bin && chmod u+x *.sh
cd到tomcat的bin目录下面,启动 ./startup.sh
【Redis安装】 因为RocketMQ是基于Java开发的,所以安装RocketMQ之前,我们需要先安装JDK,因为服务器一般采用Linux,所以本博客只介绍基于Linux系统的教程 1.在/usr/目录下创建java目录 mkdir /usr/java 进入java目录 cd /usr/java 2.下载jdk到/usr/java目录,然后tar解压(可以使用xftp在本地下载jdk,或者使用命令curl -O url下载) tar -zxvf jdk-8u102-linux-x64.tar.gz 3.设置环境变量vi编辑 vi /etc/profile profile文件加入如下配置,如何按esc退出,:wq!保持
export JAVA_HOME=/usr/java/jdk1.8.0_102
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib
让修改生效 source /etc/profile 验证jdk有效性 java -version 假如系统有安装yum,就可以直接使用yum install java-1.7.0-openjdk下载jdk 设置环境变量,其它操作同上
export JAVA_HOME=/usr/java/jdk1.8.0_102
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib
然后开始Redis安装 下载文件: wget download.redis.io/releases/re… 解压 tar xzf redis-3.2.8.tar.gz
cd redis-3.2.8
编译:make
如果遇到以下截图中的报错,将make改为make MALLOC=libc;
可手动拷贝redis-server、redis-cli、redis-check-aof、redis-check-dump等至/usr/local/bin目录下,也可执行make install Redis配置 负责初始化文件到/etc/rc.d/init.d/redis cp /usr/local/src/redis/utils/redis_init_script /etc/rc.d/init.d/redis
chmod +x /etc/init.d/redis
mkdir -p/etc/redis/
cp redis.conf /etc/redis/6379.conf
#!/bin/sh
#添加改配置
#chkconfig: 2345 80 90
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
REDISPORT=6379
#修改Redis-server路径
EXEC=/usr/local/redis/bin/redis-server
#修改Redis-cli路径
CLIEXEC=/usr/local/redis/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF & #加入&符号,使Redis服务后台运行
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
注意:添加&符号的作用是使Redis服务后台运行,否则,启动Redis服务时,占据在前台,占用了主用户界面,造成其它的命令执行不了
添加Redis服务 chkconfig --add redis
设置Redis全局 vi /etc/profile
export PATH="$PATH:/usr/local/redis/bin"
. /etc/profile
建议(本博客还是默认使用6379端口):将/etc/redis/6379.conf这个文件下载到本地,然后修改下面截图中的配置信息,端口号一定要修改,如果使用默认的端口号,放到阿里云上面会被植入木马,导致cpu一直100%;
默认是只有127.0.0.1的ip能访问Redis服务器的,即本机,要远程使用必须注释下面一行 添加日志文件路径,记得创建相关目录 设置一下Redis的密码 Redis启动 service redis start检测Redis是否启动
ps -ef | grep redis
Redis客户端使用
redis-cli
这里可以使用RedisDesktopManager客户端软件连接Redis服务器
【Nginx负载均衡】 cd /usr/local/nginx/conf,找到nginx.cong配置文件 在http{}里面加入,ip1就是你的一台服务器的ip,ip2同理
upstream mynginxserver{
server ip1:8080 weight=1 max_fails=1 fail_timeout=10s;
server ip2:8081 weight=2 max_fails=1 fail_timeout=10s;
}
upstream可以自己定义名称
然后再http{}的server{}里修改,加入proxy_pass
location / {
proxy_pass http://mynginxserver;
root html;
index index.html index.htm index.jsp;
}
然后重启nginx 重启 cd /usr/local/nginx/sbin ./nginx -s reload
这时就可以实现nginx反向代理了 访问Tomcat1:http://ip1:8080/www/index.jsp 访问Tomcat2:http://ip2:8081/www/index.jsp 访问nginx代理的tomcat集群:http://ip1/www/index.jsp
刷新页面发现,tomcat1和tomcat2的页面会切换,但是sessionID是会变的,然后我们实现基于Redis的会话共享
【Redis会话共享】 下载实现Redis+Tomcat会话共享的jar,commons-logging-1.2.jar、commons-pool2-2.4.2.jar、jedis-2.8.2.jar、tomcat-redis-session-manage-tomcat7.jar、tomcat-juli.jar、tomcat-juli-adapters.jar copy这些jar到tomcat的lib文件夹下面,再将tomcat-juli.jar、tomcat-juli-adapters.jar放在bin文件夹下面 在tomcat的conf的context.xml的里加入如下配置
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="127.0.0.1"
port="6379"
database="0"
password="redis密码"
maxInactiveInterval="60" />
刷新页面发现,tomcat1和tomcat2的页面会切换,但是sessionID的不变的,说明Session共享实现了
参考教程:
单点登录集群:www.cnblogs.com/zhengbin/p/… Redis安装教程:blog.csdn.net/ludonqin/ar… Tomcat+Nginx+Redis会话共享实现:blog.csdn.net/grhlove123/… Tomcat+Nginx+Redis实现负载均衡、会话共享: www.cnblogs.com/zhrxidian/p…