Nginx+Keepalived搭建高可用负载均衡集群

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
简介:

Nginx+Keepalived搭建高可用负载均衡集群

 

一。 环境说明

前端双Nginx+keepalived,nginx反向代理到后端的tomcat集群实现负载均衡,Keepalived实现集群高可用.

  • 操作系统: Centos 6.6_X64

  • Nginx版本: nginx-1.9.5

  • Keepalived版本:keepalived-1.2.13  


结构:

  Keepalived+nginx-MASTER10.6.1.210
         Keepalived+nginx-BACKUP:  10.6.1.211
         VIP: 10.6.1.1.214
         Realsever:10.6.1.212,10.6.1.213   


wKiom1YXaVexlDmPAAGc7L6tONs011.jpg




二、安装

    前端两台主机分别安装nginx和keepalived。

1.    安装keepalived

Yum install keepalived –y

默认安装目录: /etc/keepalived/

配置文件:/etc/keepalived/keepalived.conf

 

2.    安装Nginx

1) 安装nginx所依赖的包.


yum install gcc gcc-c++ autoconf automake zlib zlib-developenssl openssl-devel pcre pcre-deve –y


2)Nginx官网下载安装包 (http://nginx.org/en/download.html)

此处版本选择nginx-1.9.5.tar.gz

 

3)编译安装

tar –zxvf nginx-1.9.5.tar.gz

cd nginx-1.9.5

./configure

Make && make install

完成

 

三、配置

1)前端两台主机nginx的配置完全一样

Vim /usr/local/nginx/conf/nginx.conf

upstream tomcat_8080 {

        server10.6.1.212:8080;

        server10.6.1.213:8080;

        ip_hash;

        }

 

 

    server {

        listen       80;

       server_name  test;

 

        #charsetkoi8-r;

 

       #access_log logs/host.access.log  main;

 

        location /{

        proxy_passhttp://tomcat_8080;

 

        }

 

 



2)nginx_master的keepalived配置

Vim /etc/keepalived/keepalived.conf

global_defs {

   notification_email {

     sxl_youcun@qq.com

   }

   notification_email_from sxl_youcun@qq.com

   smtp_server 127.0.0.1

#   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

vrrp_scriptcheck_nginx {

 #检查nginx状态的脚本,后面会介绍.同理mysql也可以这样做。

    script"/etc/keepalived/check_nginx.sh"

    # 执行间隔2秒

    interval 2

}

 

#VIP1

vrrp_instance VI_1{

    state BACKUP      #两台主机都是BACKUP

    interface eth0

#同一keepalived集群的virtual_router_id必须相同,默认51   

virtual_router_id 51

    priority 100  #主的优先级高

    advert_int 1

#不抢占:如果集群里已存在MASTER状态的主机,即使优先级高于MASTER也不抢占为MASTER。只在优先级高的主机上设置即可。

    nopreempt

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

#虚拟IP

        10.6.1.214

    }

    track_script {

        check_nginx

    }

}



3)nginx_backup的keepalived配置

global_defs {

   notification_email {

     sxl_youcun@qq.com

   }

   notification_email_from sxl_youcun@qq.com

   smtp_server 127.0.0.1

#   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

vrrp_scriptcheck_nginx {

    script"/etc/keepalived/check_nginx.sh"

    # 执行间隔2秒

    interval 2

}

 

#VIP1

vrrp_instance VI_1{

    state BACKUP

    interface eth0

    virtual_router_id 51

    priority 80

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        10.6.1.214

    }

    track_script {

        check_nginx

    }

}



4)防火墙设置

Iptables -I INPUT -d 224.0.0.18 -j ACCEPT

或者直接关闭防火墙service iptables stop



    VRRP报文是通过IP多播形式发送的,组播地址224.0.0.18是VRRP报文的目的地址。
    两个主机都是BACKUP,如果同时启动keepalived,VRRP协议通过竞选使优先级高的主机做为MASTER。如果防火墙没有允许VRRP报文通过的话,两个BACKUP都会成为MASTER,你会发现两个主机都启动了虚拟IP。
    5)nginx状态检查脚本check_nginx.sh

 Vim /etc/keepalived/check_nginx.sh

#!/bin/bash

#This script is used to check_nginx status for keepalived

KK=`ps -ef |grep "nginx: master process" | grep -v grep | wc -l`

if [ $KK -eq 0 ]

   then

