在開發(fā)中的開源項目JeePlatform:https://github.com/u014427391/jeeplatform
歡迎start(s收藏),打算集成單點登錄到自己的開源項目里,所以先搭建環(huán)境
【集群簡介】
使用nginx作為負載均衡,使用redis存儲tomcat session,來實現(xiàn)集群中tomcat session的共享,使用redis作為cas ticket的倉庫,來實現(xiàn)集群中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
復制建立服務(wù)啟動腳本,以便使用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
執(zhí)行配置文件
./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
創(chuàng)建tomcat應(yīng)用文件夾
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啟動文件添加權(quán)限
cd /opt/tomcat1/bin && chmod u+x *.sh
cd /opt/tomcat2/bin && chmod u+x *.sh
cd到tomcat的bin目錄下面,啟動
./startup.sh
【Redis安裝】
因為RocketMQ是基于Java開發(fā)的,所以安裝RocketMQ之前,我們需要先安裝JDK,因為服務(wù)器一般采用Linux,所以本博客只介紹基于Linux系統(tǒng)的教程
1.在/usr/目錄下創(chuàng)建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.設(shè)置環(huán)境變量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
假如系統(tǒng)有安裝yum,就可以直接使用yum install java-1.7.0-openjdk下載jdk
設(shè)置環(huán)境變量,其它操作同上
export JAVA_HOME=/usr/java/jdk1.8.0_102
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib
然后開始Redis安裝
下載文件:
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
解壓
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目錄下,也可執(zhí)行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服務(wù)后臺運行
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服務(wù)后臺運行,否則,啟動Redis服務(wù)時,占據(jù)在前臺,占用了主用戶界面,造成其它的命令執(zhí)行不了
添加Redis服務(wù)
chkconfig --add redis
設(shè)置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服務(wù)器的,即本機,要遠程使用必須注釋下面一行
添加日志文件路徑,記得創(chuàng)建相關(guān)目錄
設(shè)置一下Redis的密碼
Redis啟動
service redis start
檢測Redis是否啟動
ps -ef | grep redis
Redis客戶端使用
redis-cli
這里可以使用RedisDesktopManager客戶端軟件連接Redis服務(wù)器
【Nginx負載均衡】
cd /usr/local/nginx/conf,找到nginx.cong配置文件
在http{}里面加入,ip1就是你的一臺服務(wù)器的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
這時就可以實現(xiàn)nginx反向代理了
訪問Tomcat1:http://ip1:8080/www/index.jsp
訪問Tomcat2:http://ip2:8081/www/index.jsp
訪問nginx代理的tomcat集群:http://ip1/www/index.jsp
刷新頁面發(fā)現(xiàn),tomcat1和tomcat2的頁面會切換,但是sessionID是會變的,然后我們實現(xiàn)基于Redis的會話共享
【Redis會話共享】
下載實現(xiàn)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的<Context></Context>里加入如下配置
<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" />
刷新頁面發(fā)現(xiàn),tomcat1和tomcat2的頁面會切換,但是sessionID的不變的,說明Session共享實現(xiàn)了
參考教程:
單點登錄集群:https://www.cnblogs.com/zhengbin/p/5488415.html
Redis安裝教程:http://blog.csdn.net/ludonqin/article/details/47211109
Tomcat+Nginx+Redis會話共享實現(xiàn):http://blog.csdn.net/grhlove123/article/details/48047735
Tomcat+Nginx+Redis實現(xiàn)負載均衡、會話共享:
https://www.cnblogs.com/zhrxidian/p/5432886.html