nginx反向代理、Session Replication、mysql主從復(fù)制和備份還原

(第二十周作業(yè))

1、搭建Tomcat集群,并通過nginx反向代理訪問
需要兩臺虛擬機
A機:安裝tomcat(端口:8080),nginx(端口80)? IP地址:192.168.183.164
B機:安裝tomcat(端口:8080),?IP地址:192.168.183.163
1)A機安裝nginx
安裝openssl庫
# yum install -y openssl openssl-devel
安裝gcc:
# yum install gcc-c++? ?
安裝 PCRE? ?
# yum install -y pcre pcre-devel
安裝zlib庫?
# yum install -y zlib zlib-devel
下載nginx:? nginx-1.14.2.tar.gz
解壓,編譯安裝
# tar -zxvf nginx-1.14.2.tar.gz
# cd nginx-1.14.2
# make && make install
啟動nginx
# cd /usr/local/nginx/sbin
# ./nginx
2)A機和B機都要安裝tomcat
上傳apache-tomcat-8.0.47.0.tar到/root
# cd /root
#? tar -xf apache-tomcat-8.0.47.0.tar
#? mv apache-tomcat-8.0.47.0 tomcat
?啟動tomcat服務(wù)
# /root/tomcat/bin/startup.sh
查看日志
# tail -f /root/tomcat/logs/catlina.out
等出現(xiàn)Started UP表示啟動完成
關(guān)閉防火墻
# service firewalld stop
從宿主機打開瀏覽器來訪問http://<ip>:8080,可以看到tomcat的首頁
修改首頁內(nèi)容讓AB機有區(qū)別。
3)配置nginx.conf做反向代理

#后端tomcat服務(wù)器
upstream apachetomcat? {
? ? #這里可以配置多臺服務(wù)器和端口號
? ? server 192.168.184.163:8080;
? ? server 192.168.184.164:8080;
}
server {
? ? listen 80;
? ? server_name? 192.168.184.164;
? ? #定義日志位置
? ? access_log? logs/tomcat.access.log? main;
? ? error_log? logs/tomcat.error.log;
? ? ?#配置站點根目錄會根據(jù)完整的URI請求來映射
? ? root? html;
? ? #默認頁面
? ? index? index.html index.htm index.jsp;
? ? #url映射
? ? location / {
????????root? html;
????????index? index.html index.htm;
? ? ? ? proxy_pass? http://apachetomcat;? ? #proxy_pass配置為:http:// + upstream名稱? ? ? ?
? ? }
}

訪問http://192.168.184.164,觀察兩次的tomcat頁面不一樣,說明一會是訪問A機,一會是訪問B機。

2、搭建Tomcat集群,?配置Session?Replication實現(xiàn)Session共享
需要兩臺虛擬機
A機:安裝tomcat(端口:8080),apache(端口80)? IP地址:192.168.183.151
B機:安裝tomcat(端口:8080),?IP地址:192.168.183.150
1)A機安裝apache
# yum install httpd -y
# vi /etc/httpd/conf/httpd.conf

#加載以下三個模塊
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#在配置文件末端加入以下代碼
ProxyPass /? balancer://tomcatcluster/
ProxyPassReverse /? balancer://tomcatcluster/?
<Proxy balancer://tomcatcluster>?
  BalancerMember ajp://192.168.183.151:8009 route=a?
  BalancerMember ajp://192.168.183.151:8009 route=b
</Proxy>

2)A機B機安裝tomcat
(安裝步驟參考第1題的第(2)步)
3)A機B機配置tomcat
先開啟網(wǎng)卡的組播地址
#??route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
修改tomcat安裝目錄下的conf/server.xml

<!-- Define an AJP 1.3 Connector on port 8009 -->
? ? <Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
<!-- 在加上route,jvmRoute,A機為a,B機為b,與apache配置文件中對應(yīng)-->
<!-- Define the top level container in our container hierarchy -->
? ? <Engine name="Catalina" defaultHost="localhost" jvmRoute="a">
<!--tomcat集群 -->
<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
? ? ? ? ? ? ? ? ?managerClassName="org.apache.catalina.cluster.session.DeltaManager"
? ? ? ? ? ? ? ? ?expireSessionsOnShutdown="false"
? ? ? ? ? ? ? ? ?useDirtyFlag="true"
? ? ? ? ? ? ? ? ?notifyListenersOnReplication="true">
????<Membership
? ? ? ? ? ? ? ? className="org.apache.catalina.cluster.mcast.McastService"
? ? ? ? ? ? ? ? mcastAddr="224.0.0.1"
? ? ? ? ? ? ? ? mcastPort="45564"
? ? ? ? ? ? ? ? mcastFrequency="500"
? ? ? ? ? ? ? ? mcastDropTime="3000"/>
????<Receiver
? ? ? ? ? ? ? ? className="org.apache.catalina.cluster.tcp.ReplicationListener"
? ? ? ? ? ? ? ? tcpListenAddress="192.168.183.151"
? ? ? ? ? ? ? ? tcpListenPort="4001"
? ? ? ? ? ? ? ? tcpSelectorTimeout="100"
? ? ? ? ? ? ? ? tcpThreadCount="6"/>
????<Sender
? ? ? ? ? ? ? ? className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
? ? ? ? ? ? ? ? replicationMode="pooled"
? ? ? ? ? ? ? ? ackTimeout="15000"
? ? ? ? ? ? ? ? waitForAck="true"/>
????<Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
? ? ? ? ? ? ? ? ? ?filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
????<Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"