echo "`date`nginx is dead,prepare to startnginx">>/usr/local/nginx/logs/nginx_status.log 2>&1

  /usr/local/nginx/sbin/nginx_start.sh

   sleep 5

   else

   echo "`date` nginx isOK">>/usr/local/nginx/logs/nginx_status.log 2>&1

fi



    6)开启keepalived的日志

    编辑/etc/sysconfig/keepalived:

1

KEEPALIVED_OPTIONS="-D -d -S 0"

编辑/etc/rsyslog.conf:

配置文件最后面加上下面一行

local0.*                /var/log/keepalived.log

 

重启rsyslog:

service rsyslog restart

按上面配置后,keepalived会把日志记录到/var/log/keepalived.log。

 

7)启动服务

设置nginx环境变量。

+++++++++++++++++++++++++++++++++++++++++++++

NGINX=/usr/local/nginx

PATH=$PATH:$HOME/bin:$NGINX/sbin

export NGINX PATH

++++++++++++++++++++++++++++++++++++++++++++++

 

启动nginx, 用脚本启动, 脚本如下:

+++++++++++++++++++++++++++++++++++++++++++

#!/bin/bash

. $HOME/.bash_profile

nohup /usr/local/nginx/sbin/nginx -c/usr/local/nginx/conf/nginx.conf >/dev/null 2>&1 &

+++++++++++++++++++++++++++++++++++++++++++++++++

启动keepalived

service keepalived start

 

    四、验证

1. nginx_master和nginx_slave同时启动keepalived,观察日志/var/log/keepalived.log,你会发现nginx_master抢占为MASTER,绑定了虚拟IP。

    nginx_master

wKioL1YXaXCgI9lbAAHsPyWvqjk146.jpg

 

    nginx_backup

wKiom1YXaVeTgMBBAAHBk9q8lfI272.jpg

    

2. 把nginx_master的keepalived服务停掉或者重启系统,同时不断的ping虚拟IP。会出现短暂的中断或者时延较大,虚拟IP会漂移到nginx_backup上面:

wKioL1YXaXCxy77QAAOP8_2_ROc480.jpg

    nginx_backup


wKiom1YXaaKgkyOmAAIv4SlmKVI118.jpg


注意观察在主备切换时nginx_backup日志keepalived.log的变化,如下:

VRRP_Instance(VI_1) Transition to MASTER STATE

VRRP_Instance(VI_1) Entering MASTER STATE

VRRP_Instance(VI_1) setting protocol VIPs.

VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 10.6.1.214

Netlink reflector reports IP 10.6.1.214 added

VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 10.6.1.214   

 

3. 最后把nginx_master的keepalived服务开启,虚拟IP并没有漂移回到nginx_master,这是因为nginx_master开启了不抢占模式,即使优先级高,也不会抢占MASTER。



本文转自pizibaidu 51CTO博客,原文链接:http://blog.51cto.com/pizibaidu/1701230,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
7月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
7月前
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
215 21
|
7月前
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
198 14
|
7月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
275 11
|
8月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
9月前
|
负载均衡 应用服务中间件 nginx
如何使用nginx实现负载均衡?
如何使用nginx实现负载均衡?
|
应用服务中间件 nginx
服务搭建篇(四) 搭建基于Nginx + keepalived的高可用服务
比如我这里虚拟IP+nginx端口是 : 192.168.154.10:80 , 我直接访问 , 出来的是192.168.154.134服务器上的nginx , 因为我刚刚做了区分 , 所以这个时候就可以知道访问的是哪个机器的Nginx , 然后我们把134的Nginx停掉 , 然后再次访问 , 仍然可以使用 , 此时 ,出现的135的页面 , 也就是访问的是192.168.154.135的Nginx
243 0
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
374 0
|
tengine 负载均衡 应用服务中间件
Nginx+Keepalived高可用集群部署详细文档
Nginx+Keepalived高可用集群部署详细文档
764 0
|
运维 负载均衡 监控
Nginx加Keepalived实现高可用
使用Nginx和Keepalived来实现高可用性的方案,对于确保关键服务的稳定性和可靠性来说是非常有效的。此配置涉及多个步骤,包括各个服务的安装、设置及测试,目标是在主服务器故障时能无缝切换,以确保服务的持续可用。正确的配置和充分的测试是实现高可用性的保证,这也要求管理员对这些工具和它们背后的原理有深入的了解。
486 1