目标:

  Tomcat+Nginx+Memcached

  Ubuntu 16.04 64位测试通过

  动静分类、负载均衡、集群、Javolution序列化、高性能、高可用

配置环境(目前均为最新稳定版):
  jdk-8u131-linux-x64
  apache-tomcat-8.5.14
  nginx-1.12.0
  memcached-1.4.36

写在前面:

  原本打算配置kryo序列化框架的,却怎么也弄不成功,只能用Javolution了
  如果最后发现不成功一般问题都会出在Tomcat,看看日志解决
  tomcat下可以部署多个项目,并且依旧动静分类
  nginx配置了将jsp,servlet,do文件后缀交给Tomcat处理,可以根据情况添加
  如果不使用root账号运行nginx的话,nginx的user配置是没用的
  Tomcat,nginx都进行了优化配置,无需修改原工程的任何内容,直接放到Tomcat/webapps里即可

过程:

  过程较长,请仔细

#sudo passwd
#使用管理员来进行配置
sudo su
#更新软件列表
apt-get update
#安装所需依赖文件
apt-get install gcc zlib1g zlib1g-dev openssl libssl-dev libpcre3 libpcre3-dev libevent-dev
#重启(建议)
reboot sudo su
#安装配置JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
tar -zxvf jdk-8u131-linux-x64.tar.gz
mv jdk1..0_131 /usr/local/jdk #配置JDK环境变量
sed -i '$a ulimit -n 65535' /etc/profile
sed -i '$a export JAVA_HOME=/usr/local/jdk' /etc/profile
sed -i '$a export JRE_HOME=$JAVA_HOME/jre' /etc/profile
sed -i '$a export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH' /etc/profile
sed -i '$a export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH' /etc/profile
source /etc/profile rm jdk-8u131-linux-x64.tar.gz #安装配置memcached
wget http://www.memcached.org/files/memcached-1.4.36.tar.gz
tar -zxvf memcached-1.4..tar.gz
cd memcached-1.4.
./configure --prefix=/usr/local/memcached
make && make install
cd .. && rm -rf memcached-1.4. && rm memcached-1.4..tar.gz #安装配置Tomcat
wget http://apache.fayea.com/tomcat/tomcat-8/v8.5.14/bin/apache-tomcat-8.5.14.tar.gz
tar -zxvf apache-tomcat-8.5..tar.gz #下载加入lib文件以支持共享session
cd apache-tomcat-8.5./lib
wget http://central.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/2.1.1/memcached-session-manager-2.1.1.jar
wget http://central.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc8/2.1.1/memcached-session-manager-tc8-2.1.1.jar
wget http://central.maven.org/maven2/net/spy/spymemcached/2.11.1/spymemcached-2.11.1.jar
wget http://central.maven.org/maven2/de/javakaffee/msm/msm-javolution-serializer/2.1.1/msm-javolution-serializer-2.1.1.jar
wget http://central.maven.org/maven2/javolution/javolution/5.4.5/javolution-5.4.5.jar
cd .. && cd .. #禁止TLDs扫描新加入的jar包
sed -i '134c xom-*.jar,javolution-5.4.5.jar,memcached-session-manager-2.1.1.jar,memcached-session-manager-tc8-2.1.1.jar,msm-javolution-serializer-2.1.1.jar,spymemcached-2.11.1.jar' apache-tomcat-8.5./conf/catalina.properties
#tomcat的优化配置,在102行处插入内容
sed -i '102c export JAVA_OPTS="-server -Xms1000M -Xmx1000M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=15 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true"' apache-tomcat-8.5./bin/catalina.sh rm -rf apache-tomcat-8.5./webapps
mkdir -vp apache-tomcat-8.5./webapps/ROOT
cp -r apache-tomcat-8.5. /usr/local/tomcat
mv apache-tomcat-8.5. /usr/local/tomcat2
chown ubuntu.ubuntu -R /usr/local/tomcat
chown ubuntu.ubuntu -R /usr/local/tomcat2
rm apache-tomcat-8.5..tar.gz #创建测试网页
touch /usr/local/tomcat/webapps/ROOT/index.jsp
echo '<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><html><head><title>Tomcat1</title></head><body><%=session.getId()%></body></html>' >/usr/local/tomcat/webapps/ROOT/index.jsp
touch /usr/local/tomcat2/webapps/ROOT/index.jsp
echo '<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><html><head><title>Tomcat2</title></head><body><%=session.getId()%></body></html>' >/usr/local/tomcat2/webapps/ROOT/index.jsp #配置共享session
#由于我们静态文件交由nginx处理,所以无需配置requestUriIgnorePattern
#同时我们配置使用了Javolution序列化框架
vim /usr/local/tomcat/conf/context.xml
#在<Context>标签内加入下面的内容
##################################################
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:11211,n2:127.0.0.1:11311"
failoverNodes="n1"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
/>
################################################## #同样的tomcat2也需要加入内容,唯一不同是failoverNodes改为n2
vim /usr/local/tomcat2/conf/context.xml
##################################################
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:11211,n2:127.0.0.1:11311"
failoverNodes="n2"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
/>
################################################## #修改端口配置,修改下面的内容
vim /usr/local/tomcat/conf/server.xml
##################################################
#由于我们的tomcat是运行在一台服务器上,所以需要在Engine节点分别添加jvmRoute="tomcat"和jvmRoute="tomcat2"
#依旧是优化过的配置,并且没有开启gzip,因为nginx已经开启了
<Connector port="" protocol="org.apache.coyote.http11.Http11AprProtocol" URIEncoding="UTF-8"
maxHttpHeaderSize="" maxThreads=""
minSpareThreads="" maxSpareThreads=""
minProcessors="" maxProcessors=""
connectionTimeout="" acceptCount=""
enableLookups="false" disableUploadTimeout="true" redirectPort="" />
........
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat">
################################################## #同样修改tomcat2端口配置
vim /usr/local/tomcat2/conf/server.xml
##################################################
<Connector port="" protocol="org.apache.coyote.http11.Http11AprProtocol" URIEncoding="UTF-8"
maxHttpHeaderSize="" maxThreads=""
minSpareThreads="" maxSpareThreads=""
minProcessors="" maxProcessors=""
connectionTimeout="" acceptCount=""
enableLookups="false" disableUploadTimeout="true" redirectPort="" />
........
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
##################################################
#同时将Tomcat2的配置文件中所有的8080端口改为8180,8005改为8105,8009改为8109,由于是和nginx交互所以不用配置SSL #配置下面的内容来优化tomcat
#安装配置apr
wget http://mirror.bit.edu.cn/apache//apr/apr-1.5.2.tar.gz
tar -zxvf apr-1.5..tar.gz
cd apr-1.5. && ./configure --prefix=/usr/local/apr
make && make install
cd .. && rm -rf apr-1.5. && rm apr-1.5..tar.gz #安装配置apr-util
wget http://mirror.bit.edu.cn/apache//apr/apr-util-1.5.4.tar.gz
tar -zxvf apr-util-1.5..tar.gz
cd apr-util-1.5. && ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install
cd .. && rm -rf apr-util-1.5. && rm apr-util-1.5..tar.gz #安装配置tomcat-native
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-connectors/native/1.2.12/source/tomcat-native-1.2.12-src.tar.gz
tar -zxvf tomcat-native-1.2.-src.tar.gz
cd tomcat-native-1.2.-src/native && ./configure --with-apr=/usr/local/apr
make && make install
cd .. && cd .. && rm -rf tomcat-native-1.2.-src && rm tomcat-native-1.2.-src.tar.gz #配置tomcat-native环境变量
sed -i '$a export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib' /etc/profile
source /etc/profile #最后安装配置Nginx
wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar -zxvf nginx-1.12..tar.gz
cd nginx-1.12. && ./configure --user=ubuntu --group=ubuntu --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module
make && make install
chown ubuntu.ubuntu -R /usr/local/nginx
cd .. && rm -rf nginx-1.12. && rm nginx-1.12..tar.gz #首先将ssl证书放入/usr/local/nginx/conf/目录下,分别为cert.crt和cert.key文件,如果不配置SSL则跳过
vim /usr/local/nginx/conf/nginx.conf
#设置nginx.conf,已经做了配置优化,如果不需要SSL则更改相应配置即可
##################################################
user ubuntu ubuntu;
worker_processes auto;
worker_rlimit_nofile ;
error_log logs/error.log warn;
pid logs/nginx.pid; events {
use epoll;
worker_connections ;
} http {
server_tokens off;
include mime.types;
default_type application/octet-stream;
charset utf-; 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;
tcp_nopush on;
reset_timedout_connection on;
keepalive_timeout ; open_file_cache max= inactive=20s;
open_file_cache_min_uses ;
open_file_cache_valid 30s; gzip on;
gzip_comp_level ;
gzip_min_length ;
gzip_proxied any;
gzip_vary on;
gzip_http_version 1.0;
gzip_buffers 16k;
gzip_types
text/plain text/css text/xml application/xml text/x-json application/json
image/svg+xml image/png image/jpeg image/x-icon image/gif
text/javascript application/javascript application/x-javascript
application/x-font-truetype application/x-font-woff application/vnd.ms-fontobject;
gzip_disable "MSIE [1-6]\."; proxy_redirect off;
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 ;
proxy_send_timeout ;
proxy_read_timeout ;
proxy_buffer_size 32k;
proxy_buffers 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k; upstream tomcat_server {
server localhost: weight=;
server localhost: weight=;
} server {
listen ;
server_name localhost;
return https://$host$request_uri;
} server {
listen ssl;
server_name localhost;
ssl_certificate cert.crt;
ssl_certificate_key cert.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /usr/local/tomcat/webapps/ROOT;
index index.html index.jsp index.htm;
expires 30d;
}
location ~ \.(jsp|servlet|do)$ {
index index.html index.jsp index.htm;
proxy_pass http://tomcat_server;
}
error_page /error.html;
}
}
##################################################
#建议检查gzip类型中是否不存在你需要用的类型
#如果你的tomcat中配置了多个项目,只需要在nginx.conf中加入下面内容即可
location /你的项目名 {
root /usr/local/tomcat/webapps;
index index.html index.jsp index.htm;
expires 30d;
}
##################################################
#保存后,输入下面的命令来检查配置
/usr/local/nginx/sbin/nginx -t
#重启nginx命令:sudo /usr/local/nginx/sbin/nginx -s reload #切换至普通用户
su ubuntu #启动memcached,同时可以使用ps -ef | grep memcached查看已经开启的
/usr/local/memcached/bin/memcached -d -m 64M -u ubuntu -l 127.0.0.1 -p -c -P /tmp/memcached-n1.pid
/usr/local/memcached/bin/memcached -d -m 64M -u ubuntu -l 127.0.0.1 -p -c -P /tmp/memcached-n2.pid #启动Tomcat,务必使用普通用户运行Tomcat
/usr/local/tomcat/bin/startup.sh && /usr/local/tomcat2/bin/startup.sh #启动nginx,务必使用管理员权限运行nginx
sudo /usr/local/nginx/sbin/nginx #到这里以及能够成功访问了!多刷新几次就会发现服务器1和2是随机访问到的,并且session是相同的