? ? ? ? ? ? ? ? ? ? ? tempDir="/tmp/war-temp/"
? ? ? ? ? ? ? ? ? ? ? deployDir="/tmp/war-deploy/"
? ? ? ? ? ? ? ? ? ? ? watchDir="/tmp/war-listen/"
? ? ? ? ? ? ? ? ? ? ? watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
</Cluster>

?上文中tcpListenAddress的值,A機就寫A機的IP,B機就寫B(tài)機的IP。
在tomcat安裝目錄下webapps子目錄中的應(yīng)用程序里的WEB-INF目錄下的web.xml

<web-app>
????……
????<distributable/>
</web-app>

3、搭建mysql服務(wù)器,并實現(xiàn)主從復(fù)制
需要兩臺虛擬機
A機:安裝mysql(主機),IP:192.168.183.201
B機:安裝mysql(從機),IP:192.168.183.202
1)A機B機安裝mysql
#yum -y install MariaDB-server MariaDB-client
2)主機A機配置
修改my.cnf配置文件
# vi /etc/my.cnf

[mysqld]
……
log-bin = master-bin
log-bin-index = master-bin.index
server-id = 1

其中l(wèi)og-bin表示二進制日志文件的基本名,log-bin-index 二進制索引文件的文件名,它保存了所有binlog文件的列表,server-id要唯一,master
機與slave從機ID不能相同。
保存配置文件,重啟mariadb使配置生效
# systemctl restart mariadb
在主機上創(chuàng)建一個復(fù)制用戶
# mysql -u root
mysql>CREATE USER repl_user;
mysql>GRANT REPLICATION SLAVE ON *.* TO repl_user IDENTIFIED BY 'copycopy';
3)從機B機配置
修改my.cnf配置文件
# vi /etc/my.cnf

[mysqld]
……
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index
server-id = 2

relay-log和relay-log-index是中繼日志文件和中繼索引文件的設(shè)置
保存配置文件,重啟mariadb使配置生效
# systemctl restart mariadb
在從機上創(chuàng)建和運行復(fù)制
# mysql -u root
mysql> CHANGE MASTER TO
? ? ->? ? MASTER_HOST = '192.168.183.201',
? ? ->? ? MASTER_PORT = '3306',
? ? ->? ? MASTER_USER = 'repl_user',
? ? ->? ? MASTER_PASSWORD = 'copycopy';
mysql> START SLAVE;
查看復(fù)制狀態(tài)
在A機上
# mysql -u root
mysql>SHOW MASTER STATUS\G
4、搭建mysql服務(wù)器,實現(xiàn)數(shù)據(jù)庫的備份和還原
需要一臺虛擬機,在上面安裝mysql
# yum -y install MariaDB-server MariaDB-client
登錄數(shù)據(jù)庫
#?mysql -u root?
創(chuàng)建數(shù)據(jù)庫
mysql> create databases abc;
mysql> use abc;
mysql>create table `student`(
>? ? ? ? ? ? ? ? `student_id`??INT UNSIGNED AUTO_INCREMENT,
>? ? ? ? ? ? ? ? ?`name` varchar(40) not null,
>? ? ? ? ? ? ? ? `birthday`? DATE not null,
>? ? ? ? ? ? ? ? `sport`? ?varchar(255),
>????????????????PRIMARY KEY ( `student_id` )
>????????????????)ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入數(shù)據(jù)
mysql>INSERT INTO? ? `student` ( name,birthday,sport )
>? ? ? ? ? ? ? ? values
>? ? ? ? ? ? ? ? ("zs","2000-08-07","football");
mysql>INSERT INTO? ? `student` ( name,birthday,sport )
>? ? ? ? ? ? ? ? values
>? ? ? ? ? ? ? ? ("ls","2000-09-07","swimming");
mysql>quit;
然后做數(shù)據(jù)庫備份
#? mysqldump? -uroot? ?--default-character-set=UTF8? abc? >? /root/abc.sql
備份好后,把數(shù)據(jù)庫刪除
# mysql -u root?
mysql> drop database abc;
查看是否刪除掉
mysql > show databases;
mysql>quit;
然后使用命令進行恢復(fù)
#? mysql? -uroot? ?--default-character-set=UTF8? abc? ?<? /root/abc.sql
然后登錄數(shù)據(jù)庫查看是否恢復(fù)成功
# mysql -u root
mysql> show databases;
mysql>use abc;
mysql>select * from student;

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

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

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