#在所有節點安裝nginx
#ps: 如果要使用tcp流轉發:需用二進制包安裝 make編譯時加入stream流的參數。 ?推薦直接安裝openresty【默認支持stream等nginx模塊,還附帶了很多常用的lua庫】
?
apt install -y net-tools
sudo apt install -y nginx
vim /etc/nginx/conf.d/nginx.conf
upstream balanceServer {# 服務器的訪問地址,負載均衡算法使用權重輪詢。應用服務器是自己的應用服務主機的地址,最好和負載均衡服務分開部署。server 10.3.1.135:8080 weight=1;
}
#負載均衡服務
server {# 負載均衡的監聽端口listen 80 default_server;server_name _;location / {proxy_pass http://balanceServer; # 代理轉發應用服務client_max_body_size 500m;}location /prod-api/ {proxy_pass http://balanceServer; # 代理轉發應用服務proxy_cookie_path / /prod-api;rewrite ^/prod-api/(.*) /$1 break;client_max_body_size 500m;}}
#nginx服務默認占用80 ?修改默認端口為81
vim /etc/nginx/sites-enabled/default
listen 81 default_server;
listen [::]:81 default_server;
nginx -s reload #systemctl restart nginx
systemctl enable nginx
#在所有節點安裝keepalived 并修改配置文件(不同節點參數需修改)
apt install -y keepalived
vim /etc/keepalived/keepalived.conf
global_defs { # 路由id: 當前安裝的keepalived節點主機的標識符,全局唯一。 # 不同節點需修改 用本機ip即可router_id 10.3.1.96
}
vrrp_script chk_nginx {script "/etc/keepalived/nginx_chk.sh" interval 2
}
vrrp_instance VI_1{# 表示的狀態,MASTER 主節點 BACKUP 備機# 一個設為MASTER 其他的設為BACKUPstate MASTER# 當前實例綁定的網卡 根據主機網卡自行修改interface ens160# 表示那些服務器一個組,保證主備節點一致virtual_router_id 100# 優先級/權重,誰的優先級高,在MASTER關掉以后,就能成為MASTERpriority 100# 主備之間同步檢查的時間間隔,默認1sadvert_int 1# 認知授權的密碼,防止非法節點的進入authentication {auth_type PASSauth_pass 1369}# 虛擬ip 要和服務器在同一個網段, 能和服務器網關進行通信的, 而且是沒有被占用的virtual_ipaddress {10.3.1.150}track_script { chk_nginx}
}
vim /etc/keepalived/nginx_chk.sh #配置腳本檢查nginx是否還在正常運行,如果掛掉就重啟它,實在啟動不了再讓keepalived綁定備用機器
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
# 判斷nginx是否宕機,如果宕機了,嘗試重啟
if [ $A -eq 0 ];then# 重啟nginx,延遲2秒 service nginx restartsleep 2 # 重新檢查是否有nginx相關的進程if [ $A -eq 0 ];then # 仍然沒有nginx相關的進程,殺死當前keepalived,切換到備用機killall keepalived fi
fi
sudo chmod +x /etc/keepalived/nginx_chk.sh
bash /etc/keepalived/nginx_chk.sh #檢查腳本,不報錯即可‘
systemctl start keepalived
ip addr #查看ens160網卡出現 10.3.1.150虛擬ip即可。 然后可以通過虛擬ip訪問對應的nginx轉發
systemctl enable keepalived
#關掉MASTER的keepalived后,虛擬ip就飄移到BACKUP節點上了 可以用ip addr查看一下