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

相关文章

来自专栏IMWeb前端团队

react 的数据管理方案:redux 还是 mobx?

本文作者:IMWeb jerytang 原文出处:IMWeb社区 未经同意,禁止转载 mobx 简介 和 redux 类似,mobx 是一个数据管理库...

3347
来自专栏星汉技术

HBase工作原理

40311
来自专栏施炯的IoT开发专栏

Windows Mobile Device Emulator In-Depth--(2)

本文继上一篇Windows Mobile Device Emulator In-Depth--(1)。 5. Emulator's Configuration ...

18610
来自专栏草根专栏

用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)

这篇文章写的是使用mac(linux)/win10开发一个基于asp.net core 2.0 web api, angular 5, bootstrap 4,...

3825
来自专栏安恒网络空间安全讲武堂

一种 Au3 远控木马变种样本分析

一种 Au3 远控木马变种样本分析 0x01 Au3 简介 AutoIt3 (简称 Au3)是一种能够在Windows GUI 或 DOS 上实现一系列自动化...

3117
来自专栏pangguoming

ubuntu 64位android项目报错的解决方案,打开64位 Ubuntu 的32位支持功能

ubuntu的64位下的android环境,说实话,还真得费点精力了,解决一个问题,又出来一个新问题。 小编昨天刚好不容易将android的环境搭建好了,这不,...

2775
来自专栏枕边书

PHP 调用 Go 服务的正确方式 - Unix Domain Sockets

问题 可能是由于经验太少,工作中经常会遇到问题,探究和解决问题的过程总想记录一下,所以我写博客经常是问题驱动,首先介绍一下今天要解决的问题: 服务耦合 我们在开...

31511
来自专栏前端小吉米

HTTP2即未来

1763
来自专栏枕边书

网页实时聊天之PHP实现websocket

前言 websocket 作为 HTML5 里一个新的特性一直很受人关注,因为它真的非常酷,打破了 http “请求-响应”的常规思维,实现了服务器向客户端主动...

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

day03.集群部署zookeeper【大数据教程】

day03.集群部署zookeeper【大数据教程】 一、Nginx/keepalived/lvs的介绍 1. nginx 1.1. nginx简介 Ngin...

4658

扫码关注云+社区