首页 > 代码库 > 单点登录(cas)、缓存技术与负载均衡

单点登录(cas)、缓存技术与负载均衡

针对电子商务网站的特点和性能要求,在Web服务器前端设置动态缓存服务器,作为Web服务器的前置机,实现动态内容的缓存,加快了响应用户访问的速度;通过一定的替换和更新策略保证用户访问到最新的内容,对提高Web服务器峰值负载下的运行能力,减少访问动态内容的延迟时间起到优化作用

网罗天下实施策略 
总体网络架构图 
Nginx代理RedisCluster Tomcat1Cluster Tomcat2Mysql MusterMysql SlaveFTP应用服务器集群MysqlDB 主从缓存服务器5Web 服务器1PC1以太网2数据库服务器1通信链路1智能手机1云1便携电脑1平板电脑1防火墙1FTP 服务器.191代理服务器.14符号计数说明单位说明图例Cluster Tomcat3Cluster Tomcat4 
网罗天下实施策略 设计原理 
Nginx:服务的代理与客户端请求与分发。SSL证书的配置。80及443端口的监听。 
Redis:动态缓存服务器,Session共享。 
Tomcat:Web应用服务器集群。 
JbossCache:单点登录票据的共享。 
关键技术 
Nginx 安装 
安装nginx,下载下面的插件安装,否则nginx无法识别tomcat中jvmRoute,从而无法达到session复制的效果。 
tar xzf nginx-upstream-jvm-route-0.1.tar.gz 
tar xzf nginx-1.0.5.tar.gz 
Nginx 配置 
1、 nginx.conf中http{}中配置upstream wlotx { 
ip_hash; 
server 192.168.1.218:8080;#Tomcat1 
server 192.168.1.219:8080; #Tomcat2 

关键技术 
Nginx 配置 
2、 Server 80端口选段: 
server { 
listen 80; 
server_name buseniss.wlotx.com; 
#charset koi8-r; 
#access_log logs/host.access.log main; 
location / { 
index index.html index.htm index.jsp; 
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_connect_timeout 3; 
proxy_send_timeout 30; 
proxy_read_timeout 30; 
proxy_pass http://wlotx

关键技术 
Nginx 配置 
3、 HTTPS 443端口 Server 选段: 
server { 
listen 443; 
server_name cas.wlotx.com; 
ssl on; 
ssl_certificate /usr/local/nginx/conf/server.crt; 
ssl_certificate_key /usr/local/nginx/conf/server.key; 
ssl_session_timeout 5m; 
ssl_protocols SSLv3 TLSv1; 
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; 
ssl_prefer_server_ciphers on; 
location / { 
root html; 
index index.html index.htm; 
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_set_header X-Forwarded-Proto $scheme; 
proxy_connect_timeout 3; 
proxy_send_timeout 30; 
proxy_read_timeout 30; 
proxy_pass http://wlotx


关键技术 
Redis安装及配置 
daemonize yes 
pidfile /usr/local/redis/var/redis.pid 
port 6379 
timeout 300 
loglevel debug 
logfile /usr/local/redis/var/redis.log 
databases 16 
save 900 1 
save 300 10 
save 60 10000 
rdbcompression yes 
dbfilename dump.rdb 
dir /usr/local/redis/var/ 
appendonly no 
appendfsync always 
glueoutputbuf yes 
shareobjects no 
shareobjectspoolsize 1024 
关键技术 Redis安装及配置 
将上面内容写为redis.conf并保存到/usr/local/redis/etc/目录下。 
然后在命令行执行: /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf 
即可在后台启动redis服务,这时通过 telnet 127.0.0.1 6379 可查看redis的服务状态。 
关键技术 
JBossCacheTicketRegistry+组播 
由于单点登录系统的特殊性,不能简单使用session复制技术来实现多服务器间的登录信息共享。 
JBossCacheTicketRegistry提供了针对单点登录系统集群的共享策略。 
在cas项目工程里spring-configuration/ticketRegistry.xml文件里面的DefaultTicketRegistry换成JBossCacheTicketRegistry缓存 ;在class文件里添加jbossCache.xml文件添加jboss的缓存配置。 
jbossCache.xml中依赖组播。 
<attribute name="ClusterConfig"> 
<config> 
<UDP mcast_addr="224.0.0.8" mcast_port="48866" 
ip_ttl="32" ip_mcast="true" 
bind_addr="192.168.1.219" 
关键技术 
Tomcat Cluster 安装 
安装tomcat 
tar zxf apache-tomcat-6.0.29.tar.gz 
mv apache-tomcat-6.0.29/usr/local/tomcat 
cp tomcat-replication.jar /usr/local/tomcat/lib 
在另一台机器上安装tomcat_2,步骤同1 
分别在tomcat服务器安装jdk 
chmod 755 jdk-6u26-linux-i586-rpm.bin 
./jdk-6u26-linux-i586-rpm.bin 
cat >>/etc/profile <<EOF 
export JAVA_HOME=/usr/java/jdk1.6.0_26 
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib 
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin 
EOF; 
source /etc/profile //使环境变量立即生效 
关键技术 
Tomcat Cluster 配置1 
<Connector port="8443" className="org.apache.coyote.http11.Http11Protocol" 
maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
enableLookups="true" disableUploadTimeout="true" 
cceptCount="100" scheme="https" secure="true" 
SSLEnabled="true" clientAuth="false" 
keystoreFile="wlotx2012" keystorePass="wlotx2012" 
sslProtocol="TLS" 
truststorefile="%JAVA_HOME%/jre/lib/security/cacerts" truststoretype="JKS" truststorepass="changeit" 
/> 
关键技术 
Tomcat Cluster 配置2 
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> 
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="http://www.mamicode.com/https"/> 
注:标红部分为Nginx和TomcatSSL请求间的证书转化。 
关键技术 
Tomcat Cluster 配置3 
基于JBossCache的单点登录系统Tomcat配置: 
<Host name="cas.wlotx.com" appBase="/data/www" 
unpackWARs="true" autoDeploy="false" deployOnStartup="false"> 
<Context path="" docBase="/data/www/cas" reloadable="true" distributable="true"> 
</Context> 
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
prefix="cas_access_log." suffix=".txt" 
pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 
</Host> 
关键技术 
Tomcat Cluster 配置4 
基于Redis session 共享的应用系统配置: 
<Host name="edu.wlotx.com" appBase="/data/www" 
unpackWARs="true" autoDeploy="false" distributable="true"> 
<Context path="" docBase="/data/www/teachmysql" reloadable="true" distributable="true"> 
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /> 
<Manager className=“com.radiadesign.catalina.session.RedisSessionManager” host="192.168.1.218" 
port="6379" database="0" maxInactiveInterval="600" /> 
</Context> 
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
prefix="edu_access_log." suffix=".txt" 
pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 
</Host> 
关键技术 
Nginx+Tomcat+SSL 
实际上,大规模的网站都有很多台Web服务器和应用服务器组成,用户的请求可能是经由 Varnish、HAProxy、Nginx之后才到应用服务器,中间有好几层。而中小规模的典型部署常见的是 Nginx+Tomcat 这种两层配置,而Tomcat 会多于一台,Nginx 作为静态文件处理和负载均衡。 
如果Nginx作为前端代理的话,则Tomcat根本不需要自己处理 https,全是Nginx处理的。用户首先和Nginx建立连接,完成SSL握手,而后Nginx 作为代理以 http 协议将请求转给 tomcat 处理,Nginx再把 tomcat 的输出通过SSL 加密发回给用户,这中间是透明的,Tomcat只是在处理 http 请求而已。因此,这种情况下不需要配置 Tomcat 的SSL,只需要配置 Nginx 的SSL 和 Proxy。网罗天下实施策略 
总体网络架构图 
Nginx代理RedisCluster Tomcat1Cluster Tomcat2Mysql MusterMysql SlaveFTP应用服务器集群MysqlDB 主从缓存服务器5Web 服务器1PC1以太网2数据库服务器1通信链路1智能手机1云1便携电脑1平板电脑1防火墙1FTP 服务器.191代理服务器.14符号计数说明单位说明图例Cluster Tomcat3Cluster Tomcat4 
网罗天下实施策略 设计原理 
Nginx:服务的代理与客户端请求与分发。SSL证书的配置。80及443端口的监听。 
Redis:动态缓存服务器,Session共享。 
Tomcat:Web应用服务器集群。 
JbossCache:单点登录票据的共享。 
关键技术 
Nginx 安装 
安装nginx,下载下面的插件安装,否则nginx无法识别tomcat中jvmRoute,从而无法达到session复制的效果。 
tar xzf nginx-upstream-jvm-route-0.1.tar.gz 
tar xzf nginx-1.0.5.tar.gz 
Nginx 配置 
1、 nginx.conf中http{}中配置upstream wlotx { 
ip_hash; 
server 192.168.1.218:8080;#Tomcat1 
server 192.168.1.219:8080; #Tomcat2 

关键技术 
Nginx 配置 
2、 Server 80端口选段: 
server { 
listen 80; 
server_name buseniss.wlotx.com; 
#charset koi8-r; 
#access_log logs/host.access.log main; 
location / { 
index index.html index.htm index.jsp; 
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_connect_timeout 3; 
proxy_send_timeout 30; 
proxy_read_timeout 30; 
proxy_pass http://wlotx

关键技术 
Nginx 配置 
3、 HTTPS 443端口 Server 选段: 
server { 
listen 443; 
server_name cas.wlotx.com; 
ssl on; 
ssl_certificate /usr/local/nginx/conf/server.crt; 
ssl_certificate_key /usr/local/nginx/conf/server.key; 
ssl_session_timeout 5m; 
ssl_protocols SSLv3 TLSv1; 
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; 
ssl_prefer_server_ciphers on; 
location / { 
root html; 
index index.html index.htm; 
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_set_header X-Forwarded-Proto $scheme; 
proxy_connect_timeout 3; 
proxy_send_timeout 30; 
proxy_read_timeout 30; 
proxy_pass http://wlotx


关键技术 
Redis安装及配置 
daemonize yes 
pidfile /usr/local/redis/var/redis.pid 
port 6379 
timeout 300 
loglevel debug 
logfile /usr/local/redis/var/redis.log 
databases 16 
save 900 1 
save 300 10 
save 60 10000 
rdbcompression yes 
dbfilename dump.rdb 
dir /usr/local/redis/var/ 
appendonly no 
appendfsync always 
glueoutputbuf yes 
shareobjects no 
shareobjectspoolsize 1024 
关键技术 Redis安装及配置 
将上面内容写为redis.conf并保存到/usr/local/redis/etc/目录下。 
然后在命令行执行: /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf 
即可在后台启动redis服务,这时通过 telnet 127.0.0.1 6379 可查看redis的服务状态。 
关键技术 
JBossCacheTicketRegistry+组播 
由于单点登录系统的特殊性,不能简单使用session复制技术来实现多服务器间的登录信息共享。 
JBossCacheTicketRegistry提供了针对单点登录系统集群的共享策略。 
在cas项目工程里spring-configuration/ticketRegistry.xml文件里面的DefaultTicketRegistry换成JBossCacheTicketRegistry缓存 ;在class文件里添加jbossCache.xml文件添加jboss的缓存配置。 
jbossCache.xml中依赖组播。 
<attribute name="ClusterConfig"> 
<config> 
<UDP mcast_addr="224.0.0.8" mcast_port="48866" 
ip_ttl="32" ip_mcast="true" 
bind_addr="192.168.1.219" 
关键技术 
Tomcat Cluster 安装 
安装tomcat 
tar zxf apache-tomcat-6.0.29.tar.gz 
mv apache-tomcat-6.0.29/usr/local/tomcat 
cp tomcat-replication.jar /usr/local/tomcat/lib 
在另一台机器上安装tomcat_2,步骤同1 
分别在tomcat服务器安装jdk 
chmod 755 jdk-6u26-linux-i586-rpm.bin 
./jdk-6u26-linux-i586-rpm.bin 
cat >>/etc/profile <<EOF 
export JAVA_HOME=/usr/java/jdk1.6.0_26 
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib 
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin 
EOF; 
source /etc/profile //使环境变量立即生效 
关键技术 
Tomcat Cluster 配置1 
<Connector port="8443" className="org.apache.coyote.http11.Http11Protocol" 
maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
enableLookups="true" disableUploadTimeout="true" 
cceptCount="100" scheme="https" secure="true" 
SSLEnabled="true" clientAuth="false" 
keystoreFile="wlotx2012" keystorePass="wlotx2012" 
sslProtocol="TLS" 
truststorefile="%JAVA_HOME%/jre/lib/security/cacerts" truststoretype="JKS" truststorepass="changeit" 
/> 
关键技术 
Tomcat Cluster 配置2 
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> 
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="http://www.mamicode.com/https"/> 
注:标红部分为Nginx和TomcatSSL请求间的证书转化。 
关键技术 
Tomcat Cluster 配置3 
基于JBossCache的单点登录系统Tomcat配置: 
<Host name="cas.wlotx.com" appBase="/data/www" 
unpackWARs="true" autoDeploy="false" deployOnStartup="false"> 
<Context path="" docBase="/data/www/cas" reloadable="true" distributable="true"> 
</Context> 
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
prefix="cas_access_log." suffix=".txt" 
pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 
</Host> 
关键技术 
Tomcat Cluster 配置4 
基于Redis session 共享的应用系统配置: 
<Host name="edu.wlotx.com" appBase="/data/www" 
unpackWARs="true" autoDeploy="false" distributable="true"> 
<Context path="" docBase="/data/www/teachmysql" reloadable="true" distributable="true"> 
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /> 
<Manager className=“com.radiadesign.catalina.session.RedisSessionManager” host="192.168.1.218" 
port="6379" database="0" maxInactiveInterval="600" /> 
</Context> 
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
prefix="edu_access_log." suffix=".txt" 
pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 
</Host> 
关键技术 
Nginx+Tomcat+SSL 
实际上,大规模的网站都有很多台Web服务器和应用服务器组成,用户的请求可能是经由 Varnish、HAProxy、Nginx之后才到应用服务器,中间有好几层。而中小规模的典型部署常见的是 Nginx+Tomcat 这种两层配置,而Tomcat 会多于一台,Nginx 作为静态文件处理和负载均衡。 
如果Nginx作为前端代理的话,则Tomcat根本不需要自己处理 https,全是Nginx处理的。用户首先和Nginx建立连接,完成SSL握手,而后Nginx 作为代理以 http 协议将请求转给 tomcat 处理,Nginx再把 tomcat 的输出通过SSL 加密发回给用户,这中间是透明的,Tomcat只是在处理 http 请求而已。因此,这种情况下不需要配置 Tomcat 的SSL,只需要配置 Nginx 的SSL 和 Proxy。

本文出自 “Linux技术” 博客,请务必保留此出处http://83189510.blog.51cto.com/5865704/1579164

单点登录(cas)、缓存技术与负载均衡