热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Nginx(七):keepalived实现Nginx负载均衡服务器的双机高可用

前言之前咱们通过Nginx(六):NginxHTTP负载均衡和反向代理的配置与优化和Nginxtomcat组合实现高并发场景的动静分离和负载均衡方案这两篇文章了解了N

前言

之前咱们通过 Nginx(六):Nginx HTTP负载均衡和反向代理的配置与优化 和 Nginx+tomcat组合实现高并发场景的动静分离和负载均衡方案 这两篇文章了解了Nginx对高并发应用服务器tomcat的负载均衡优化,所有的请求都会先经过Nginx,Nginx就像是一座城池的城门,它的坚固耐用程度显然就变得极为重要。

为了防止一台Nginx服务器崩溃带来无法预估的灾难,我们就必须实现Nginx负载均衡服务器的双机高可用,显然用keepalived来实现是非常合适的。

环境准备

192.168.0.221:nginx + keepalived master
192.168.0.222:nginx + keepalived backup
192.168.0.223:tomcat
192.168.0.224:tomcat
虚拟ip(VIP):192.168.0.200,对外提供服务的ip,也可称作浮动ip

各个组件之间的关系图如下:

tomcat做应用服务器,Nginx实现负载均衡

在前言里已经说过,一定要先读读那两篇文章,然后才有下边的nginx高可用。

keepalived实现nginx高可用(HA)

keepalived的安装本文就不讲述了,具体keepalived知识参阅:Keepalived介绍以及在Linux系统下的安装与配置

keepalived作用其实在第一张图中已经有所体现,主要起到两个作用:实现VIP到本地ip的映射; 以及检测nginx状态。

master上的keepalived.conf内容如下:

global_defs {notification_email {997914490@qq.com}notification_email_from sns-lvs@gmail.comsmtp_server smtp.hysec.comsmtp_connection_timeout 30router_id nginx_master # 设置nginx master的id,在一个网络应该是唯一的
}
vrrp_script chk_http_port {script "/usr/local/src/check_nginx_pid.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行interval 2 #(检测脚本执行的间隔,单位是秒)weight 2
}
vrrp_instance VI_1 {state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备interface eth0 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)virtual_router_id 66 # 虚拟路由编号,主从要一直priority 100 # 优先级,数值越大,获取处理请求的优先级越高advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)authentication {auth_type PASSauth_pass 1111}track_script {chk_http_port #(调用检测脚本)}virtual_ipaddress {192.168.0.200 # 定义虚拟ip(VIP),可多设,每行一个}
}

backup上的keepalived.conf内容如下:

global_defs {notification_email {997914490@qq.com}notification_email_from sns-lvs@gmail.comsmtp_server smtp.hysec.comsmtp_connection_timeout 30router_id nginx_backup # 设置nginx backup的id,在一个网络应该是唯一的
}
vrrp_script chk_http_port {script "/usr/local/src/check_nginx_pid.sh"interval 2 #(检测脚本执行的间隔)weight 2
}
vrrp_instance VI_1 {state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备interface eth0 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)virtual_router_id 66 # 虚拟路由编号,主从要一直priority 99 # 优先级,数值越大,获取处理请求的优先级越高advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)authentication {auth_type PASSauth_pass 1111}track_script {chk_http_port #(调用检测脚本)}virtual_ipaddress {192.168.0.200 # 定义虚拟ip(VIP),可多设,每行一个}
}

nginx检测脚本check_nginx_pid.sh内容如下:

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx #重启nginxif [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行VIP转移killall keepalived fi
fi

启动keepalived

# service keepalived start

访问VIP,效果如下:

我们来看下keepalived的日志信息

master(192.168.0.221):

backup(192.168.0.222):

当我们把master上的keepalived停掉(模拟宕机),再来看下keepalived日志

原master(192.168.0.221):

原backup(192.168.0.222):

通过VIP可以正常访问服务,前端请求感受不到后端nginx的切换;重新唤醒原master(192.168.0.221)的测试这里就不进行了,大家自行测试。

