簡單介紹:
Nginx 是HTTP反向代理伺服器;
Keepalived 主要用來避免服務的單點故障;
Tomcat 輕量級web應用伺服器。
架構拓撲圖

請求邏輯圖

搭建步驟
1、準備工作
系統:
centos7
軟體:上傳至 /usr/local 目錄
1. apache-tomcat-8.5.24.tar.gz
2. nginx-1.12.2.tar.gz
3. keepalived-1.3.9.tar.gz
伺服器:
192.168.201.130(Master)
192.168.201.131(Backup)
設定固定IP,必要的話,請自行百度輸入如下内容(131伺服器類似)vim /etc/sysconfig/network
重新開機網卡:DNS1=192.168.201.130 DNS2=8.8.8.8
service network restart
2、安裝依賴包
yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel open openssl-devel
如果出現錯誤:
Another app is currently holding the yum lock; waiting for it to exit…
可能是系統自動更新正在運作,yum在鎖定狀态中,但是kill有時候也殺不掉,那麼執行以下指令後,再繼續操作:
rm -f /var/run/yum.pid
3、Tomcat 安裝
前提:tomcat壓縮檔案上傳至指定位置:
#進入指定目錄
cd /usr/local/
#檢視所有檔案
ls
#解壓tomcat
tar -zxvf apache-tomcat-8.5.24.tar.gz
#進入tomcat-8.5.24/bin
cd apache-tomcat-8.5.24/bin
#啟動tomcat
./startup.sh
如遇到權限不足,則輸入su,接着輸入密碼即可
啟動成功後,外網輸入ip位址:8080,但是通路不了,則需要關閉防火牆:#停止firewall systemctl stop firewalld.service #禁止firewall開機啟動 systemctl disable firewalld.service #檢視預設防火牆狀态(關閉後顯示notrunning,開啟後顯示running) firewall-cmd --state
預設端口号為:8080,浏覽器通路:
192.168.201.130:8080
192.168.201.131:8080
3、Nginx 安裝
#進入指定目錄
cd /usr/local/
#檢視所有檔案
ls
#解壓安裝包
tar -zxvf nginx-1.12.2.tar.gz
#進入nginx-1.12.2目錄
cd nginx-1.12.2
#執行編譯
./configure --with-http_stub_status_module --with-http_ssl_module --prefix=/usr/local/nginx
#執行安裝
sudo make && sudo make install
修改Nginx配置檔案
vi /usr/local/nginx/conf/nginx.conf
内容如下:
#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的服務位址以及權重
#上線後,在130伺服器上啟動多個執行個體,upstream配置本機多個執行個體
upstream localhost{
server 192.168.201.130:8080 weight=2;
server 192.168.201.131: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;
}
}
}
配置完成後,啟動Nginx
#進入指定目錄
cd /usr/local/nginx/sbin
#驗證nginx配置檔案是否正确
./nginx -t
#出現 nginx.conf test is successful 則表示成功
#啟動nginx
./nginx
#重新開機nginx
./nginx -s reload
#檢視nginx程序
ps -ef|grep nginx
4、Keepalived 安裝
#進入指定目錄
cd /usr/local/
#檢視所有檔案
ls
#解壓安裝包
tar -zxvf keepalived-1.3.9.tar.gz
#進入keepalived-1.3.9目錄
cd keepalived-1.3.9
#執行編譯
./configure --prefix=/usr/local/keepalived --sysconf=/etc
#執行安裝
sudo make && sudo make install
#檢查一下/etc/keepalived 下有沒有配置檔案,如果沒有,可手動建立
vim /etc/keepalived/keepalived.conf
Master 配置檔案:
global_defs {
#hostname
router_id nginx_master
}
vrrp_script chk_nginx {
#檢測nginx的腳本
script "/home/keepalived/nginx_check.sh"
#每2秒檢測一次
interval 2
#如果某一個nginx當機 則權重減20
weight -20
}
vrrp_instance VI_1 {
#狀态 MASTER BACKUP
state MASTER
#綁定的網卡
interface ens33
#虛拟路由的ID号,兩個節點設定必須一樣
virtual_router_id 51
#本機的IP
mcast_src_ip 192.168.201.130
priority 90
advert_int 1
# 設定驗證資訊,兩個節點必須一緻
authentication {
auth_type PASS
auth_pass 1111
}
# 虛拟IP,兩個節點設定必須一樣。
virtual_ipaddress {
192.168.201.222
}
# nginx存活狀态檢測腳本
track_script {
chk_nginx
}
}
Backup配置檔案:
global_defs {
#hostname
router_id nginx_backup
}
vrrp_script chk_nginx {
#檢測nginx的腳本
script "/home/keepalived/nginx_check.sh"
#每2秒檢測一次
interval 2
#如果某一個nginx當機 則權重減20
weight -20
}
vrrp_instance VI_1 {
#狀态 MASTER BACKUP
state BACKUP
#綁定的網卡
interface ens33
#虛拟路由的ID号,兩個節點設定必須一樣
virtual_router_id 51
#本機的IP
mcast_src_ip 192.168.201.131
priority 90
advert_int 1
# 設定驗證資訊,兩個節點必須一緻
authentication {
auth_type PASS
auth_pass 1111
}
# 虛拟IP,兩個節點設定必須一樣。
virtual_ipaddress {
192.168.201.222
}
# nginx存活狀态檢測腳本
track_script {
chk_nginx
}
}
建立Nginx服務檢測腳本
/home/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
#嘗試重新啟動nginx
/usr/local/nginx/sbin/nginx
#睡眠2秒
sleep 2
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
#啟動失敗,将keepalived服務殺死。将vip漂移到其它備份節點
killall keepalived
fi
fi
配置開機自啟
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
#添加到開機自啟
chkconfig keepalived on
配置完成後,啟動keepalived
#啟動Keepalived服務
service keepalived start
#然後再Master機器上檢視VIP位址
ip addr
Master機器,可以檢視到虛拟IP:192.168.201.222綁定在了ens33(正常為eth0)上;
Backup機器,則沒有虛拟ip。
如果啟動出現錯誤,則先排除是否應權限不足引起後,其餘問題多半出現在keepalived.conf。
測試
1、正常情況
通路虛拟IP(192.168.201.222:80)
能通路指定服務,即通路 master
> 192.168.201.222:80 (vip,keepalived)
> 192.168.201.130:80(nginx)
> 192.168.201.130:8080(nginx配置的tomcat服務中的其中一個)
2、異常情況
通路虛拟IP(192.168.201.222:80)
master服務異常,即通路 backup
> 192.168.201.222:80 (vip,keepalived)
> 192.168.201.131:80(nginx)
> 192.168.201.131:8080(nginx配置的tomcat服務中的其中一個)
采用監控手段,擷取伺服器異常報警,及時修複後,啟動tomcat服務、nginx服務、keepalived服務,則vip通路将自動切換回master。
補充
需要考慮session同步的問題
指令彙總
#啟動tomcat,進入 /usr/local/tomcat-8.5.24/bin
./startup.sh
#重新開機nginx,進入/usr/local/nginx/sbin目錄
./nginx -s reload
#重新整理systemctl配置
systemctl daemon-reload
#停止keepalived服務
service keepalived stop
#啟動keepalived服務
service keepalived start
#重新開機keepalived服務
service keepalived restart
#檢視keepalived程序
ps -aux |grep keepalived
#修改keepalived配置檔案
vim /etc/keepalived/keepalived.conf
以上内容均來自于百度,但确實是經過自己實踐所得,希望讓大家能夠更簡單的使用此架構。
參考1:https://my.oschina.net/feinik/blog/1590941
參考2:https://my.oschina.net/xshuai/blog/917097
版權聲明:本文為CSDN部落客「weixin_33971977」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。
原文連結:https://blog.csdn.net/weixin_33971977/article/details/91943546