Nginx+keepalived高可用
機器
192.168.64.129 | keepalived(主) nginx 檢測Nginx指令碼 |
192.168.64.130 | keepalived(從) nginx 檢測Nginx指令碼 |
192.168.64.131 | tomcat-8(8080) tomcat-9(8090) |
192.168.64.200 | vip |
安裝
yum -y install Nginx
yum -y install keepalived
下載Tomcat安裝包 jdk安裝包 搭建環境
配置keepalived
keepalived主
vrrp_script chk_http_port { script "/etc/keepalived/nginx_check1.sh" interval 2 weight -5 fall 2 rise 1 } vrrp_instance VI_1 { state MASTER #主 interface ens33 #你對應的網絡卡名稱 virtual_router_id 51 #主從必須一致 priority 100 #優先順序 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.64.200 #vip } track_script { chk_http_port } }
keepalived(從)
vrrp_script chk_http_port { script "/etc/keepalived/nginx_check1.sh" interval 2 weight -5 fall 2 rise 1 } vrrp_instance VI_1 { state BACKUP #從 interface ens33 #網絡卡名稱 virtual_router_id 51 #主從必須一致 priority 80 #優先順序 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.64.200 #vip } track_script { chk_http_port } }
在預設的keepalive.conf裡面還有 virtual_server,real_server,這樣的配置,我們這用不到,它是為lvs準備的。。
在預設的keepalive.conf裡面還有 virtual_server,real_server,這樣的配置,我們這用不到,它是為lvs準備的。。
在預設的keepalive.conf裡面還有 virtual_server,real_server,這樣的配置,我們這用不到,它是為lvs準備的。。
Nginx配置檔案
vim /etc/nginx/conf.d/tff.conf
upstream webserver { #負載均衡 server 192.168.64.131:8080 weight=1; #權重輪詢 server 192.168.64.131:8090 weight=2; } server { listen 80; listen [::]:80; server_name localhost; location / { root /usr/share/nginx/html; #反向代理 proxy_pass http://webserver; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
Tomcat
確保兩個埠可以訪問
重啟服務
keepalived Nginx Tomcat 確保都是正常執行的狀態
檢視網路
發現只有主keepalived 節點有vip地址 當我們停止主keepalived 節點 發現從 keepalived 節點有vip地址
這就是vip漂移
這就是vip漂移
測試一下是否可以訪問
當我們停掉主keepalived節點上Nginx服務會發生什麼呢?
肯定報錯啦 但是另一個Nginx服務是好的 但是沒有起作用 明顯不符合高可用
這個時候就可以讓keepalived去檢測Nginx服務狀態 預處理重啟Nginx程序 如果重啟失敗 就停掉Nginx程序服務異常的機器的keepalived服務
這個時候就可以讓keepalived去檢測Nginx服務狀態 預處理重啟Nginx程序 如果重啟失敗 就停掉Nginx程序服務異常的機器的keepalived服務
Nginx檢測指令碼
192.168.64.129 | keepalived(主) nginx 檢測Nginx指令碼 |
192.168.64.130 | keepalived(從) nginx 檢測Nginx指令碼 |
192.168.64.131 | tomcat-8(8080) tomcat-9(8090) |
192.168.64.200 | vip |
vim /etc/keepalived/nginx_check1.sh
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
echo "$counter"
if [ "${counter}" = "0" ]; then
/usr/sbin/service nginx start
sleep 3
counter=$(ps -C nginx --no-heading|wc -l)
echo "$counter"
if [ "${counter}" = "0" ]; then
echo "開始停止"
/usr/sbin/service keepalived stop
fi
fi
停掉Nginx服務 使用這個指令碼啟動Nginx服務 成功了就往下走 (我的Nginx是用yum安裝的)
停掉Nginx服務 使用這個指令碼啟動Nginx服務 成功了就往下走 (我的Nginx是用yum安裝的)
為了測試能看到明顯效果我們把主從keepalived機器配置檔案引數interval改成30秒檢測
重啟主從keepalived機器服務 停止主keepalived機器節點上的Nginx服務 等待30秒發現Nginx服務啟動成功了
再一次測試 我們把主keepalived機器節點上的Nginx服務停掉後啟動httpd服務(埠號80) 把Nginx服務埠號80佔領了
這樣Nginx服務就不會起來了(確保Nginx服務啟動失敗)根據指令碼它會去停掉主keepalived機器服務 從keepalived機器服務(接管)也就成了主似的 vip就進行漂移了
當我們發現主keepalived服務停止了 我們去啟動 順帶也會發現Nginx服務異常 再去解決 等下一次檢測的時候vip就回到主keepalived機器上了
這樣才是我們想要的結果