第二十周

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互不沖突即可。

tomcat配置文件
tomcat配置文件

對(duì)于nginx:

修改nginx配置文件nginx.conf

添加upstream server,此處tomcat可替換

upstream

配置代理

添加proxy_pass http://tomcat;

此處tomcat對(duì)應(yīng)上面配置的upstream 名稱

proxy_pass

測(cè)試過(guò)程:

訪問(wèn)172.16.100.151,多次刷新

tomcat1
tomcat2
tomcat3

經(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/>

web.xml

配置測(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é)果如下:


tomcat1



tomcat2



tomcat3



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;?有表存在,還原成功。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容