通过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 条评论
登录 后参与评论

相关文章

来自专栏熊二哥

快速入门系列--WCF--06并发限流、可靠会话和队列服务

这部分将介绍一些相对深入的知识点,包括通过并发限流来保证服务的可用性,通过可靠会话机制保证会话信息的可靠性,通过队列服务来解耦客户端和服务端,提高系统的可服务数...

1877
来自专栏前端小吉米

HTTP2即未来

1603
来自专栏Java职业技术分享

如果你想搞懂“分布式锁”,必须要看这篇文章 ,看了很意外!

对于锁大家肯定不会陌生,在 Java 中 synchronized 关键字和 ReentrantLock 可重入锁在我们的代码中是经常见的,一般我们用其在多线程...

5993
来自专栏Java帮帮-微信公众号-技术文章全总结

Java并发学习1【面试+工作】

1898
来自专栏星汉技术

HBase工作原理

35211
来自专栏非典型程序猿

Golang任务队列machinery使用与源码剖析(一)

异步任务,是每一位开发者都遇到过的技术名词,在任何一个稍微复杂的后台系统中,异步任务总是无法避免的,而任务队列由于其松耦合、易扩展的特性,成为了实现异步任务的可...

73410
来自专栏大数据架构

深入浅出Zookeeper(二) 基于Zookeeper的分布式锁与领导选举

2226
来自专栏北京马哥教育

9 个使用前必须再三小心的 Linux 命令

Linux shell/terminal 命令非常强大,即使一个简单的命令就可能导致文件夹、文件或者路径文件夹等被删除。 在一些情况下,Linux 甚至不会询问...

3316
来自专栏KK的小酒馆

Android开发环境搭建Android应用界面开发

Jdk下载: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2...

962
来自专栏魏艾斯博客www.vpsss.net

WordPress 博客去除 category 的几种方法

WordPress 默认路径自带 category 目录,如果不去除最后文章网址会多一个/category/,为了去掉这个无用的路径,我们可以采取插件和代码的方...

613

扫码关注云+社区