从零开始搭建高性能高可用Tomcat服务器的更多相关文章

  1. 搭建 MySQL 高可用高性能集群

    什么是MySQL集群,什么是MySQL集群,如果你想知道什么是MySQL集群,我现在就带你研究. MySQL 是一款流行的轻量级数据库,很多应用都是使用它作为数据存储.作为小型应用的数据库,它完全可以 ...

  2. EFK教程 - ElasticSearch高性能高可用架构

    通过将elasticsearch的data.ingest.master角色进行分离,搭建起高性能+高可用的ES架构 作者:"发颠的小狼",欢迎转载与投稿 目录 ▪ 用途 ▪ 架构 ...

  3. CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

    一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1.26 keepalive ...

  4. 转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

    源地址:http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html 一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台: ...

  5. RHEL 5.4下部署LVS(DR)+keepalived实现高性能高可用负载均衡

    原文地址:http://www.cnblogs.com/mchina/archive/2012/05/23/2514728.html 一.简介 LVS是Linux Virtual Server的简写, ...

  6. CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡【转】

    CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡   一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2 ...

  7. Haproxy+Keepalived搭建Weblogic高可用负载均衡集群

    配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G  系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...

  8. SpringCloud学习系列之一 ----- 搭建一个高可用的注册中心(Eureka)

    前言 本篇主要介绍的是SpringCloud相关知识.微服务架构以及搭建一个高可用的服务注册与发现的服务模块(Eureka). SpringCloud介绍 Spring Cloud是在Spring B ...

  9. CentOS 6.3下部署LVS(NAT模式)+keepalived实现高性能高可用负载均衡

    一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1.26 keepalive ...

随机推荐

  1. 安装PHP 类库PEAR

    PHP扩展与应用库常识 当php项目里没有pear时: 单独安装解决方案 下载下面连接的文件至go-pear.phar.http://pear.php.net/go-pear.phar该文件最好放到P ...

  2. MT【288】必要性探路

    已知$f(x)=e^x-\dfrac{1}{2}ax^2-b$(1)当$a=1,b=1$时,求$f(x)$在$[-1,1]$上的值域.(2)若对于任意实数$x$,$f(x)\ge0$恒成立,求$a+b ...

  3. UOJ #207. 共价大爷游长沙(LCT + 异或哈希)

    题目 维护一颗动态树,并维护一个点对集合 \(S\) . 动态查询一条边,是否被集合中所有点对构成的路径包含. \(n \le 100000, m \le 300000\) 题解 orz 前辈 毛爷爷 ...

  4. Leetcode 27.移除元素 By Python

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  5. WebService学习总结(一)——WebService的相关概念

    一.序言 大家或多或少都听过 WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成 分.但是不得不承认的是W ...

  6. [THUWC2017]在美妙的数学王国中畅游

    [THUWC2017]在美妙的数学王国中畅游 e和sin信息不能直接合并 泰勒展开,大于21次太小,认为是0,保留前21次多项式即可 然后就把e,sin ,kx+b都变成多项式了,pushup合并 上 ...

  7. A1030. Travel Plan

    A traveler's map gives the distances between cities along the highways, together with the cost of ea ...

  8. A1021. Deepest Root

    A graph which is connected and acyclic can be considered a tree. The height of the tree depends on t ...

  9. 斯坦福大学公开课机器学习: machine learning system design | prioritizing what to work on : spam classification example(设计复杂机器学习系统的主要问题及构建复杂的机器学习系统的建议)

    当我们在进行机器学习时着重要考虑什么问题.以垃圾邮件分类为例子.假如你想建立一个垃圾邮件分类器,看这些垃圾邮件与非垃圾邮件的例子.左边这封邮件想向你推销东西.注意这封垃圾邮件有意的拼错一些单词,就像M ...

  10. hdu 3530 "Subsequence" (单调队列)

    传送门 题意: 给出一个序列,求最长的连续子序列,使得 m ≤ Max-Min ≤ k 我的理解: 定义数组 a[] 存储输入的 n 个数: 定义两个双端队列: deque<int >qM ...