Nginx+Keepalived實現負載均衡
阿新 • • 發佈:2020-10-09
前言
首先我們說一下整體思路,如圖
每個NGINX都有個自己的IP地址,但是讓他倆來共同輪流使用一個VIP,以便主(MASTER)宕機後備(BACKUP)來接替VIP來繼續提供服務。
這裡我們用四臺虛擬機器,來分別代表NGINX1、NGINX2、WEB1、WEB2,WEB3忽略就好。
準備工作
關閉所有機器的防火牆等安全機制
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# iptables -F [root@localhost ~]# setenforce 0
NGINX測試機安裝keepalived
[root@nginx ~]# yum-y install keepalived ipvsadm
WEB測試機安裝apache,這裡直接用yum安裝
[root@node ~]# yum -y install httpd
NGINX1配置
首先修改主配置檔案
[root@nginx1 ~]# vim /usr/local/nginx/conf/nginx.conf ** http{ ***略*** upstream apache_pool { server 192.168.200.11:80 weight=1; server 192.168.200.112:80 weight=1; } server {***略*** location / { root html; index index.html index.htm; proxy_pass http://apache_pool; proxy_set_header Host $http_host; } } } **
keepalived配置檔案修改
global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] smtp_server192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script chk_http_port { script "/check/chk_nginx" #通過此指令碼檢測 interval 2 #執行時間間隔,預設單位秒 weight -20 #指令碼執行成功後降低的優先順序,這裡是-5 fall 2 #檢測兩次失敗後才確定失敗 rise 1 #檢測一次成功即成功 } vrrp_instance VI_1 { state MASTER interface eno16777728 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.200.254 } track_script { #引用VRRP指令碼,即在 vrrp_script 部分指定的名字。 chk_http_port } }
寫一個檢測NGINX狀態的腳步,如果NGINX出現問題的話,停止keepalived服務,讓出VIP。
[root@nginx ~]# mkdir /check [root@nginx ~]# vim /check/chk_nginx *** #bin/bash ps -C nginx --no-heading >/dev/null if [ $? -ne 0 ] then /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf sleep 2 ps -C nginx --no-heading >/dev/null if [ $? -ne 0 ] then systemctl stop keepalived #killall -9 keepalived fi fi *** [root@nginx ~]# chmod +x /chech/chk_nginx
NGINX2的配置與1相同,這裡就不做多解釋了
開啟網路服務
[root@node1 ~]# systemctl start httpd
測試
NGINX測試機開啟keepalived服務
[root@nginx ~]# systemctl start keepalived
用網頁檢視
當主動關閉NGINX1服務是,我們可以看到VIP跑到了NGINX2上,因為指令碼的原因,我們可以選擇關閉NGINX1的網絡卡來進行故障測試
首先我們看到2沒有 VIP地址
關閉1的網絡卡後
我們可以看到2上已經獲取到了VIP地址