keepalived主從及雙主配置


高可用有2中方式。

1、Nginx+keepalived 主從配置

這種方案,使用一個vip地址,前端使用2台機器,一台做主,一台做備,但同時只有一台機器工作,另一台備份機器在主機器不出現故障的時候,永遠處於浪費狀態,對於服務器不多的網站,該方案不經濟實惠。

2、Nginx+keepalived 雙主配置

這種方案,使用兩個vip地址,前端使用2台機器,互為主備,同時有兩台機器工作,當其中一台機器出現故障,兩台機器的請求轉移到一台機器負擔,非常適合於當前架構環境。

 

1、Nginx+keepalived 主從配置

 

1.環境如下

lb-01:192.168.96.130  nginx+keepalived-master
lb-02:192.168.96.131  nginx+keepalived-backup
VIP:192.168.75.135
 

nginx+tomcat負載均衡集群參照 nginx+tomcat負載均衡集群參照

兩台機器都要安裝nginx 配置文件相同

[html]  view plain  copy
 
  1. <span style="font-size:18px;">upstream myServer{      
  2.       server 192.168.96.130:8080;      
  3.       server 192.168.96.131:8080;      
  4.     }     
  5.  server {    
  6.         listen       80;    
  7.         server_name  localhost;    
  8.     
  9.         #charset koi8-r;    
  10.     
  11.         #access_log  logs/host.access.log  main;    
  12.     
  13.         location / {     
  14.           proxy_pass  http://myServer;      
  15.         }    
  16.   </span>  

nginx結合keepalived高可用

為什么使用keepalived呢?使用keepalived就用來做高可用的,提供虛擬VIP

分別在2台機子上安裝keepalived

# yum install keepalived -y

查看keepalived版本

# keepalived -v
Keepalived v1.2.13 (11/20,2015)

 

關於2台keepalived配置文件/etc/keepalived

在130master keepalived配置文件內容如下

[html]  view plain  copy
 
  1. <span style="font-size:18px;">global_defs {  
  2.    notification_email {  
  3.      acassen@firewall.loc  
  4.      failover@firewall.loc  
  5.      sysadmin@firewall.loc  
  6.    }  
  7.    notification_email_from Alexandre.Cassen@firewall.loc  
  8.    smtp_server 192.168.200.1  
  9.    smtp_connect_timeout 30  
  10.    router_id LVS_DEVEL  
  11. }  
  12.   
  13. vrrp_script chk_http_port {  
  14.   
  15.    script "/usr/local/src/check_nginx_pid.sh"  
  16.   
  17.    interval 2      #(檢測腳本執行的間隔)  
  18.   
  19.    weight 2  
  20.   
  21. }  
  22.   
  23. vrrp_instance VI_1 {  
  24.     state MASTER   # 備份服務器上將 MASTER 改為 BACKUP    
  25.     interface eno16777736  //網卡  
  26.     virtual_router_id 51   # 主、備機的virtual_router_id必須相同  
  27.     priority 100     # 主、備機取不同的優先級,主機值較大,備份機值較小  
  28.     advert_int 1  
  29.     authentication {  
  30.         auth_type PASS  
  31.         auth_pass 1111  
  32.     }  
  33.     virtual_ipaddress {  
  34.         192.168.96.138  // VRRP H虛擬地址  
  35.     }  
  36. }  
  37. </span>  


在131-backup keepalived配置文件內容如下

[html]  view plain  copy
 
  1. <span style="font-size:18px;">global_defs {  
  2.    notification_email {  
  3.      acassen@firewall.loc  
  4.      failover@firewall.loc  
  5.      sysadmin@firewall.loc  
  6.    }  
  7.    notification_email_from Alexandre.Cassen@firewall.loc  
  8.    smtp_server 192.168.200.1  
  9.    smtp_connect_timeout 30  
  10.    router_id LVS_DEVEL  
  11. }  
  12.   
  13. vrrp_script chk_http_port {  
  14.   
  15.    script "/usr/local/src/check_nginx_pid.sh"  
  16.   
  17.    interval 2      #(檢測腳本執行的間隔)  
  18.   
  19.    weight 2  
  20.   
  21. }  
  22.   
  23. vrrp_instance VI_1 {  
  24.     state BACKUP  
  25.     interface eno16777736  
  26.     virtual_router_id 51  
  27.     priority 90  
  28.     advert_int 1  
  29.     authentication {  
  30.         auth_type PASS  
  31.         auth_pass 1111  
  32.     }  
  33.     virtual_ipaddress {  
  34.         192.168.96.138  
  35.     }  
  36. }</span>  

 

然后分別啟動2台keepalived服務

[root@lb-01 ~]# systemctl start keepalived.service

[root@lb-02 ~]# systemctl start keepalived.service

查看虛擬VIP

130-master機器查看

從上面可以看到虛擬VIP地址192.168.96.138


131-backup機器查看

從上面可以看到沒有虛擬VIP地址

測試訪問虛擬VIP

打開瀏覽器訪問 

此時虛擬VIP可以輪詢訪問了

模擬故障

把130-master nginx和keepalived停止查看是否還能正常提供服務

[root@lb-01 sbin]# ./nginx -s stop
[root@lb-01 sbin]# systemctl stop keepalived.service

此時虛擬VIP已經不再master上了

客戶端打開瀏覽器訪問是否正常訪問

130nginx和keepalived掛了也不影響服務

查看131backup機器VIP情況

此時虛擬VIP 已經在131機器上

那么如何實現nginx+keepalived雙主模式呢?

1.其實只是需要更改下keepalived配置文件即可,配置文件實例如下

增加新的VIP192.168.96.139,192.168.75.138是130機器上主虛擬VIP,192.168.96.139是131機器上主虛擬VIP

130的keepalived配置文件內容如下

 

[html]  view plain  copy
 
  1. ! Configuration File for keepalived  
  2.   
  3. global_defs {  
  4.    notification_email {  
  5.      acassen@firewall.loc  
  6.      failover@firewall.loc  
  7.      sysadmin@firewall.loc  
  8.    }  
  9.    notification_email_from Alexandre.Cassen@firewall.loc  
  10.    smtp_server 192.168.200.1  
  11.    smtp_connect_timeout 30  
  12.    router_id LVS_DEVEL  
  13. }  
  14.   
  15. vrrp_script chk_http_port {  
  16.   
  17.    script "/usr/local/src/check_nginx_pid.sh"  
  18.   
  19.    interval 2      #(檢測腳本執行的間隔)  
  20.   
  21.    weight 2  
  22.   
  23. }  
  24.   
  25. vrrp_instance VI_1 {  
  26.     state MASTER  
  27.     interface eno16777736  
  28.     virtual_router_id 51  
  29.     priority 100  
  30.     advert_int 1  
  31.     authentication {  
  32.         auth_type PASS  
  33.         auth_pass 1111  
  34.     }  
  35.     virtual_ipaddress {  
  36.         192.168.96.138  
  37.     }  
  38. }  
  39.   
  40. vrrp_instance VI_2 {  
  41.     state BACKUP  
  42.     interface eno16777736  
  43.     virtual_router_id 52  
  44.     priority 90  
  45.     advert_int 1  
  46.     authentication {  
  47.         auth_type PASS  
  48.         auth_pass 1111  
  49.     }  
  50.     virtual_ipaddress {  
  51.         192.168.96.139  
  52.     }  
  53. }  


131的keepalived配置文件內容如下

 

[html]  view plain  copy
 
  1. ! Configuration File for keepalived  
  2.   
  3. global_defs {  
  4.    notification_email {  
  5.      acassen@firewall.loc  
  6.      failover@firewall.loc  
  7.      sysadmin@firewall.loc  
  8.    }  
  9.    notification_email_from Alexandre.Cassen@firewall.loc  
  10.    smtp_server 192.168.200.1  
  11.    smtp_connect_timeout 30  
  12.    router_id LVS_DEVEL  
  13. }  
  14.   
  15. vrrp_script chk_http_port {  
  16.   
  17.    script "/usr/local/src/check_nginx_pid.sh"  
  18.   
  19.    interval 2      #(檢測腳本執行的間隔)  
  20.   
  21.    weight 2  
  22.   
  23. }  
  24.   
  25. vrrp_instance VI_1 {  
  26.     state BACKUP  
  27.     interface eno16777736  
  28.     virtual_router_id 51  
  29.     priority 90  
  30.     advert_int 1  
  31.     authentication {  
  32.         auth_type PASS  
  33.         auth_pass 1111  
  34.     }  
  35.     virtual_ipaddress {  
  36.         192.168.96.138  
  37.     }  
  38. }  
  39.   
  40.   
  41. vrrp_instance VI_2 {  
  42.     state MASTER  
  43.     interface eno16777736  
  44.     virtual_router_id 52  
  45.     priority 100  
  46.     advert_int 1  
  47.     authentication {  
  48.         auth_type PASS  
  49.         auth_pass 1111  
  50.     }  
  51.     virtual_ipaddress {  
  52.         192.168.96.139  
  53.     }  
  54. }  

 

分別啟動2台lb上nginx和keepalived服務

[root@lb-01 sbin]# ./nginx
[root@lb-01 sbin]# systemctl start keepalived.service

130查看虛擬ip

 

131查看虛擬ip

 

客戶端測試訪問虛擬VIP

訪問虛擬VIP:192.168.96.138結果如下

 

訪問虛擬VIP:192.168.96.139結果如下

 

模擬故障

 

把130服務停止

查看130虛擬VIP是否存在結果如下



沒了

 

測試訪問虛擬VIP**

 

 

從上面結果可以看到,即使130機器發生了故障也不影響使用,這樣也利用131資源了

此時查看一下131虛擬ip結果情況如下

注:此時虛擬VIP地址都已經在lb-02機器上了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM