從零開始搭建高效能高可用Tomcat伺服器,高效能tomcat

來源:互聯網
上載者:User

從零開始搭建高效能高可用Tomcat伺服器,高效能tomcat

目標:

  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#重啟(建議)rebootsudo su#安裝配置JDK,:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htmltar -zxvf jdk-8u131-linux-x64.tar.gzmv jdk1.8.0_131 /usr/local/jdk#配置JDK環境變數sed -i '$a ulimit -n 65535' /etc/profilesed -i '$a export JAVA_HOME=/usr/local/jdk' /etc/profilesed -i '$a export JRE_HOME=$JAVA_HOME/jre' /etc/profilesed -i '$a export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH' /etc/profilesed -i '$a export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH' /etc/profilesource /etc/profilerm jdk-8u131-linux-x64.tar.gz#安裝配置memcachedwget http://www.memcached.org/files/memcached-1.4.36.tar.gztar -zxvf memcached-1.4.36.tar.gzcd memcached-1.4.36./configure --prefix=/usr/local/memcachedmake && make installcd .. && rm -rf memcached-1.4.36 && rm memcached-1.4.36.tar.gz#安裝配置Tomcatwget http://apache.fayea.com/tomcat/tomcat-8/v8.5.14/bin/apache-tomcat-8.5.14.tar.gztar -zxvf apache-tomcat-8.5.14.tar.gz#下載加入lib檔案以支援共用sessioncd apache-tomcat-8.5.14/libwget http://central.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/2.1.1/memcached-session-manager-2.1.1.jarwget http://central.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc8/2.1.1/memcached-session-manager-tc8-2.1.1.jarwget http://central.maven.org/maven2/net/spy/spymemcached/2.11.1/spymemcached-2.11.1.jarwget http://central.maven.org/maven2/de/javakaffee/msm/msm-javolution-serializer/2.1.1/msm-javolution-serializer-2.1.1.jarwget http://central.maven.org/maven2/javolution/javolution/5.4.5/javolution-5.4.5.jarcd .. && 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.14/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.14/bin/catalina.shrm -rf apache-tomcat-8.5.14/webappsmkdir -vp apache-tomcat-8.5.14/webapps/ROOTcp -r apache-tomcat-8.5.14 /usr/local/tomcatmv apache-tomcat-8.5.14 /usr/local/tomcat2chown ubuntu.ubuntu -R /usr/local/tomcatchown ubuntu.ubuntu -R /usr/local/tomcat2rm apache-tomcat-8.5.14.tar.gz#建立測試網頁touch /usr/local/tomcat/webapps/ROOT/index.jspecho '<%@ 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.jsptouch /usr/local/tomcat2/webapps/ROOT/index.jspecho '<%@ 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改為n2vim /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="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" URIEncoding="UTF-8"               maxHttpHeaderSize="8192" maxThreads="1000"               minSpareThreads="100" maxSpareThreads="1000"               minProcessors="100" maxProcessors="1000"               connectionTimeout="25000" acceptCount="1000"               enableLookups="false" disableUploadTimeout="true" redirectPort="8443" />    ........    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat">###################################################同樣修改tomcat2連接埠配置vim /usr/local/tomcat2/conf/server.xml##################################################    <Connector port="8180" protocol="org.apache.coyote.http11.Http11AprProtocol" URIEncoding="UTF-8"               maxHttpHeaderSize="8192" maxThreads="1000"               minSpareThreads="100" maxSpareThreads="1000"               minProcessors="100" maxProcessors="1000"               connectionTimeout="25000" acceptCount="1000"               enableLookups="false" disableUploadTimeout="true" redirectPort="8443" />    ........    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">###################################################同時將Tomcat2的設定檔中所有的8080連接埠改為8180,8005改為8105,8009改為8109,由於是和nginx互動所以不用配置SSL#配置下面的內容來最佳化tomcat#安裝配置aprwget http://mirror.bit.edu.cn/apache//apr/apr-1.5.2.tar.gztar -zxvf apr-1.5.2.tar.gzcd apr-1.5.2 && ./configure --prefix=/usr/local/aprmake && make installcd .. && rm -rf apr-1.5.2 && rm apr-1.5.2.tar.gz#安裝配置apr-utilwget http://mirror.bit.edu.cn/apache//apr/apr-util-1.5.4.tar.gztar -zxvf apr-util-1.5.4.tar.gzcd apr-util-1.5.4 && ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/aprmake && make installcd .. && rm -rf apr-util-1.5.4 && rm apr-util-1.5.4.tar.gz#安裝配置tomcat-nativewget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-connectors/native/1.2.12/source/tomcat-native-1.2.12-src.tar.gztar -zxvf tomcat-native-1.2.12-src.tar.gzcd tomcat-native-1.2.12-src/native && ./configure --with-apr=/usr/local/aprmake && make installcd .. && cd .. && rm -rf tomcat-native-1.2.12-src && rm tomcat-native-1.2.12-src.tar.gz#配置tomcat-native環境變數sed -i '$a export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib' /etc/profilesource /etc/profile#最後安裝配置Nginxwget http://nginx.org/download/nginx-1.12.0.tar.gztar -zxvf nginx-1.12.0.tar.gzcd nginx-1.12.0 && ./configure --user=ubuntu --group=ubuntu --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_modulemake && make installchown ubuntu.ubuntu -R /usr/local/nginxcd .. && rm -rf nginx-1.12.0 && rm nginx-1.12.0.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 65535;error_log logs/error.log warn;pid logs/nginx.pid;events {    use epoll;    worker_connections 65500;}http {    server_tokens off;    include mime.types;    default_type application/octet-stream;    charset utf-8;    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 30;    open_file_cache max=65535 inactive=20s;    open_file_cache_min_uses 1;    open_file_cache_valid 30s;    gzip on;    gzip_comp_level 5;    gzip_min_length 256;    gzip_proxied any;    gzip_vary on;    gzip_http_version 1.0;    gzip_buffers 4 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 90;    proxy_send_timeout 90;    proxy_read_timeout 90;    proxy_buffer_size 32k;    proxy_buffers 4 32k;    proxy_busy_buffers_size 64k;    proxy_temp_file_write_size 64k;    upstream tomcat_server {        server localhost:8080 weight=1;        server localhost:8180 weight=1;    }    server {        listen 80;        server_name localhost;        return 301 https://$host$request_uri;    }    server {        listen 443 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 400 404 414 500 502 503 504 /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 11211 -c 32750 -P /tmp/memcached-n1.pid/usr/local/memcached/bin/memcached -d -m 64M -u ubuntu -l 127.0.0.1 -p 11311 -c 32750 -P /tmp/memcached-n2.pid#啟動Tomcat,務必使用普通使用者運行Tomcat/usr/local/tomcat/bin/startup.sh && /usr/local/tomcat2/bin/startup.sh#啟動nginx,務必使用管理員權限運行nginxsudo /usr/local/nginx/sbin/nginx#到這裡以及能夠成功訪問了!多重新整理幾次就會探索服務器1和2是隨機訪問到的,並且session是相同的

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.