通过Keepalived实现NginxHA高可用

摘 要

Keepalived是由C语言编写,目标是基于Linux为应用提供简单而又强大的负载均衡和高可用的服务。

概述

随着互联网井喷式发展,单节点服务已经不能满足并发需求,通常利用nginx反向代理来实现集群部署以此解决并发需求(nginx负载均衡实现)。此时虽然保证了应用的集群化和高容灾性,但nginx却单节点运行,这极大的为系统宕机埋下伏笔。为此我们必须来采用一主一备或一主N备的方式来保证nginx的运行,高可用(HA- High Availability)的解决方案很多,本文以Keepalived来进行讲解。

关于Keepalived

Keepalived是由C语言编写,目标是基于Linux为应用提供简单而又强大的负载均衡和高可用的服务。负载均衡是依赖于广泛使用的Linux虚拟服务器(IPVS)内核模块提供的第四层负载均衡。而高可用是通过VRRP协议实现。注:本文暂只针对高可用来讲解。

架构说明

安装Keepalived

#下载keepalived
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
#解压keepalived
ar zxvf keepalived-1.2.7.tar.gz
#进入keepalived目录
cd keepalived-1.2.7
#配置并检查源码
./configure --prefix=/
#编译
make
#安装
make install

配置Keepalived

配置中的state MASTER决定了节点为主节点 priority决定了优先级,比如在有多个备用节点的时候,主节点故障后优先级值大的接管。 主节点的配置如下:

#校验脚本
vrrp_script chk_nginx {
#  script "killall -0 nginx"
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    weight -5
    fall 3
    rise 2
}
#添加需要设置的ip
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
#自身机器所在ip
mcast_src_ip    192.168.155.1
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
#虚拟ip,对外公开
    virtual_ipaddress {
        192.168.155.12
    }
#执行校验函数
 track_script {
       chk_nginx
    }
}

校验脚本如下,意思是判断nginx进程是否存在,如果不存在则尝试启动。如果不能启动将退出keepalived服务,由其他服务器接管。接管的依据依靠priority 的值来决定,哪个节点值最大,则有哪个来接管。

#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
    /opt/nginx/sbin/nginx
   sleep 2
    counter=$(ps -C nginx --no-heading|wc -l)
 if [ "${counter}" = "0" ]; then
        /etc/init.d/keepalived stop
    fi
fi

配置完成后,将两个文件copy到其他keepalived节点。并将priority设置合理。这样我们的nginx高可用就已经完成啦... ...

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算D1net

Docker发布集群工具SwarmKit

最近Docker公司开源了Docker集群管理和容器编排工具SwarmKit,其主要功能包括节点发现、基于raft算法的一致性和任务调度等。基本概念服务器上运行...

3426
来自专栏Jed的技术阶梯

zookeeper-3.4.10的安装配置

leader:能接收所有的读写请求,也可以处理所有的读写请求,而且整个集群中的所有写数据请求都是由leader进行处理 follower:能接收所有的读写请求...

1204
来自专栏大数据和云计算技术

Yarn【label-based scheduling】实战总结(一)

1.1 Label-based scheduling介绍 故名思议,Label based scheduling是一种调度策略,就像priority-based...

3915
来自专栏我的博客

负载均衡知识汇总

一、DNS轮询 1.实现 DNS配置多个IP域名解析(A记录) 2.优点 部署简单 3.缺点 非高可用(健康监测需人工干预) 会话状态需要共享(ses...

38314
来自专栏运维小白

10.6 监控io性能

监控系统状态 iostat -x 磁盘使用 iotop 磁盘使用 查看磁盘使用情况 在运维工作中,除了查看CPU和内存之外,磁盘的io也是非常重要的一个指标 ...

1887
来自专栏yl 成长笔记

消息队列的使用 RabbitMQ(一): 安装与总体介绍

RabbitMQ 是一款开源且比较流行的消息中间件。但用起来还是比较麻烦,有人封装了一层, 这就是 EasyNetQ 。

642
来自专栏决胜机器学习

RabbitMQ(四) ——路由

RabbitMQ(四)——路由 (原创内容,转载请注明来源,谢谢) 一、概述 路由模式(routing)是交换机不将消息广播到全部的队列中,而是采用交换机的另一...

3439
来自专栏智能合约

剖析Redis持久化之RDB方式

1823
来自专栏程序猿DD

Spring Cloud构建微服务架构:消息驱动的微服务(消费分区)【Dalston版】

通过上一篇《消息驱动的微服务(消费组)》的学习,我们已经能够在多实例环境下,保证同一消息只被一个消费者实例进行接收和处理。但是,对于一些特殊场景,除了要保证单一...

3204
来自专栏Hadoop实操

如何在CDH集群中部署Presto

3322

扫码关注云+社区