tomcat2 memarche

會話集群復制

?會話管理器:Session manager

Tomcat Session Replication Cluster:
(1) 配置啟用集群,將下列配置放置于<engine>或<host>中;

如何配置會話集群(在負載均衡實驗的基礎上做的)

在第一臺tomcat主機上

vim /etc/tomcat/server.xml ? (tomcat服務器下的配置文件)

將下面的內容放到一個host主機設定的內部。(這種設置只符合后臺有三五臺tomcat,過多的后臺服務器不合適使用此方法,會造成對帶寬資源的消耗,速度慢)

<Cluster className=”org.apache.catalina.ha.tcp.SimpleTcpCluster”
channelSendOptions=”8″>

<Manager className=”org.apache.catalina.ha.session.DeltaManager”
expireSessionsOnShutdown=”false”
notifyListenersOnReplication=”true”/>

<Channel className=”org.apache.catalina.tribes.group.GroupChannel”>
<Membership className=”org.apache.catalina.tribes.membership.McastService”
address=”228.0.0.119″
port=”45564″
frequency=”500″
dropTime=”3000″/>
<Receiver className=”org.apache.catalina.tribes.transport.nio.NioReceiver”
address=”192.168.60.21″ ? (輸入各自主機的地址)
port=”4000″
autoBind=”100″
selectorTimeout=”5000″
maxThreads=”6″/>

<Sender className=”org.apache.catalina.tribes.transport.ReplicationTransmitter”>
<Transport className=”org.apache.catalina.tribes.transport.nio.PooledParallelSender”/>
</Sender>
<Interceptor className=”org.apache.catalina.tribes.group.interceptors.TcpFailureDetector”/>
<Interceptor className=”org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor”/>
</Channel>

<Valve className=”org.apache.catalina.ha.tcp.ReplicationValve”
filter=””/>
<Valve className=”org.apache.catalina.ha.session.JvmRouteBinderValve”/>

<Deployer className=”org.apache.catalina.ha.deploy.FarmWarDeployer”
tempDir=”/tmp/war-temp/”
deployDir=”/tmp/war-deploy/”
watchDir=”/tmp/war-listen/”
watchEnabled=”false”/>

<ClusterListener className=”org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener”/>
<ClusterListener className=”org.apache.catalina.ha.session.ClusterSessionListener”/>
</Cluster>

還需要添加此行的內容:

<Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”TcB”>

cd?/data/test/ROOT/進入自定義的主頁路徑下(或者系統默認的主頁面下);

mkdir WEB-INF (創建此文件夾)

cp /etc/tomcat/web.xml WEB-INF/ ? (復制系統的模板文件到剛才創建的文件夾下面)

vim WEB-INF/web.xml? (系統默認有的給刪除重新復制一份到這里來)

QQ截圖20180718211638

 

在tomcat2上做上面相同的操作就可以了

在瀏覽器上訪問:就可以實現會話綁定了。http://192.168.60.4 (此IP為調度器的IP地址)

 

?Memcached(服務端緩存)

在Web服務開發中,服務端緩存是服務實現中所常常采用的一種提高服務性能的方法。其通過記錄某部分計算結果來嘗試避免再次執行得到該結果所需要的復雜計算,從而提高了服務的運行效率。
除了能夠提高服務的運行效率之外,服務端緩存還常常用來提高服務的擴展性。因此一些大規模的Web應用,如Facebook,常常構建一個龐大的服務端緩存。而它們所最常使用的就是Memcached。

緩存的系統分為兩類:

遞歸式:客戶端發起請求到緩存服務器,如果命中,緩存服務器則返回數據,沒命中則代替客戶端向后端服務器去查詢數據,然后將數據傳送到客戶端。

旁掛式:客戶端發起請求到緩存服務器,如果命中,緩存服務器則返回數據,沒命中則返回告訴客戶端自己這里沒有數據,然后客戶端在去自行向后端服務器去索取數據信息,客戶端還要決定此數據是否需要緩存到緩存服務器上去。

memcache的作用和工作原理:

memcache和提供web服務的程序配合使用,每臺memcache之間是相互不通信的,且每臺memcache上緩存的web服務都是相同的,當客戶端通過調度器來訪問一個web服務時memcache會將兩者之間的會話記錄緩存下來,如果后臺提供web服務的一臺服務器宕機了,調度器將會話調度到另一臺web服務器上,此時memcache里的緩存數據會記錄你以前的會話數據,即使調度到另一臺web服務器上時,也會有以前的會話數據。

