CentOS7.7 部署 Keepalived+Nginx 高可用集羣

一、環境介紹

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1062.4.3.el7.x86_64 #1 SMP Wed Nov 13 23:58:53 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.7.1908 (Core)
[root@localhost ~]# 
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
[root@localhost ~]# 

二、拓撲圖

 

三、準備工作

  • 在nginx01、nginx02分別安裝nginx和keepalived並設置開機啓動
  • 在apache01、apache01分別安裝apache、並設置開機啓動

因爲我們只是學習測試,所以所有的服務都是用yum安裝的,安裝過程就不顯示了。大家自行解決,寫出來太丟人了。

四、配置nginx負載均衡

vim /etc/nginx/nginx.conf 

在http標籤中添加:

upstream myweb {
        server 192.168.1.3:80;
        server 192.168.1.4:80;
    }

在server標籤中的添加 :

 location / {
         proxy_pass http://myweb;
        }

配置完重啓nginx服務。

五、配置keepalived

在主nginx01服務器的配置

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr

#   vrrp_strict    #此處如果不註釋掉,則無法ping通VIP

   vrrp_garp_interval 0
   vrrp_gna_interval 0
}


vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 55	#此處和備用必須一致,但是和局域網中其他的keeplived集羣不能相同
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }


    virtual_ipaddress {
        192.168.1.10
    }
}

注意:vrrp_strict    #此處如果不註釋掉,則無法ping通VIP

以上是主nginx01服務器的配置,可以複製到nginx02

在nginx02上只需要修改以下幾個地方即可:

state BACKUP
interface ens33
priority 80

修改完畢後記得重啓keepalived服務 。

六、測試效果

1、效果1

  • nginx01服務器停止keepalived服務,5秒之後nginx02會接管。
  • nginx01服務器恢復keepalived服務,5秒之後nginx01會接管。
  • 中間有5-10秒的間隔。

2、效果2

  • 關閉nginx01服務器,5秒之後nginx02會接管。
  • 開啓nginx01服務器,5秒之後nginx01會接管。

3、效果3

  • 關閉nginx01服務器的nginx服務,nginx02不會接管,整個集羣宕機對外業務中斷。

原因:是我沒有添加檢測nginx存活的腳本。

原理:這種部署方式,在不添加腳本的情況下只能默認檢測keepalived服務,如果keepalived服務掛了,備用可以接管。但是心跳檢測也僅僅只是檢測keepalived服務,keepalived服務上面綁定了VIP地址,換句話說他僅僅檢測的是VIP是否能ping通。

如果是nginx01主服務器的nginx服務死了,備用nginx02服務器是不會接管的。必須利用腳本才能實現。因爲nginx服務雖然死了,但是keepalived服務沒死,也就意味着VIP可以ping通,所以他是不會切換的。

總結

因此利用這種部署方式,必須添加檢測nginx存活的腳本。

我這裏有兩個腳本,但是和本教程無關,大家可以參考。

這個是別人的腳本,執行了一下有錯誤。

#!/bin/bash

A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

當nginx進程不存在時,就幹掉keepalived進程。

#!/bin/bash
#當nginx進程不存在時,就幹掉keepalived

if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
 then
 killall keepalived
fi

 

注意問題:

keepalived.conf中vip配置好後,通過ip addr可以看到vip已經順利掛載,但是無法ping通,並且防火牆都已關閉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章