注意点

  1、执行脚本时报错:/bin/sh^M: bad interpreter: 没有那个文件或目录 

    因为操作系统是windows,我在windows下编辑的脚本,所以有可能有不可见字符。脚本文件是DOS格式的, 即每一行的行尾以回车符和换行符来标识, 其ASCII码分别是0x0D, 0x0A。可以有很多种办法看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的

    解决方法:

      vim filename

      :set ff? #可以看到dos或unix的字样. 如果的确是dos格式的。

      :set ff=unix #把它强制为unix格式的, 然后存盘退出。

      再次运行脚本。

    从windows编辑文件再拷贝到linux时要特别注意,另外,脚本需要赋予可执行权限才能执行,可执行文件的一种直观表现就是文件本身呈绿色。

  2、负载均衡最好进行多浏览器测试,有些浏览器会缓存,会产生没有负载均衡的效果,例如我这次测试中谷歌浏览器就出现了类似的情况(还没搞清楚是否是缓存的原因),火狐,360、IE浏览器都是正常的负载均衡效果。

  3、请求走向

    访问虚拟IP(VIP),keepalived将请求映射到本地nginx,nginx将请求转发至tomcat,例如:http://192.168.0.200/myWeb/,被映射成http://192.168.0.221/myWeb/,端口是80,而221上nginx的端口正好是80;映射到nginx上后,nginx再进行请求的转发。

    keepalived服务器的ip情况

    

    VIP总会在keepalived服务器中的某一台上,也只会在其中的某一台上;VIP绑定的服务器上的nginx就是master,当VIP所在的服务器宕机了,keepalived会将VIP转移到backup上,并将backup提升为master。

  4、VIP也称浮动ip,是公网ip,与域名进行映射,对外提供服务; 其他ip一般而言都是内网ip, 外部是直接访问不了的

 



推荐阅读
  • Keepalived 提供了多种强大且灵活的后端健康检查机制,包括 HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK 和 MISC_CHECK 等多种检测方法。这些健康检查功能确保了高可用性环境中的服务稳定性和可靠性。通过合理配置这些检查方式,可以有效监测后端服务器的状态,及时发现并处理故障,从而提高系统的整体性能和可用性。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 通过使用CodeIgniter的SMTP库,可以高效地发送电子邮件。以Gmail为例,注册Gmail账号后,使用其发送邮件的优势在于不易被标记为垃圾邮件。然而,需要注意的是,服务器必须支持SSL协议才能成功发送。对于其他邮件服务提供商,只需调整SMTP主机地址和端口号即可实现邮件发送。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 本文介绍了一种利用PHP cURL库高效提取Sohu邮箱联系人列表的方法。通过设置错误报告级别、定义Cookie文件路径等关键步骤,确保了代码的稳定性和可靠性。经过实际测试,该方法在2012年3月24日被验证为有效,能够快速准确地获取联系人信息。此外,文章还提供了详细的代码示例和注意事项,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • Nginx不仅是一款轻量级的高性能Web服务器,还具备出色的负载均衡和反向代理功能。它支持复杂的正则匹配规则、动静内容分离以及灵活的URL重写功能,使得配置和管理更加便捷高效。此外,Nginx提供了多种负载均衡算法,如轮询、加权轮询、最少连接数等,以满足不同应用场景的需求。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 本文深入探讨了 Spring Cloud 微服务架构中 Gateway 组件的应用,详细介绍了其在实现高效请求路由与过滤方面的关键作用。文章首先从基本配置入手,逐步讲解了如何通过静态路由和动态路由实现灵活的服务访问控制。此外,还特别介绍了如何配置 Gateway 以自动从 Nacos 服务注册中心拉取服务列表,进一步提升系统的可维护性和扩展性。 ... [详细]
  • 如何在主服务器响应变慢时,自动切换至备用服务器地址以确保服务连续性
    在主服务器响应速度下降时,如何通过编程实现自动切换至备用服务器地址,以确保服务的连续性和稳定性。本文将介绍一种基于PHP和MySQL的解决方案,通过监测主服务器的响应时间,当检测到延迟过高时,自动切换至备用服务器接口,从而保障系统的高可用性。 ... [详细]
  • Spring框架下发送嵌入图片邮件时遇到的技术挑战与解决方案
    在Spring框架中发送嵌入图片的HTML格式邮件时,常遇到技术挑战。一种有效的解决方案是在邮件内容中直接使用``标签来引用图片。此外,还可以通过MimeMessageHelper类的addInline方法将图片作为内联资源添加到邮件中,确保图片能够正确显示。这种方法不仅提高了邮件的可读性,还增强了用户体验。 ... [详细]
  • Nginx入门指南:从零开始掌握基础配置与优化技巧
    Nginx入门指南:从零开始掌握基础配置与优化技巧 ... [详细]
  • 【Linux332】LVS的DR配置详解(ipvsadm+arptables)
    文章目录1.DR简 ... [详细]
  • 本文主要从TLS1.3的优势、部署和时间发展线介绍了这上篇文章回顾:浅谈DHCP协议 ... [详细]
  • 目录结构如下:Nginx基础知识NginxHTTP服务器的特色及优点Nginx的主要企业功能Nginx作为web服务器的主要应用场景包括:Nginx的安装安装环境 ... [详细]
  • 黄聪:MySQL主从复制配置,实现高效读写分离
    大型网站为应对高并发访问,不仅需要在前端实现分布式负载均衡,还需在数据业务和访问层采取有效措施。采用传统的数据结构已无法满足需求,通过配置MySQL主从复制,可实现高效的读写分离,显著提升系统性能和稳定性。 ... [详细]
author-avatar
玉米猴子_794
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有