Centos7.2下基于Nginx+Keepalived搭建高可用负载均衡(一.基于Keepalived搭建HA体系)

说明

本文只为方便往后查阅,不对一些概念再作赘述,网上都有不少明确的解释,也请你们先了解相关概念.html

两台搭建HA的服务器是华为云上的ECS(不要忘记开通VPC,保证咱们的服务器都处在一个内网环境),因为华为云每台机器只能绑定一个私有的浮动IP(VIP),因此本次示例只能实现一主一备(Master-Backup).nginx

环境:centos

Server1:192.168.0.70bash

Server2:192.168.0.71服务器

       VIP:192.168.0.10负载均衡

安装Keepalived(两台服务器步骤相同,只有细微的配置差异)

建立etc下的keepalived目录,编辑配置文件curl

yum -y install keepalived
mkdir /etc/keepalived
vi /etc/keepalived/keepalived.conf

配置文件内容以下测试

global_defs {
   notification_email {
     localhost@163.com
   }
   notification_email_from Keepalived@localhost
   smtp_server 163@smtp.com
   smtp_connect_timeout 30
   router_id 192.168.0.70
}
#配置vrrp_script,主要用于健康检查,以及检查失败后执行的动做。
vrrp_script chk_nginx {
#健康检查脚本,当脚本返回值不为0时认为失败
    script "/etc/keepalived/ck_ng.sh"
#检查频率,如下配置每2秒检查1次
    interval 2
#当检查失败后,将vrrp_instance的priority减少5
    weight -5
#连续监测失败3次,才认为真的健康检查失败。并调整优先级
    fall 3
#连续监测2次成功,就认为成功。但不调整优先级
    rise 2
}


#定义对外提供服务的VIP vrrp_instance配置
vrrp_instance VI_1 {
#指定vrrp_instance的初始状态,是MASTER仍是BackUP主要仍是看优先级。
    state MASTER
#指定vrrp_instance绑定的网卡,最终会经过指定的网卡宣告VIP
    interface eth0
#发送心跳包的源IP,可以使用绑定的网卡IP,也可使用本服务器上的其余IP
    mcast_src_ip 192.168.0.70
#至关于VRID,用于在一个网内区分组播,须要组播域内内惟一。
    virtual_router_id 55
#本机的优先级,VRID相同的机器中,优先级最高的会被选举为MASTER
    priority 100
#心跳间隔,下面配置,MASTER会每隔1秒发送一个报文高职组内其余机器,本身还活着。
    advert_int 1
#定义主从的验证方式以及密码,通常使用PASS(最长8位,超过了只会识别前8位做为密码)
    authentication {
        auth_type PASS
        auth_pass 123456
    }
#VIP
    virtual_ipaddress {
    192.168.0.10/24
        }
#本vrrp_instance所引用的脚本配置,名称就是vrrp_script 定义的容器名
  track_script {
       chk_nginx
    }
#状态切换,使用上述配置发送邮件通知
  smtp_alert
}

BACKUP服务器的配置须要几处修改网站

state MASTER改成  state BACKUP
mcast_src_ip 192.168.0.70改成backup服务器实际的IP mcast_src_ip 192.168.0.71
priority 100改成priority 99

添加Nginx监控脚本,监控Nginx的运行状态,若是发现异常并不能重启成功则关闭Keepalived,让VIP漂移到备份服务器.url

vi /etc/keepalived/ck_ng.sh

配置内容以下

#!/bin/bash
#检查nginx进程是否存在
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
#尝试启动一次nginx,中止5秒后再次检测
    service nginx start
    sleep 5
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
#若是启动没成功,就杀掉keepalive触发主备切换
        service keepalived stop
    fi
fi

增长监控脚本的执行权限,设置keepalived开机启动

chmod +x /etc/keepalived/ck_ng.sh
systemctl enable keepalived.service

安装Nginx

这里Nginx当作Server使用,方便查看VIP漂移后的结果

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum -y install nginx

设置Nginx开机启动

systemctl enable nginx.service

启动Nginx

service nginx start

访问本机查看nginx是否正常

 curl -i localhost

修改nginx的默认启动页,标识当前主机的IP地址

vi /usr/share/nginx/html/index.html

在Welcome to nginx!后加上IP地址192.168.0.70,保存后再次访问本机查看是否已经更改.另外一台服务器是一样的步骤

华为云中一个很重要的配置

登陆华为云,进入到管理控制台,进入云服务器的详情页面(若是你使用的是华为云ECS的话,其余云服务器提供商不晓得是否也是这样)

点击网卡选项,点击管理私有IP地址,添加VIP192.168.0.10(注意两台服务器都要配置!)

VIP漂移测试

启动Keepalived

service keepalived start

 curl访问VIP

curl -i 192.168.0.10

此时返回的为主服务器的nginx默认页面

重启主服务器或中止Keepalived服务

reboot

service keepalived stop

在另外一台服务器上访问VIP

curl -i 192.168.0.10

这个时候能够看到返回的内容已经变为备份服务器的nginx默认页192.168.0.71  说明VIP已经从主服务器漂移到了备份服务器

若是你使用reboot命令重启了服务器,过了一会以后再次访问VIP,发现又返回192.168.0.70的页面内容,由于主服务器已经重启完成,keepalived启动以后会从新把vip抢夺回来.

 

在测试过程当中,能够查看服务器是否已绑定上vip,使用命令

ip a

在eth0网卡上能够看到除了本机内网IP外,还有一个VIP

总结

若是某台服务器宕机或者keepalived和nginx出现问题,vip会自动漂移到另外一台备份服务器.

若是是本身测试练着玩的话,本机直接访问vip就能够了.若是应用到生产环境,还需有一个外网IP映射到VIP,而后申请一个域名解析到这个外网IP.

本文主要实现高可用,nginx只是当作一个静态网站的server.后面会基于此文记录nginx配置负载均衡.

相关文章
相关标签/搜索