memcache的緩存大小設定好的,一旦數據到達其設定的值時,會將最老的數據覆蓋掉,以此循環類推。

 

 

可流式化的數據:

Memcached的特征:

1 .協議簡單:

2 . 基于libevent的事件處理:

3 . 內置內存的處理方式:(數據存儲在內存當中,不支持存到磁盤上,重啟memcached數據就會丟失)

4 . memcached不互相通信的分布式集群:(分布式:各個服務器之間的數據各不相同的)

且不互相通信,通過和數組取模的算法,去到指定的memcached服務器上去去數據,如果沒有,也不會去其他節點上的memcached服務器上去取,而是直接到后臺realserver上去取數據。

 

memcached對緩存項的管理:

memcached對自己內存的管理:如果分給memcached4G的存儲空間,他會把空間分為一個個的小的數據塊,比如50K大小的空間塊10個,60k大小的空間塊20個等,如果有一個數據是55k大小,他將直接被存入到60K大小的空間塊里去。其中有5K大小的空間就浪費了。沒有辦法只能這樣,以防止數據的碎片化。

到最后可能會發現,4G的空間存放真實數據大小只有3.5G的大小而已。

如果要減少空間的浪費,將步進數調小,如50k到55K再到60K ,但與此同時CPU要管理的緩存項就會增加,加大CPU的資源消耗。所以要綜合考慮來處理。

Memcached使用了一種叫Slab的結構。在該分配算法中,內存將按照1MB的大小劃分為頁,而該頁內存則會繼續被分割為一系列具有相同大小的內存塊:QQ截圖20180719112857

分配好的塊大小,就已經固定了,不可以再重新分配了,只能重復利用。塊里所緩存的內容不會被memcached去清除掉,即使數據已經過期了了,如果數據的時間自己定義的過期時常,到了的話,memcached會將其標記為可使用的空間,不會清除數據,只會將新的數據覆蓋掉舊的數據。

 

yum install memcached ? (安裝memcached)

主程序:/usr/bin/memcached

memcached沒有配置文件,僅靠命令行選項來定制就夠了。

memcached -h? (查看選項)

memcached程序的常用選項:
-m <num>:Use <num> MB memory max to use for object storage; the default is 64 megabytes.
-c <num>:Use <num> max simultaneous connections; the default is 1024.
-u <username>:以指定的用戶身份來運行進程;
-l <ip_addr>:監聽的IP地址,默認為本機所有地址;
-p <num>:監聽的TCP端口, the default is port 11211.
-U <num>:Listen on UDP port <num>, the default is port 11211, 0 is off.
-M:內存耗盡時,不執行LRU清理緩存,而是拒絕存入新的緩存項,直到有多余的空間可用時為止;
-f <factor>:增長因子;默認是1.25;
-t <threads>:啟動的用于響應用戶請求的線程數;(線程數<=CPU的核數)

-f 設定塊增長的步進的大小。默認是1.25倍來增長的,可以自己設定

端口號:11211

/etc/sysconfig/memcached(將選項及對應要設定的值放在此配置文件中即可)

PORT=”11211″
USER=”memcached”
MAXCONN=”1024″
CACHESIZE=”128″
OPTIONS=”-f 1.2″(添加的步進選項)

systemctl start memcache ? (啟動服務)

ss -nult (查看端口號)

11211.既監聽在tcp協議上又監聽在udp協議上。

telnet 127.0.0.1 11211? (進入到本機的memcached緩存中去)

進入之后輸入:stats ? (顯示memcached的緩存內容)

命令:
統計類:stats, stats items, stats slabs, stats sizes
存儲類:set, add, replace, append, prepend

檢索類:get, delete, incr/decr
清空:flush_all

memcached默認沒有認證機制,可借用于SASL進行認證;
SASL:Simple Authentication Secure Layer

API:
php-pecl-memcache
php-pecl-memcached
python-memcached
libmemcached
libmemcached-devel

 

實驗:使用memcached將tomcat會話緩存到memcached緩存里去。

結構原理圖:

新建位圖圖像 (2)

memcached-session-manager項目地址,

http://code.google.com/p/memcached-session-manager/,

https://github.com/magro/memcached-session-manager

1 . 在tomcat1上:

yum install tomcat tomcat-admin-webapps -y

yum install java-1.8.0-openjdk-devel

cd? /usr/share/tomcat/webapps/

mkdir ROOT ? (創建文件夾來存放tomcat的主頁面)

