目錄
安裝tomcat
tomcat目錄結構及配置文件構成以及主配置文件server.xml ,tomcat中的組件
實現反代tomcat的方法
nginx+tomcat cluster
http(mod_porxy_http)+tomcat cluster
http(mod_porxy_ajp)+tomcat cluster
http(mod_jk)+tomcat cluster
實現tomcat會話保持
session sticky
session cluster
session server
相遇tomcat (?? . ??)
tomcat的核心組件
頂級類組件:Server
服務類組件:Service
連接器組件:Connector
容器類組件,即可部署webapp的程序:Engine, Host, Context
被嵌套類組件:valve, logger, realm,
安裝tomcat
# rpm -ivh jdk-7u79-linux-x64.rpm # vim /etc/profile.d/java.sh export JAVA_HOME=/usr/java/latest export PASH=$JAVA_HOME/bin:$PASH # . /etc/profile.d/java.sh????????????????????????????????????? 重讀 # java –version???????????????????????????????????? 顯示版本 java version "1.7.0_79" Java(TM) SE Runtime Environment (build 1.7.0_79-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode) # tar xf apache-tomcat-8.5.23.tar.gz -C /usr/local # cd /usr/local # ls apache-tomcat-8.5.23? etc??? include? lib64??? sbin?? src bin?????????????????? games? lib????? libexec? share # ln -sv apache-tomcat-8.5.23 tomcat `tomcat' -> `apache-tomcat-8.5.23' # ll total 44 drwxr-xr-x. 9 root root 4096 Nov 13 09:38 apache-tomcat-8.5.23 drwxr-xr-x. 2 root root 4096 Sep 23? 2011 bin drwxr-xr-x. 2 root root 4096 Sep 23? 2011 etc drwxr-xr-x. 2 root root 4096 Sep 23? 2011 games drwxr-xr-x. 2 root root 4096 Sep 23? 2011 include drwxr-xr-x. 2 root root 4096 Sep 23? 2011 lib drwxr-xr-x. 2 root root 4096 Sep 23? 2011 lib64 drwxr-xr-x. 2 root root 4096 Sep 23? 2011 libexec drwxr-xr-x. 2 root root 4096 Sep 23? 2011 sbin drwxr-xr-x. 5 root root 4096 Nov 10 11:45 share drwxr-xr-x. 2 root root 4096 Sep 23? 2011 src lrwxrwxrwx. 1 root root?? 20 Nov 13 09:39 tomcat -> apache-tomcat-8.5.23 # cd tomcat/ # vim /etc/profile.d/tomcat.sh export CATALINA_HOME=/usr/local/tomcat export PATH=$CATALINA_HOME/bin:$PATH # . /etc/profile.d/tomcat.sh # version.sh Using CATALINA_BASE:?? /usr/local/tomcat Using CATALINA_HOME:?? /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME:????? ??/usr/java/latest Using CLASSPATH:?????? /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Server version: Apache Tomcat/8.5.23 Server built:?? Sep 28 2017 10:30:11 UTC Server number:? 8.5.23.0 OS Name:??????? Linux OS Version:??? ?2.6.32-642.el6.x86_64 Architecture:?? amd64 JVM Version:??? 1.7.0_79-b15 JVM Vendor:???? Oracle Corporation # catalina.sh version Using CATALINA_BASE:?? /usr/local/tomcat Using CATALINA_HOME:?? /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME:??????? /usr/java/latest Using CLASSPATH:?????? /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Server version: Apache Tomcat/8.5.23 Server built:?? Sep 28 2017 10:30:11 UTC Server number:? 8.5.23.0 OS Name:??????? Linux OS Version:???? 2.6.32-642.el6.x86_64 Architecture:?? amd64 JVM Version:??? 1.7.0_79-b15 JVM Vendor:???? Oracle Corporation # ss –tnl????????????????????? 查看8080端口是否被監聽 # catalina.sh start # ss –tnlp :::8080? ??:::*????? users:(("java",3225,45))
手動添加一個測試應用程序 # cd /usr/local/tomcat/webapps # mkdir myapp/{lib,classes,WEB-INF,META-INF} –pv # vim myapp/index.jsp <%@ page language="java" %> <%@ page import="java.util.*" %> <html> ???????? <head>
?????????????????? <title>JSP Test Page</title> ???????? </head> ???????? <body> ?????????????????? <% out.println("Hello,world"); %> ???????? </body> </html>
tomcat自帶的應用程序訪問
當遇到如下問題時,可采用以下方法嘗試解決
新安裝的tomcat,用其他機器訪問tomcat的Server Status、Manager App、Host Manager三個頁面均顯示403(本機訪問沒有問題),conf/tomcat-users.xml里已添加配置:
<role rolename=”manager-gui”/>
<role rolename=”admin-gui”/>
<user username=”tomcat” password=”qazwsx” roles=”manager-gui,admin-gui”/>
重啟之后,還是403
查找網上解決辦法無果,大部分網上的文章都只提到了在tomcat-users.xml里添加上面的語句,無法解決,通過查閱官方文檔,終于找到問題所在,打開webapps下的host-manager和manager,都有一個共同的文件夾META-INF,里面都有context.xml,這個文件的內容是:
<Context antiResourceLocking=”false” privileged=”true” >
<Valve className=”org.apache.catalina.valves.RemoteAddrValve”
allow=”127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1″ />
<Manager sessionAttributeValueClassNameFilter=”java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap”/>
</Context>
這段代碼的作用是限制來訪IP的,127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1,是正則表達式,表示IPv4和IPv6的本機環回地址,所以這也解釋了,為什么我們本機可以訪問管理界面,但是其他機器確是403。
找到原因了,那么修改一下這里的正則表達式即可,比如我們只允許內網網段192.168.訪問管理頁面,那么改成這樣就可以:
<Context antiResourceLocking=”false” privileged=”true” >
<Valve className=”org.apache.catalina.valves.RemoteAddrValve”
allow=”192.168.*.*” />
</Context>
修改完畢,重新打開tomcat,問題解決
相識tomcat?(>^ω^<)喵
tomcat的目錄結構
bin:腳本,及啟動時用到的類;
conf:配置文件目錄;主配置文件server.xml
lib:Java類庫;
logs:日志文件目錄;
temp:臨時文件目錄;
webapps:webapp的默認目錄;
work:工作目錄;存放編譯后的字節碼文件;
?tomcat的配置文件構成:
server.xml:主配置文件;
web.xml:每個webapp只有“部署”后才能被訪問,它的部署方式通常由web.xml進行定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認部署相關的配置;
context.xml:每個webapp都可以使用的配置文件,它通常由專用的配置文件context.xml來定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認 配置;
tomcat-users.xml:用戶認證的賬號和密碼文件;
catalina.policy:當使用-security選項啟動tomcat時,用于為tomcat設置安全策略;
catalina.properties:Java屬性的定義文件,用于設定類加載器路徑,以及一些與JVM調優相關參數;
logging.properties:日志系統相關的配置
JAVA WebAPP的組織結構:
有特定的組織形式,層次型的目錄結構:主要包含了servlet代碼文件,JSP頁面文件、類文件、部署描述符文件等。 ??? ? ? ? ? ? ? ? ? /: webapps的根目錄
index.jsp:webappde主頁;
WEB-INF/:當前webapp的私有資源路徑;通常用于存儲當前webapp自用的web.xml;
META-INF/:當前webapp的私有資源路徑;通常用于存儲當前webapp自用的context.xml配置文件;
classes/:類文件,webapp的私有類;
lib/:類文件,當前webapp的私有類,被打包為jar格式;
webapp歸檔格式:
.war:webapp 歸檔文件
.jar:EJB的類打包文件(類庫);
.rar:資源適配器類打包文件;
.ear:企業級應用程序;
部署webapp相關的操作
deploy:部署,將webapp的源文件放置于目標目錄(網頁程序文件存放目錄),配置tomcat服務器能夠基于web.xml和context.xml文件中定義的路徑來訪問此webapp;將其特有的類和依賴的類通過 class loader裝載至tomcat;
部署有兩種方式:
自動部署:auto deploy
手動部署:
冷部署:把webapp復制到指定的位置,而后才啟動tomcat;
熱部署:在不停止tomcat的前提下進行部署;部署工具:manager、ant腳本、tcd(tomcat client deployer)等;
undeploy:反部署,停止webapp,并從tomcat實例上拆除其部分文件和部署名;
start:啟動處于停止狀態的webapp;
stop:停止webapp,不再向用戶提供服務;其類依然在jvm上;
redeploy:重新部署;
Tomcat主配置文件結構:server.xml
? ? ? ? ? ? ? ? ? ? ? ? ? ? <Server> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<Service> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <connector/> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <connector/> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?… ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<Engine> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <Host> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <Context/> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<Context/> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? … ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </Host> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<Host> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? … ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </Host> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? … ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </Engine> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?</Service> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </Server>
主配置文件server.xml ,tomcat中的組件:
? ?【 Server 】:即一個tomcat實例;
? ?【 Service組件?】:用于實現將一個或多個connector組件關聯至一個engine組件;
? ?【 Context組件?】:
負責接收請求,常見的有三類http/https/ajp;
進入tomcat的請求可分為兩類:
(1) standalone : 請求來自于客戶端瀏覽器;
(2) 由其它的web server反代:來自前端的反代服務器;
nginx –> http connector –> tomcat
httpd(proxy_http_module) –> http connector –> tomcat
httpd(proxy_ajp_module) –> ajp connector –> tomcat
屬性:
port=”8080″
protocol=”HTTP/1.1″
connectionTimeout=”20000″
address:監聽的IP地址;默認為本機所有可用地址;
maxThreads:最大并發連接數,默認為200;
enableLookups:是否啟用DNS查詢功能;
acceptCount:等待隊列的最大長度;
? ?【 Engine組件?】:Servlet實例,即servlet引擎,其內部可以一個或多個host組件來定義站點; 通常需要通過defaultHost來定義默認的虛擬主機;
常用屬性:
name:engine組件的名稱,用于日志和錯誤信息記錄時區別不同的引擎
defaultHost=”localhost”
jvmRoute=
? ?【Host組件?】:位于engine內部用于接收請求并進行相應處理的主機或虛擬主機。
示例:
<Host name=”localhost” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”>
</Host>
常用屬性說明:
(1) appBase:此Host的webapps的默認存放目錄,指存放非歸檔的web應用程序的目錄或歸檔的WAR文件目錄路徑;
(2) autoDeploy:在Tomcat處于運行狀態時,將某webapp放置于appBase所定義的目錄中時,是否自動將其部署至tomcat;
示例:
<Host name=”tc1.magedu.com” appBase=”/appdata/webapps” unpackWARs=”true” autoDeploy=”true”>
</Host>
? ?【 Context組件?】:
示例:
<Context path=”/PATH” docBase=”/PATH/TO/SOMEDIR” reloadable=””/>
? ?【Valve組件?】:
<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”
prefix=”localhost_access_log” suffix=”.txt”
pattern=”%h %l %u %t "%r" %s %b” />
Valve存在多種類型:
定義訪問日志:org.apache.catalina.valves.AccessLogValve
定義訪問控制:org.apache.catalina.valves.RemoteAddrValve
<Valve className=”org.apache.catalina.valves.RemoteAddrValve” deny=”172\.16\.100\.67″/>
tomcat (? ??_??)?
1、nginx實現tomcat反代(LNMT)
反代服務器:nginx ? ? ? ? ? ? ? ? ? (node1)
tomcat1主機:192.168.1.26 ? ?(nod2)
tomcat2主機:192.168.1.31 ? ? (node3)
注意:三臺服務器的時間要同步
配置tomcat主機
【node2】
# yum install jdk-8u25-linux-x86.rpm # ls /usr/java # vim /etc/profile.d/java.sh export JAVA_HOME=/USR/JAVA/LATEST export PATH=$JAVA_HOME/bin:$PATH # . /etc/profile.d/java.sh # tar xf apach-tomcat-8.5.23.tar.gz # cd /usr/local # ln -sv apach-tomcat-8.5.23 tomcat # cd tomcat/ # vim /etc/profile.d/tomcat.sh export CATALINA_HOME=/usr/local/tomcat export PATH=$CATALINA_HOMR/bin:$PATH # . /etc/profile.d/tomcat.sh 重讀 # mkdir -pv /data/webapps/ROOT # cd /usr/local/tomcat/conf # vim server.xml default Host="node3.nene.com jvmRoute="TomcatA" <Host name="node2.nene.com" appBase="/data/webapps/" unpackWAPs="true" autoDeploy="true"> <Context path="" docBase="ROOT" reloadable="true"> <Valve className="org.apaen.catalina.valve.RemoteADDrValve"> </Context> </Host> # mkdir /data/logs # catalina.sh configtest 檢查語法錯誤 # mkdir -pv /data/webapps/ROOT{lib,classes,META-INF,WEB-INF} # vim /data/webapps/ROOT/index.jsp
<%@ page language=”java” %> <html> <head><title>TomcatA</title></head> <body> <h1><font color=”blue”>TomcatA.nene.com</font></h1> <table align=”centre” border=”1″> <tr> <td>Session ID</td> <% session.setAttribute(“nene.com”,”nene.com”); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html>
# catalina.sh start 測試:http://192.168.1.26:8080/ROOT # scp -rp /data node3:/data # scp server.xml node3:/usr/local/tomcat/conf 【node3】 # vim server.xml default Host="node3.nene.com jvmRoute="TomcatB" <Host name = node3.nene.com # vim /data/webapps/ROOT/index.jsp <%@ page language=”java” %> <html> <head><title>TomcatB</title></head> <body> <h1><font color=”blue”>TomcatB.nene.com</font></h1> <table align=”centre” border=”1″> <tr> <td>Session ID</td> <% session.setAttribute(“nene.com”,”nene.com”); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html> # canalina.sh start 測試:http://192.168.1.26:8080/ROOT
【node1】
# yum install nginx -y # cd /etc/nginx # vim nginx.conf 先備份再編輯 upstream tcsrvs { server node2:8080; server node3:8080; } server { location ~*\.(jsp|do)$ { proxy_pass http://tcsrvs; } } # nginx -t # systemctl start nginx.service http://192.168.1.35/index.jsp 測試看是否負載均衡至后端主機 會話綁定 【node1】 # vim nginx.conf upstream tcsrvs { ip_hash } # systemctl reload nginx.service http://192.168.1.35/index.jsp 測試看是否會話綁定至后端主機 2、實現httpd(proxy_http_module)+tomcat cluster架構 httpd服務器利用proxy_http_module模塊實現反代服務
利用上面的tomcat1和tomcat2服務器,里面的配置不用變
主要需要改反代服務器,停止nginx服務器,然后利用httpd實現反代服務
注意:要利用這種架構實現反代tomcat服務,要確保httpd服務器內已經加載了proxy_http_module模塊:使用命令:httpd -M查看
【node1】
# yum -y install httpd
# cd /etc/httpd
# vim conf/http.conf
# DocumentRoot “/var/www/html”
# vim conf.d/vhost.conf
<VirtualHost *:80> ServerName www.nene.com ProxyRequests Off ? ? ? ? ? ? ? ? ? ?關閉正向代理 ProxyVia On ProxyPreserveHost On ? ? ? ? ? ? ? ? ? ?是否把用戶請求使用的主機名發到后端 <Proxy *> ? ? ? ? ? ? ? ? ? ?proxy功能允許那些訪問 Require all granted </Proxy>
<proxy balancer://lbcluster1> BalancerMember http://192.168.1.26:8080 loadfactor=10 route=TomcatA BalancerMember http://192.168.1.31:8080 loadfactor=10 route=TomcatA ProxySet lbmethod=byrequests </Proxy>
ProxyPass / balancer://lbcluster1/ ProxyPassReverse / balancer://lbcluster1/ <Location /> Require all granted </Location> </VirtualHost>
# httpd -t # systemctl start httpd.service # ss -tnlp httpd :::80 http://192.168.1.35/index.jsp 查看是否負載均衡 實現會話綁定: # vim conf.d/vhost.conf <proxy ProxySet stickysession=ROUTEID # httpd -t # systemctl restart httpd.service http://192.168.1.35/index.jsp 查看是否會話綁定 如果上述方法無法實現,可以采取下面的方法 # vim conf.d/vhost.conf 在頂頭添加以下一行
Header add Set-Cookie “ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/” env=BALANCER_ROUTE_CHANGED
# httpd -t # systemctl restart httpd.service
3、實現httpd(proxy_ajp_module)+tomcat cluster架構
httpd服務器利用proxy_ajp_module模塊實現反代服務
利用上面的tomcat1和tomcat2服務器,里面的配置不用變
注意:要利用這種架構實現反代tomcat服務,要確保httpd服務器內已經加載了proxy_ajp_module模塊:可以使用命令:httpd -M查看
上一例中的所有配置不變,只需修改下面一項即可 # vim conf.d/vhosta.conf <proxy balancer://lbcluster1> BalancerMember http://192.168.1.26:8080 loadfactor=10 route=TomcatA BalancerMember http://192.168.1.31:8080 loadfactor=10 route=TomcatA ProxySet lbmethod=byrequests </Proxy>
4、實現mod_jk+tomcat cluster架構
tomcat?(>^ω^<)喵
session sticky
session cluster
session server
除了上面實現的會話保持以外,還有兩種可以實現會話保持的方法
1、會話管理:deltaManager(session cluster)
前端node1用的mod_proxy_http
【node2】
# vim server.xml
<host
<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.1.4"?? 多播地址 ??????????????????????? port="45564" ??????????????????????? frequency="500"??????? 沒多久發一次心跳(毫秒) ??????????????????????? dropTime="3000"/>????? 多久沒收到心跳將其踢出集群
??????????? <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"?? 如何接收心跳 ?? ???????????????????address="192.168.1.47(192.168.1.31)" ????????????????????? 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.ClusterSessionListener"/> ??????? </Cluster> # Catalina.sh configtest # cp web.xml /data/webapps/ROOT/WEB-INF/ # vim /data/webapps/ROOT/WEB-INF/web.xml ???????? <distributable> # scp /data/webapps/ROOT/WEB-INF/web.xml node3: /data/webapps/ROOT/WEB-INF/ 【node2&3】 # catalina.sh start # ss –tnl # tail /usr/local/tomcat/logs/catalina.out???????? 看有沒有對方的節點 訪問192.168.1.35看會話是否保持
2、memcache會話保持:memcache-session-manager (session server) 在Tomcat主機下載好MSM; memcache-session-manager-1.8.3.jar memcache-session-manager-tc8-1.8.3.jar msm-javolution-serializer-1.8.3.jar javolution-5.4.3.1 spymemcache-2.11.1.jar 下載地址:https://github.com/magro/memcached-session-manager/wiki/SetAndConfiguration
在Tomcat主機的server.xml中的context中添加以下代碼; <Context path="" docBase="ROOT" reloadable=”true”> <Manager className=”de.javakaffee.web.msm.MemcachedBackupSessionManager” memcachedNodes=”n2:192.168.1.26:11211,n3:192.168.1.31:11211″ failoverNodes=”n2″ 備用節點 requestUriIgnorePattern=”.*\.(ico|png|gif|jpg|css|js)$” 轉碼器 transcoderFactoryClass=”de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory” 序列化工具 /> </Context> 在memcache主機上yum安裝memcache; yum -y install memcache
原創文章,作者:nene,如若轉載,請注明出處:http://www.www58058.com/88456