1、搭建Tomcat集群,并通過(guò)nginx反向代理訪問(wèn)

測(cè)試環(huán)境:
Nginx: 172.16.100.151
Tomcat1:172.16.100.152:8080
Tomcat2:172.16.100.152:8081
Tomcat3:172.16.100.152:8082
安裝過(guò)程略過(guò),注意依賴環(huán)境即可
配置文件修改
對(duì)于tomcat:
修改tomcat安裝目錄下/conf/server.xml文件,修改tomcat的server port和監(jiān)聽(tīng)端口,保證3個(gè)tomcat互不沖突即可。


對(duì)于nginx:
修改nginx配置文件nginx.conf
添加upstream server,此處tomcat可替換

配置代理
添加proxy_pass http://tomcat;
此處tomcat對(duì)應(yīng)上面配置的upstream 名稱

測(cè)試過(guò)程:
訪問(wèn)172.16.100.151,多次刷新



經(jīng)過(guò)刷新發(fā)現(xiàn)tomcat集群代理成功
此處因?yàn)槲磁鋫錂?quán)重,所以輪詢到3個(gè)tomcat
補(bǔ)充:
如果需要配置權(quán)重或算法,可以配置在upstream下,例如:
server ???172.16.100.152:18080 ?weight=1;#服務(wù)器配置 ??weight是權(quán)重的意思,權(quán)重越大,分配的概率越大。 ?
2、搭建Tomcat集群, 配置Session Replication實(shí)現(xiàn)Session共享
部署服務(wù)器集群離不開(kāi)Session共享,實(shí)現(xiàn)Session共享方式有很多種,對(duì)于小型集群(5臺(tái)服務(wù)器內(nèi))我們可以采用Session Replication來(lái)實(shí)現(xiàn)Session共享,這樣實(shí)現(xiàn)起來(lái)容易,又可以
優(yōu)點(diǎn):
1,實(shí)現(xiàn)簡(jiǎn)單。
2,不需要使用共享數(shù)據(jù)庫(kù),節(jié)點(diǎn)少,降低了故障率。
缺點(diǎn):
1,同步Session數(shù)據(jù)造成了網(wǎng)絡(luò)帶寬的開(kāi)銷。只要Session數(shù)據(jù)有變化,就需要將數(shù)據(jù)同步到所有其他機(jī)器上,機(jī)器越多,同步帶來(lái)的網(wǎng)絡(luò)帶寬開(kāi)銷就越大。
2,每臺(tái)Web服務(wù)器都要保存所有Session數(shù)據(jù),如果整個(gè)集群的Session數(shù)據(jù)很多(很多人同時(shí)訪問(wèn)網(wǎng)站)的話,每臺(tái)機(jī)器用于保存Session數(shù)據(jù)的內(nèi)容占用會(huì)很嚴(yán)重。
測(cè)試環(huán)境
Tomcat1:172.16.100.152:8080
Tomcat2:172.16.100.152:8081
Tomcat3:172.16.100.152:8082
操作步驟:
修改tomcat的server.xml文件,增加Cluster配置(注意刪除原配置文件的--!>注釋)
<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.4"
????????????????????????????port="45564"
????????????????????????????frequency="500"
????????????????????????????dropTime="3000"/>
????????????????<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
??????????????????????????address="172.16.100.152"?
??????????????????????????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.MessageDispatchInterceptor"/>
????????????</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>
參數(shù)說(shuō)明:
標(biāo)粗的參數(shù)都要注意
address="228.0.0.4"為組播地址,tomcat集群設(shè)置要保持一致
address="172.16.100.152"是tomcat的ip地址,本次3個(gè)tomcat均在同一主機(jī),故不變
port="4000"receive地址,不可重復(fù),需要修改
設(shè)置默認(rèn)主機(jī),并增加jvmRoute(同主機(jī)多tomcat負(fù)載時(shí))(重要?。?/h2>
[root@~]# vim /tomcat安裝路徑/conf/server.xml
找到
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
將jvmRoute改為T(mén)omcat1
如:<Engine name="Catalina" defaultHost="localhost" jvmRoute="Tomcat1">
(若此步驟未進(jìn)行,則會(huì)話無(wú)法同步,日志會(huì)報(bào)錯(cuò)提示未找到localhost)
更改web應(yīng)用程序根目錄下“WEB-INF”目錄下的web.xml文件
在倒數(shù)第二行添加內(nèi)容:<distributable/>

配置測(cè)試頁(yè)面:
[root@~]# vim /tomcat安裝目錄/webapps/ROOT/jsp/index.jsp(名字隨便)
內(nèi)容:
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
??<head>
<title>tomcat1</title>
??</head>
<body>
<h1><font color="red">Session serviced by tomcat1?</font></h1>
<table aligh="center" border="1">
<tr>
<td>Session ID </td>
??????????????<td><%=session.getId() %></td>
<% session.setAttribute("abc","adc");%>
???????????</tr>
<tr>
<td>Created on</td>
<td><%=session.getCreationTime() %></td>
</tr>
???</table>
</body>
<html>
注意修改tomcat名稱方便測(cè)試
測(cè)試:
由于之前已經(jīng)搭建了nginx反向代理,直接瀏覽器訪問(wèn)nginx頁(yè)面即可,結(jié)果如下:



3、搭建mysql服務(wù)器,并實(shí)現(xiàn)主從復(fù)制
由于mysql5.6與mysql5.7,不同安裝包等因素,mysql安裝方式各不相同,建議使用yum安裝,此處不做介紹
修改主庫(kù)配置文件
[root@localhost src]# cat /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
symbolic-links=0
user=mysql
innodb_file_per_table=1
server-id=1
log-bin=/usr/local/mysql/data/master-log
[mysqld_safe]
log-error=/usr/local/mysql/data/err.log
pid-file=/usr/local/mysql/data/mysql.pid
!includedir /etc/my.cnf.d
啟動(dòng)mysql服務(wù),進(jìn)入mysql配置用戶密碼權(quán)限等常規(guī)設(shè)置
mysql>show variables like 'log_%';查看二進(jìn)制日志是否啟動(dòng)(關(guān)鍵)
備份主庫(kù),并將數(shù)據(jù)導(dǎo)入到從庫(kù)
mysql> flush tables with read lock;
mysqldump -h127.0.0.1 -p3306 -uroot -p test > /data/backup/test.sql
備份完畢后
mysql> unlock tables;解開(kāi)讀鎖
修改從庫(kù)配置文件
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
symbolic-links=0
user=mysql
innodb_file_per_table=1
server-id=2 ???#這里的server-id一定要跟主庫(kù)不同
relay-log=/usr/local/mysql/data ?
[mysqld_safe]
log-error=/usr/local/mysql/data/err.log
pid-file=/usr/local/mysql/data/mysql.pid ?
!includedir /etc/my.cnf.d
啟動(dòng)從庫(kù)mysql服務(wù)
導(dǎo)入主庫(kù)數(shù)據(jù)
在從庫(kù)上啟動(dòng)mysql> start slave;
在從庫(kù)mysql輸入mysql>show salve status驗(yàn)證主從是否建立
出現(xiàn):
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
則說(shuō)明配置成功了
4、搭建mysql服務(wù)器,實(shí)現(xiàn)數(shù)據(jù)庫(kù)的備份和還原
數(shù)據(jù)庫(kù)備份方法
mysqldump -u root -p密碼 數(shù)據(jù)庫(kù)名 ?數(shù)據(jù)表名 > mysql.sql ????????????#重定向給一個(gè)數(shù)據(jù)庫(kù),可以任意命名,以.sql結(jié)尾
此時(shí)會(huì)在/var/lib/mysql目錄下自動(dòng)生成一個(gè)mysql.sql備份文件
數(shù)據(jù)庫(kù)還原
mysql -u root -p密碼 進(jìn)入mysql控制臺(tái)‘mysql>’
查看數(shù)據(jù)庫(kù):show databases;
建立要還原的數(shù)據(jù)庫(kù):create database test2;
使用剛建立的數(shù)據(jù)庫(kù):use? test2;
導(dǎo)入數(shù)據(jù):source? test2.sql;
驗(yàn)證還原是否成功,再次查看數(shù)據(jù)庫(kù),show databases;
使用數(shù)據(jù)庫(kù)test2:use test2;
展示該所有數(shù)據(jù)庫(kù)表:show tables;?有表存在,還原成功。