cd ROOT

vim index.jsp ? (創建測試界面)

<%@ page language=”java” %>
<html>
<head><title>TomcatB</title></head>
<body>
<h1><font color=”green”>TomcatA.magedu.com</font></h1>
<table align=”centre” border=”1″>
<tr>
<td>Session ID</td>
<% session.setAttribute(“magedu.com”,”magedu.com”); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>

systemctl start tomcat ? (啟動服務)

ss -nul ? (查看端口號是否打開)

在tomcat2上如tomcat1的操作重復一遍。

2 .在nginx調度器上的配置

yum install nginx

yum install nginx (安裝服務包)
vim /etc/nginx/nginx.conf
upstream www {
server 192.168.60.20:8080;
server 192.168.60.21:8080;
} (添加后端tomcat服務器的IP地址)
vim /etc/nginx/conf.d/test.conf? (創建新的配置文件)
server {
listen 80 default_server;
server_name www.aa.com;
root /usr/share/nginx/html;
location / {
proxy_pass http://www;
}
} (這里沒有指定調度算法。默認的是輪詢的調度算法)重新加載服務
nginx -s reload (重新加載配置文件)
nginx 開啟服務

下載如下jar文件至各tomcat節點的tomcat安裝目錄下的lib目錄中/usr/share/tomcat/lib/

此文件在 \PUB\Sources\7.x86_64/msm/下不包含old文件夾的都下載下來。

在tomcat1和tomcat2 上安裝yum install memcached (服務)

systemctl start memcached? (啟動服務)

ss -nult? (查看端口號是否開啟了)

然后:

vim /etc/tomcat/server.xml ? (兩個tomcat節點都做如下操作)

在定義的host主機下添加如下內容:

<Context path=”/” docBase=”ROOT” reloadable=””/> <Manager className=”de.javakaffee.web.msm.MemcachedBackupSessionManager”
memcachedNodes=“n1:192.168.60.21:11211,n2:192.168.60.22:11211” (兩個memcached節點的地址)
failoverNodes=”n1″ (故障轉移節點;n2節點宕機后轉移到n1節點上)
requestUriIgnorePattern=”.*\.(ico|png|gif|jpg|css|js)$” (忽略要緩存的數據類型;圖片類的)
transcoderFactoryClass=”de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory”
/> (使用的轉碼)
</Context>

QQ截圖20180719165423

systemctl restart tomcat? (重新啟動tomcat服務)

tail /var/log/tomcat/catalina.2018-07-19.log? (如果服務起不來可以查看日志來排錯)

 

 

Tomcat的常用優化配置
(1) 內存空間:
/etc/sysconfig/tomcat, /etc/tomcat/tomcat.conf, /usr/local/tomcat/bin/catalina.sh
JAVA_OPTS=”-server -Xms32g -Xmx32g -XX:NewSize= -XX:MaxNewSize= -XX:PermSize= -XX:MaxPermSize=”
-server:服務器模型
-Xms:堆內存初始化大??;
-Xmx:堆內存空間上限;
-XX:NewSize=:新生代空間初始化大??;
-XX:MaxNewSize=:新生代空間最大值;
-XX:PermSize=:持久代空間初始化大??;
-XX:MaxPermSize=:持久代空間最大值;

(2) 線程池設置:
<Connector port=”8080″ protocol=”HTTP/1.1″ connectionTimeout=”20000″ redirectPort=”8443″ />

常用屬性:
maxThreads:最大線程數;最大并發連接數;
minSpareThreads:最小空閑線程數;
maxSpareThreads:最大空閑線程數;
acceptCount:等待隊列的最大長度;
URIEncoding:URI地址編碼格式,建議使用UTF-8;
enableLookups:是否啟用dns解析,建議禁用;
compression:是否啟用傳輸壓縮機制,建議“on”;
compressionMinSize:啟用壓縮傳輸的數據流最小值,單位是字節;
compressableMimeType:定義啟用壓縮功能的MIME類型;
text/html, text/xml, text/css, text/javascript

(3) 禁用8005端口;
<Server port=”-1″ shutdown=”SHUTDOWN”>

(4) 隱藏版本信息:
<Connector port=”8080″ protocol=”HTTP/1.1″ connectionTimeout=”20000″ redirectPort=”8443″ />

Server=”SOME STRING”

 

 

 

 

 

 

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/103153

(0)
無所謂無所謂
上一篇 2018-07-18
下一篇 2018-07-19

相關推薦

欧美性久久久久