最原始的服務部署,為單點部署,即直接把服務部署在一個服務器上,如果服務器出現故障,或者服務因為某個例外而掛掉,則服務就會發生中斷,單點部署出現故障的概率最高,
后來,出現了網關,比如 nginx kong 等,如下圖所示:

這樣,所有客戶請求都會經過網關,再由網關轉發到各個服務,如果由服務出現故障,則網關會自動跳過故障服務,把請求分發到可用服務,因為網關只是起到服務轉發的功能,所以網關出現故障的概率比應用出現故障的概率低很多,
http
{
upstream myserver {
server 192.168.12.181:80 weight=3 max_fails=3 fail_timeout=20s;
server 192.168.12.182:80 weight=1 max_fails=3 fail_timeout=20s;
server 192.168.12.183:80 weight=4 max_fails=3 fail_timeout=20s;
}
server
{
listen 80;
server_name www.domain.com 192.168.12.189;
index index.htm index.html;
root /ixdba/web/wwwroot;
location / {
proxy_pass http://myserver;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
include /opt/nginx/conf/proxy.conf;
}
}
}
但是,網關并非會永遠不宕機,如果遭遇入侵,或者機房斷電,網關服務出現故障,則不管下面的應用服務部署了多少個都沒用,
于是就出現了第三種集群,如下圖所示,借助keeplived部署2個以上的nginx 網關,這樣網關出現故障導致服務中斷的機率將大大降低,

這里主從nginx服務的配置是一樣的,
3.keepalive的配置:/etc/keepalived/keepalivec.conf
主節點(Master節點配置)
(1)修改/etc/keepalived/keepalivec.conf 組態檔
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
#當前主機ip
smtp_server 192.168.17.129
smtp_connect_timeout 30
# 重點1:通過它,可以訪問到主機,在hosts檔案中,要做映射關系,類似于 127.0.0.1 LVS_DEVEL,host檔案路徑:/etc/hosts
router_id LVS_DEVEL
}
#重點2:檢測腳本,目的是定時執行,檢測nginx的狀態,如果掛了嘗試重啟,如果啟動失敗,則停止該節點的nginx和keepaive
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" # 執行腳本所在的位置,自定義腳本后面會提及
interval 2 #檢測腳本執行的間隔,單位秒,每個2秒執行一次腳本
weight 2 #腳本執行滿足,權重加2,這里其實沒搞明白..
}
#重點3:主備節點的區別配置
vrrp_instance VI_1 {
state MASTER # 備份服務器上將 MASTER 改為 BACKUP
interface ens33 # 系結的網卡,通過ipconfig查看
virtual_router_id 51 # 主、備機的 virtual_router_id 必須相同
priority 100 # 主、備機取不同的優先級,主機值較大,備份機值較小(比如主機100,備機90)
advert_int 1 #每隔一秒發送一次心跳,確保從服務器(keepalive)是否還活著
authentication { # 心跳檢測需要的密碼
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 # VRRP H 虛擬地址(重點:虛擬ip配置,客戶端通過該ip進行訪問,主節點和備用節點誰占有這個ip,誰提供反向代理服務)
}
}
(2)在/usr/local/src 添加檢測腳本nginx_check.sh,檢查Nginx是否還活著
#!/bin/bash
#查看ningx的行程號,并統計數量
A=`ps -C nginx –no-header |wc -l`
#等于0時,即nginx掛了,嘗試重啟
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #Nginx啟動命令的位置
sleep 2
#啟動失敗,殺掉keepalive
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/517481.html
標籤:其他
