這篇短文主要介紹 的集群和用 反向代理實現 負載均衡。 1、首先需要對一些知識點進行掃盲(對自己進行掃盲,囧): + 集群(Cluster) 簡單來說就是用N台伺服器構成一個松耦合的多處理器系統(對外是一個伺服器),內部通過網路實現通信。讓N台伺服器之間相互協作,共同承載一個網站的請求壓力。用知乎上 ...
這篇短文主要介紹Tomcat
的集群和用Nginx
反向代理實現Tomcat
負載均衡。
1、首先需要對一些知識點進行掃盲(對自己進行掃盲,囧):
- 集群(Cluster)
簡單來說就是用N台伺服器構成一個松耦合的多處理器系統(對外是一個伺服器),內部通過網路實現通信。讓N台伺服器之間相互協作,共同承載一個網站的請求壓力。用知乎上一個作者的話來說就是“同一個業務,部署在多個伺服器上”,這就是集群。 集群中比較重要的是任務調度。 - 負載均衡(Load Balance)
簡單來說就是根據某種負載策略把請求分發到集群中的每一臺伺服器上,讓整個伺服器群來處理網站的請求,從而共同完成工作任務。
2、安裝環境如下:
- 騰訊雲主機,安裝的是
Centos7.3 64bits
Nginx 1.7.4
JDK8
和Tomcat8
3、具體安裝步驟:
- JDK安裝請參照 點我試試
- Nginx安裝請參照 點我試試
配置Nginx web反向代理, 實現兩個Tomcat負載均衡:
--安裝及配置Tomcat tar -zxvf apache-tomcat-8.5.28.tar.gz cp -rf apache-tomcat-8.5.28 /usr/local/tomcat1 mv apache-tomcat-8.5.28 /usr/local/tomcat2 --修改tomcat1埠號 $ cd /usr/local/tomcat1/conf/ $ cp server.xml server.xml.bak $ cp web.xml web.xml.bak $ vi server.xml
##修改Tomcat2埠號 $ cd /usr/local/tomcat2/conf/ $ cp server.xml server.xml.bak $ cp web.xml web.xml.bak $ vi server.xml
--添加Tomcat1開機自動啟動 --將/usr/local/tomcat1/bin/catalina.sh文件複製到/etc/init.d目錄下並改名為tomcat1 # cp /usr/local/tomcat1/bin/catalina.sh /etc/init.d/tomcat1 --修改/etc/init.d/tomcat1文件,在文件中添加: # vi /etc/init.d/tomcat1 --在第一行下麵輸入如下內容(否則出現錯誤:tomcat 服務不支持 chkconfig): #!/bin/sh # chkconfig: 2345 10 90 # description:Tomcat1 service # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with ..................................................................... # $Id: catalina.sh 1498485 2013-07-01 14:37:43Z markt $ # ----------------------------------------------------------------------------- CATALINA_HOME=/usr/local/tomcat1 JAVA_HOME=/usr/local/jdk8 # OS specific support. $var _must_ be set to either true or false. --添加tomcat服務: # chkconfig --add tomcat1 --設置tomcat為開機自啟動: # chkconfig tomcat1 on --將tomcat2設置開機自啟動 --將/usr/local/tomcat2/bin/catalina.sh文件複製到/etc/init.d目錄下並改名為tomcat2 # cp /usr/local/tomcat2/bin/catalina.sh /etc/init.d/tomcat2 --修改/etc/init.d/tomcat2文件,在文件中: # vi /etc/init.d/tomcat2 --在第一行下麵輸入如下內容(否則出現錯誤:tomcat 服務不支持 chkconfig): #!/bin/sh # chkconfig: 2345 10 90 # description:Tomcat2 service # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with ..................................................................... # ----------------------------------------------------------------------------- CATALINA_HOME=/usr/local/tomcat2 JAVA_HOME=/usr/local/jdk8 # OS specific support. $var _must_ be set to either true or false. --添加tomcat服務: # chkconfig --add tomcat2 --設置tomcat為開機自啟動: # chkconfig tomcat2 on
到這裡,tomcat已經安裝好了,分別啟用它們,列印出來引用的環境分別對應兩個tomcat就是對的:
[root@VM_177_101_centos src]# service tomcat1 start
Using CATALINA_BASE: /usr/local/tomcat1
Using CATALINA_HOME: /usr/local/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomcat1/temp
Using JRE_HOME: /usr/local/jdk8
Using CLASSPATH: /usr/local/tomcat1/bin/bootstrap.jar:/usr/local/tomcat1/bin/tomcat-juli.jar
Tomcat started.
[root@VM_177_101_centos src]# service tomcat2 start
Using CATALINA_BASE: /usr/local/tomcat2
Using CATALINA_HOME: /usr/local/tomcat2
Using CATALINA_TMPDIR: /usr/local/tomcat2/temp
Using JRE_HOME: /usr/local/jdk8
Using CLASSPATH: /usr/local/tomcat2/bin/bootstrap.jar:/usr/local/tomcat2/bin/tomcat-juli.jar
Tomcat started.
最後配置配置一下Nginx:
--切換到目錄
cd /usr/local/nginx/conf
--修改配置文件
vi nginx.conf
--一些常用配置
--worker_processes:工作進程個數,可配置多個
--worker_connections:單個進程最大連接數
--server:每一個server相當於一個代理伺服器
--lister:監聽埠,預設80
--server_name:當前服務的功能變數名稱,可以有多個,用空格分隔(我們是本地所以是localhost)
--location:表示匹配的路徑,這時配置了/表示所有請求都被匹配到這裡
--index:當沒有指定主頁時,預設會選擇這個指定的文件,可多個,空格分隔
--proxy_pass:請求轉向自定義的伺服器列表
--upstream name{ }:伺服器集群名稱
--現在想通過nginx訪問到tomcat,就需要修改配置中的server部分
server
{
listen 80 default;
charset utf-8;
server_name localhost;
access_log logs/host.access.log;
location / {
proxy_pass http://localhost:8080;
proxy_redirect default;
}
}
--到這裡方向代理已經完成,這樣所有的請求都需要經過代理伺服器才能訪問到正式伺服器。
接下來實現負載均衡,在安裝的過程中tomcat1配置的埠是8080,tomcat2配置的埠是8081。然後我們需要在配置文件中定義上游伺服器(upstream server)
#伺服器的集群
upstream testcomcat {
#weight是權重 權重越大,分配的幾率越大
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
server
{
listen 80 default;
charset utf-8;
access_log logs/host.access.log;
location / {
proxy_pass http://testcomcat;
proxy_redirect default;
}
}
--為了看到不一樣,我將tomcat root下麵的index.jsp頁面稍微改動了一下,分別加入了TEST1,TEST2,方便區分,重啟nginx,瀏覽器地址欄輸入IP,進行訪問,多刷新幾次頁面,會發現是在兩個伺服器間切換,如下圖所示:
service nginx reload