keeaplived+nginx高可用配置

1、通过keeaplived使得nginx实现主备功能

1.1本试验采用四台主机,主机环境均为centos7,架构如下图所示

1.2主机配置如下表所示

名称

地址

端口

代理服务器(主)

10.1.60.114

80

代理服务器(备)

10.1.60.115

80

后端服务器1

10.1.60.80

8081

后端服务器2

10.1.60.81

8081

vip虚拟地址

10.1.60.116

公网服务

www.apex.com

1.3所有主机关闭防火墙(disable为移除防火墙命令)

systemctl stop firewalld

systemctl disable firewalld

1.4所有主机关闭selinux

setenforce 0

1.5通过yum命令在主备代理服务器上安装keepalived

yum -y install keepalived

1.6查看keepalived的配置文件位置

rpm -ql keepalived |grep conf

1.7对主节点keepalived配置文件进行如下配置

! Configuration File for keepalived

global_defs {
   script_user root     #配置vrrp_script项检测脚本,就必须增加此项与下面一项,不然会报错
   enable_script_security   #
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id nginx01     #主节点id需要与备节点id不一致
  #vrrp_skip_check_adv_addr
  #vrrp_strict
  #vrrp_garp_interval 0
  #vrrp_gna_interval 0
}

vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx.sh" #心跳执行的脚本,检查nginx是否存活
    interval 5 #脚本执行的间隔时间,需要比advert_int时间大,单位是s
}

vrrp_instance VI_1 {
    state MASTER    #指定实例初始状态,主节点配置为master
    interface ens160   #主机使用的网卡名称
    virtual_router_id 51  #设置VRID标记,需要和备节点的id一致,多个集群不能重复(0..255)
    priority 100   #优先级,主节点优先级需要比备节点高
    advert_int 1   #检查的时间间隔,默认1s
    authentication {
        auth_type PASS #认证方式,支持PASS和AH,官方建议使用PASS
        auth_pass 1111  #认证密码,备节点跟主节点一致
    }
    virtual_ipaddress {
        10.1.60.116  #虚拟ip地址,必须配置为没有使用的地址
    }
    track_script {
        check_nginx
    }
}

1.8对备节点keepalived配置文件进行如下配置

! Configuration File for keepalived

global_defs {
   script_user root  
   enable_script_security 
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id nginx02
  #vrrp_skip_check_adv_addr
  #vrrp_strict
  #vrrp_garp_interval 0
  #vrrp_gna_interval 0
}

vrrp_script check_nginx {
   script "/etc/keepalived/check_nginx.sh"
   interval 5 
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.1.60.116
    }
    track_script {
        check_nginx
    }
}

1.9check_nginx脚本为nginx的监测脚本,检测nginx是否存活去判断是否停用此设备的keepalived,来达到主备切换的目的,脚本如下所示

#!/bin/bash
nginx_nb=`netstat -lnpt|grep nginx|wc -l` #统计nginx调用的端口数目,wc -l为统计行数
nginx_nbb=`ps -ef|grep nginx|grep -v grep|grep -v check|wc -l`  #统计nginx进程数目,此命令也可作为判断nginx是否存活,grep -v 为剔除名字匹配的进程
if [ $nginx_nb -eq 0 ];then   #判断是否等于0,若等于0证明nginx挂掉了,若不等于0则nginx存活
   systemctl start nginx  #尝试启动nginx
   sleep 2   #休眠2s
   if [ $nginx_nbb == 0 ];then  #再次判断nginx是否存活
      systemctl stop keepalived   #停止keepalived服务
      #killall keepalived #杀掉所有关于keepalived的进程,需要额外安装psmisc插件
   fi
fi

1.10给检测脚本赋予执行权限

chmod +x /etc/keepalived/check_nginx.sh

1.11主备节点启动nginx服务与keepalived服务

systemctl start nginx

systemctl start keelived

1.12启动完成后,主节点ens160网卡下会有虚拟ip

1.13当主节点nginx节点出问题时,会自动停止keepalived,vip地址将切换到备节点上(此处编辑错误的nginx配置文件,重启nginx,使得nginx启动失败)

2、通过keeaplived使得nginx实现双主功能

2.1使用主备时,只有主节点nginx在接受请求,备节点nginx一直处于空闲状态,只有等主节点挂了,备节点才会接收请求,这就使得资源浪费,所以在主备的基础上升级为双主,使得两台nginx主机都能接收请求

2.2在以上主节点的配置文件末尾增加以下配置

vrrp_instance VI_2 {     #增加新的组名为VI_2
    state BACKUP         #节点改为BACKUP
    interface ens160
    virtual_router_id 52  #router_id改为52
    priority 90           #权重降为90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.1.60.117/24    #虚拟ip改为10.1.60.117
    }
}

2.3在以上备节点的配置文件末尾新增以下配置

vrrp_instance VI_2 {
    state MASTER
    interface ens160
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.1.60.117/24
    }
}

2.4主备节点重新启动keepalived服务

systemctl restart keepalived

2.5现主备节点都有一个虚拟ip地址,实现了双主功能

2.6两个节点中有其中一个节点nginx服务挂了,节点本身的虚拟ip会转到另一个节点上

当115节点nginx服务挂掉时

当114节点nginx服务挂掉时

2.7 114节点nginx配置(在生产上两个节点都指向同一个后端服务实现负载加高可用架构,通过防火墙去配置两个节点的虚拟ip映射到公网ip上,再通过公网ip绑定域名,防火墙的nat服务也有负载均衡功能)

upstream demo_server {
    server 10.1.60.80:8081;
    server 10.1.60.81:8081;
}
server {
    listen 80;
    server_name www.apex.com;
    location / {
        proxy_pass http://demo_server;
    }
}

2.8 115节点nginx配置

upstream demo_server {
    server 10.1.60.80:8081;
    server 10.1.60.81:8081;
}
server {
    listen 80;
    server_name www.apex.com;
    location / {
        proxy_pass http://demo_server;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值