初期的互聯網企業因爲業務量較小,因此通常單機部署,實現單點訪問便可知足業務的需求,這也是最簡單的部署方式,可是隨着業務的不斷擴大,系統的訪問量逐漸的上升,單機部署的模式已沒法承載現有的業務量,須要進行服務集羣化部署,本文主要介紹服務端Tomcat多實例部署,以及如何保證web服務的高可用方案。html
在進入正文以前,順便在此給你們推薦一個Java架構方面的交流學習羣:698581634,裏面會分享一些資深架構師錄製的視頻錄像:有Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化這些成爲架構師必備的知識體系,主要針對Java開發人員提高本身,突破瓶頸,相信你來學習,會有提高和收穫。在這個羣裏會有你須要的內容 朋友們請抓緊時間加入進來吧。java
以下圖:爲典型的Tomcat服務多實例部署的架構圖nginx
三. 搭建Keepalived + Nginx + Tomcat的高可用負載均衡架構c++
2.服務器準備web
兩臺服務器如:192.168.10.11,192.168.10.12apache
3.安裝須要的依賴包編程
$ yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel open openssl-devel後端
4.安裝tomcat
4.1 安裝Tomcat性能優化
(1)分別在兩臺服務器中安裝Tomcat,解壓apache-tomcat-8.5.16.tar.gz及可完成安裝。
4.2 安裝Nginx
$ ./configure --with-http_stub_status_module --with-http_ssl_module --prefix=/usr/local/nginx
$ sudo make && sudo make install
4.3 安裝Keepalived
$ ./configure --prefix=/usr/local/keepalived --sysconf=/etc
$ sudo make && sudo make install
5 配置
5.1 分別配置兩臺服務器的Nginx
#nginx進程數
worker_processes 1;
#單個進程最大鏈接數
events {
worker_connections 1024;
}
#http服務器配置
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#長鏈接超時時間,單位是秒
keepalive_timeout 65;
#upstream負載均衡配置,配置路由到tomcat的服務地址以及權重
upstream localhost{
server 192.168.10.11:8080 weight=2;
server 192.168.10.12:8080 weight=2;
}
#虛擬主機的配置
server {
#監聽端口
listen 80;
#域名能夠有多個,用空格隔開
server_name localhost;
location / {
root html;
index index.html index.htm;
#nginx跟後端服務器鏈接超時時間(代理鏈接超時)
proxy_connect_timeout 3;
#後端服務器數據回傳時間(代理髮送超時)
proxy_send_timeout 30;
#鏈接成功後,後端服務器響應時間(代理接收超時)
proxy_read_timeout 30;
proxy_pass http://localhost;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
5.2 主Keepalived配置
! Configuration File for keepalived
#全局配置
global_defs {
#keepalived切換的時候,發消息到指定的email,可配置多個email
notification_email {
feinik1@foxmail.com
feinik2@foxmail.com
}
#通知郵件從哪一個地址發出
notification_email_from feinik@foxmail.com
#通知郵件的smtp地址
smtp_server smtp.exmail.qq.com
#鏈接smtp服務器的超時時間,單位秒
smtp_connect_timeout 30
#Keepalived的機器標識,一個網絡內保持惟一
router_id nginx-master
}
#執行腳本配置
vrrp_script chk_nginx {
#腳本所在路徑
script "/home/project/keepalived/check_nginx.sh"
#腳本執行間隔時間,秒
interval 2
#優先級
weight 2
}
#keepalived實例配置
vrrp_instance VI_1 {
#指定實例的初始狀態,MASTER或BACKUP兩種狀態,而且須要大寫
state MASTER
#實例綁定的網卡
interface ens33
#虛擬路由標識,是一個數字,整個VRRP內惟一,若是keepalived配置了主備,須要相同
virtual_router_id 51
#優先級,數值愈大,優先級越高
priority 100
#MASTER與BACKUP之間同步檢查的時間間隔,單位爲秒
advert_int 1
#通訊驗證
authentication {
auth_type PASS
auth_pass feinik
}
#追蹤外圍腳本
track_script {
#這裏配置vrrp_script的名稱
chk_nginx
}
#虛擬ip配置,可配置多個
virtual_ipaddress {
192.168.10.200
}
}
5.3 備Keepalived配置
! Configuration File for keepalived
#全局配置
global_defs {
#keepalived切換的時候,發消息到指定的email,可配置多個email
notification_email {
feinik1@foxmail.com
feinik2@foxmail.com
}
#通知郵件從哪一個地址發出
notification_email_from feinik@foxmail.com
#通知郵件的smtp地址
smtp_server smtp.exmail.qq.com
#鏈接smtp服務器的超時時間,單位秒
smtp_connect_timeout 30
#Keepalived的機器標識,一個網絡內保持惟一
router_id nginx-master
}
#執行腳本配置
vrrp_script chk_nginx {
#腳本所在路徑
script "/home/project/keepalived/check_nginx.sh"
#腳本執行間隔時間,秒
interval 2
#優先級
weight 2
}
#keepalived實例配置
vrrp_instance VI_1 {
#指定實例的初始狀態,MASTER或BACKUP兩種狀態,而且須要大寫
state BACKUP
#實例綁定的網卡
interface ens33
#虛擬路由標識,是一個數字,整個VRRP內惟一,若是keepalived配置了主備,須要相同
virtual_router_id 51
#優先級,數值愈大,優先級越高
priority 99
#MASTER與BACKUP之間同步檢查的時間間隔,單位爲秒
advert_int 1
#通訊驗證
authentication {
auth_type PASS
auth_pass feinik
}
#追蹤外圍腳本
track_script {
#這裏配置vrrp_script的名稱
chk_nginx
}
#虛擬ip配置,可配置多個
virtual_ipaddress {
192.168.10.200
}
}
5.4 Nginx狀態檢查腳本建立
(1)新建Nginx的狀態檢查腳本:check_nginx.sh
(2)內容以下:
#!/bin/sh
NGINX=/usr/common/nginx/sbin/nginx
PORT=80
nmap localhost -p $PORT | grep "$PORT/tcp open"
#echo $?
if [ $? -ne 0 ];then
$NGINX -s stop
#這裏再次嘗試啓動NG
$NGINX
sleep 5
nmap localhost -p $PORT | grep "$PORT/tcp open"
[ $? -ne 0 ] && cd /usr/common/keepalived/sbin && pkill keepalived
echo "stoped"
fi
4 運行測試
最後順便給你們推薦一個Java架構方面的交流學習羣:698581634,裏面會分享一些資深架構師錄製的視頻錄像:有Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化這些成爲架構師必備的知識體系,主要針對Java開發人員提高本身,突破瓶頸,相信你來學習,會有提高和收穫。在這個羣裏會有你須要的內容 朋友們請抓緊時間加入進來吧。