基于Keepalived实现Nginx负载均衡HA(web高可用集群)

意义


          在公司Web或某个API访问量巨大时,一个中心化服务器是难以维持巨大的访问量的。这时候我们需要对此服务器做一个高可用负载均衡。也就是web高可用集群。

一、 什么是负载均衡高可用

       为了防止服务器的宕机,我们需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。这时候我们就要用到keepalived

二、集群规划

规划

IP地址 主机名 角色  

192.168.220.128

master master,nginx
192.168.220.129 BACKUP BACKUP、nginx  

 三、安装

1.安装nginx

1.1 yum安装

yum install -y nginx

1.2 rpm安装nginx

1、添加源

  默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了Centos的源地址。因此可以如下执行命令添加源:

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

2、安装Nginx

  通过yum search nginx看看是否已经添加源成功。如果成功则执行下列命令安装Nginx。

sudo yum install -y nginx

3、启动Nginx并设置开机自动运行

sudo systemctl start nginx.service
sudo systemctl enable nginx.service

2.安装keepalived

1.yum install -y keepalived 

2.systemctl start keepalived

3.systemctl enble keepalived

四、配置

1. 配置主master(在master上执行)

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
 #  vrrp_garp_interval 0
 #  vrrp_gna_interval 0
}
vrrp_script check_ng {
    script "/etc/keepalived/check_ng.sh"
    interval 3
    weight -20
}   # 这里的大括号前面也不能有空格

vrrp_instance VI_1 {
    state MASTER # 标识为主服务
    interface ens32 #绑定虚拟机的IP
    virtual_router_id 51 # 虚拟路由id,和从机保持一致
    #mcast_src_ip 192.168.126.2  #本机ip
    priority 100 #权重,需要高于从机
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.220.99 #/32 brd 255.255.255.0 dev ens33 label ens33:vip #虚拟IP地址
#        192.168.200.17
#        192.168.200.18
    }
    track_script {
         check_ng
    }
}

2.配置备节点(在backup上执行)

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 dreamer1
#   vrrp_skip_check_adv_addr
#   vrrp_strict
#   vrrp_garp_interval 0
#   vrrp_gna_interval 0
}
vrrp_script check_ng {
    script "/etc/keepalived/check_ng.sh"
    interval 3
    weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens32
    virtual_router_id 51
    #mcast_src_ip 192.168.136.4 ## 本机 IP 地址 
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.220.99
        #192.168.200.17
        #192.168.200.18
    }
    track_script {
         check_ng ## 执行 Nginx 监控的服务
    }

3.添加nginx检测脚本

vim /etc/keepalived/check_ng.sh

#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
    systemctl restart nginx
    sleep 1
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
        killall keepalived
    fi
fi

ps:特别注意,很多人在keepalived配置中 脚本无法执行时因为三个原因:

1.脚本没执行权限   解决方案:chmod 777 ....sh

2.  vrrp_script check_ng {  (大括号前少了一个空格)
    
      }(大括号前多了一个空格)

3.脚本中sleep的时间大于了vrrp_script check_ng   中的interval时间。

五、测试

1.我们输入虚拟IP 访问web服务。

2.当我们kill掉主服务器中的nginx服务时,虚拟ip跑到了backup 中,并启动了服务、

3.当我们恢复主服务器中的服务时,虚拟IP跑回了master中,并启动了服务

到达以上效果代表测试成功、明日我们将基于keepalived搭建k8s高可用集群。 

发布了20 篇原创文章 · 获赞 0 · 访问量 3799

猜你喜欢

转载自blog.csdn.net/Laughing_G/article/details/103820853