0

0

keepalived结合nginx怎么实现高可用

WBOY

WBOY

发布时间:2023-05-15 21:07:12

|

1484人浏览过

|

来源于亿速云

转载

1.简介

keepalived 是一个基于vrrp协议来实现的lvs服务高可用方案,可以利用其来避免单点故障。一个lvs服务会有2台服务器运行keepalived,一台为主服务器(master),一台为备份服务器(backup),但是对外表现为一个虚拟ip,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟ip,继续提供服务,从而保证了高可用性。keepalived是vrrp的完美实现,因此在介绍keepalived之前,先介绍一下vrrp的原理。

1.vrrp 协议简介

在现实的网络环境中,两台需要通信的主机大多数情况下并没有直接的物理连接。对于这样的情况,它们之间路由怎样选择?主机如何选定到达目的主机的下一跳路由,这个问题通常的解决方法有二种:

  1. 在主机上使用动态路由协议(rip、ospf等)

  2. 在主机上配置静态路由

很明显,在主机上配置动态路由是非常不切实际的,因为管理、维护成本以及是否支持等诸多问题。配置静态路由就变得十分流行,但路由器(或者说默认网关default gateway)却经常成为单点故障。vrrp的目的就是为了解决静态路由单点故障问题,vrrp通过一竞选(election)协议来动态的将路由任务交给lan中虚拟路由器中的某台vrrp路由器。

2.vrrp 工作机制

在一个vrrp虚拟路由器中,有多台物理的vrrp路由器,但是这多台的物理的机器并不能同时工作,而是由一台称为master的负责路由工作,其它的都是backup,master并非一成不变,vrrp让每个vrrp路由器参与竞选,最终获胜的就是master。master拥有一些特权,比如,拥有虚拟路由器的ip地址,我们的主机就是用这个ip地址作为静态路由的。拥有特权的master要负责转发发送给网关地址的包和响应arp请求。

vrrp通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过ip多播(multicast)包(多播地址224.0.0.18)形式发送的。虚拟路由器由vrid(范围0-255)和一组ip地址组成,对外表现为一个周知的mac地址。所以,在一个虚拟路由 器中,不管谁是master,对外都是相同的mac和ip(称之为vip)。客户端主机并不需要因为master的改变而修改自己的路由配置,对客户端来说,这种主从的切换是透明的。

在一个虚拟路由器中,只有作为master的vrrp路由器会一直发送vrrp通告信息(vrrpadvertisement message),backup不会抢占master,除非它的优先级(priority)更高。当master不可用时(backup收不到通告信息), 多台backup中优先级最高的这台会被抢占为master。这种抢占是非常快速的(

3.vrrp 工作流程

(1).初始化:   

路由器启动时,如果路由器的优先级是255(最高优先级,路由器拥有路由器地址),要发送vrrp通告信息,并发送广播arp信息通告路由器ip地址对应的mac地址为路由虚拟mac,设置通告信息定时器准备定时发送vrrp通告信息,转为master状态;否则进入backup状态,设置定时器检查定时检查是否收到master的通告信息。

(2).master

  1. 设置定时通告定时器;

  2. 用vrrp虚拟mac地址响应路由器ip地址的arp请求;

  3. 转发目的mac是vrrp虚拟mac的数据包;

  4. 如果是虚拟路由器ip的拥有者,将接受目的地址是虚拟路由器ip的数据包,否则丢弃;

  5. 当收到shutdown的事件时删除定时通告定时器,发送优先权级为0的通告包,转初始化状态;

  6. 如果定时通告定时器超时时,发送vrrp通告信息;

  7. 收到vrrp通告信息时,如果优先权为0,发送vrrp通告信息;否则判断数据的优先级是否高于本机,或相等而且实际ip地址大于本地实际ip,设置定时通告定时器,复位主机超时定时器,转backup状态;否则的话,丢弃该通告包;

(3).backup

  1. 设置主机超时定时器;

  2. 不能响应针对虚拟路由器ip的arp请求信息;

  3. 丢弃所有目的mac地址是虚拟路由器mac地址的数据包;

  4. 不接受目的是虚拟路由器ip的所有数据包;

  5. 当收到shutdown的事件时删除主机超时定时器,转初始化状态;

  6. 主机超时定时器超时的时候,发送vrrp通告信息,广播arp地址信息,转master状态;

  7. 收到vrrp通告信息时,如果优先权为0,表示进入master选举;否则判断数据的优先级是否高于本机,如果高的话承认master有效,复位主机超时定时器;否则的话,丢弃该通告包;

4.arp查询处理

当内部主机通过arp查询虚拟路由器ip地址对应的mac地址时,master路由器回复的mac地址为虚拟的vrrp的mac地址,而不是实际网卡的 mac地址,这样在路由器切换时让内网机器觉察不到;而在路由器重新启动时,不能主动发送本机网卡的实际mac地址。如果虚拟路由器开启的arp代理 (proxy_arp)功能,代理的arp回应也回应vrrp虚拟mac地址。

2.搭建环境

1.服务器1:10.63.0.154  安装keeplived并设置priority 优先值为100
2.服务器2:10.63.0.155  安装keeplived并设置priority 优先值为98
3.设置两台服务器对应的虚拟ip为:10.63.0.158

3.安装keepalived主节点

本次安装keepalived采用yum的模式,在服务器1上安装,主要操作步骤如下:

ECMall 繁体UFT-8
ECMall 繁体UFT-8

与 ECShop 不同的是,ECMall 是一个允许店铺加盟的多店系统。它不仅可以帮助众多成熟的网络社区实现社区电子商务还可以推进各种地域性、垂直性明显的门户网站的电子商务进程。 ECMall是一个根据融合了电子商务以及网络社区特色的产品,它不仅能使您的电子商务进程变得异常轻松,同时通过和康盛创想相关产品的结合还能进一步提高用户的活跃度以及黏性,从而促进用户的忠诚度。 ECMall 2.3.0 正

下载

1.安装ipvsadm,指令:yum install ipvsadm,安装完成后,可通过指令ipvsadm –v查看版本号。
2.安装keepalived,指令:yum install keepalived,安装完成后,可通过指令keepalived –v查看版本号。
3.创建/usr/local/nginx/nginx_check.sh脚本。脚本内容如下: 

#!/bin/bash
#判断nginx服务是否启动,如果不存在,调用nginx启用命令,并停止2秒,若#启动失败,杀掉keepalived
a=`ps -c nginx --no-header |wc -l`
if [ $a -eq 0 ];then 
 /usr/sbin/nginx
 sleep 2
 if [ `ps -c nginx --no-header |wc -l` -eq 0 ];then
  killall keepalived
 fi
fi

设置nginx_check.sh权限,设置命令为:chmod  777   /usr/local/nginx/nginx_check.sh

4.配置keepalived节点信息,默认配置文件为/etc/keepalived/keepalived.conf。keepalived.conf配置文件如下: 

! configuration file for keepalived

global_defs {
 router_id nginx_master154
}

vrrp_script chk_nginx {
 script "/usr/local/nginx/nginx_check.sh"
 interval 2
 weight 20
}
vrrp_instance vi_1 {
 state master
 interface eth0
 virtual_router_id 154
 mcast_src_ip 10.63.0.154
 priority 100
 nopreempt
 advert_int 1
 authentication {
  auth_type pass
  auth_pass 1111
 }
 track_script {
  chk_nginx
 }
 virtual_ipaddress {
  10.63.0.158
 }
}
}

配置文件关键参数说明:

  1.  router_id   //定义节点名称

  2. vrrp_script chk_nginx {    script "/etc/keepalived/nginx_check.sh"     interval 2     weight -20  }    //每隔2秒中去执行/etc/keepalived/nginx_check.sh脚本一次,这项检查从开始便一直进行,interval表示间隔时间,weight -20的意思是,脚本执行当判断异常时,把10.63.0.154这个节点的优先级降低20。

  3. state master   //表示该节点角色定义为master

  4. virtual_router_id 154  //定义虚拟的节点标识

  5. interface eth0   //定义网卡名称 查看服务器网卡名称可通过指令:ifconfig或者ip  a,如图:

keepalived结合nginx怎么实现高可用

以上配置文件完成后,启动nginx,启动keepalived,可测试nginx是否可被虚拟ip地址访问。启动keepalived指令:systemctl start keepalived.service,启动后可通过指令 systemctl status keepalived.service查看状态。利用虚拟ip访问nginx主界面截图如下:

keepalived结合nginx怎么实现高可用    

3.安装keepalived备用节点

 在服务器2上面安装keepalived的方法和服务器1完全一样,在keepalived.conf配置文件中只需修改三个地方:

  1. interface eth0   //定义网卡名称 查看服务器2的网卡 如网卡名称为 eno24 ,则定义为:interface eno24

  2. priority  //优先值设置为98

  3. mcast_src_ip 10.63.0.155

两台服务器上面的keepalived安装成功后,通过虚拟ip10.63.0.158调用测试,发现始终是主节点的页面,不会调用备用节点的页面。设置把服务器1上面的keepalived关闭后,再次调用,会出现备用节点的主界面,如下图:

keepalived结合nginx怎么实现高可用    

4.linux服务管理工具systemctl

linux中,有service和chkconfig两个命令管理服务。systemctl 是管理服务的主要工具, 它整合了chkconfig 与 service功能于一体。(可以通过该命令管理yum安装软件,同时设置是否开机启动)

  1. systemctl is-enabled servicename.service #查询服务是否开机启动

  2. systemctl enable *.service #开机运行服务

  3. systemctl disable *.service #取消开机运行

  4. systemctl start *.service #启动服务

  5. systemctl stop *.service #停止服务

  6. systemctl restart *.service #重启服务

  7. systemctl reload *.service #重新加载服务配置文件

  8. systemctl status *.service #查询服务运行状态

  9. systemctl --failed #显示启动失败的服务

注:*代表某个服务的名字,如http的服务名为httpd

例如在centos 7 上安装http

[root@centos7 ~]# yum -y install httpd

启动服务(等同于service httpd start)  systemctl start httpd.service
停止服务(等同于service httpd stop)  systemctl stop httpd.service
重启服务(等同于service httpd restart) systemctl restart httpd.service
查看服务是否运行(等同于service httpd status) systemctl status httpd.service 开机自启动服务(等同于chkconfig httpd on)  systemctl enable httpd.service
开机时禁用服务(等同于chkconfig httpd on) systemctl disable httpd.service

ps -ef | grep nginx #查看服务进程

#非systemctl配置开机启动:chmod +x /etc/rc.d/rc.local
#打开rc.localvi /etc/rc.local
#加入启动脚本其中路径一定要用全路径如:/usr/local/nginx/sbin/nginx

相关文章

keep
keep

Keep是一款健身安排,无论是想减肥塑形或增肌,还是寻找健身跑步瑜伽计步等训练计划,你可以随时随地选择课程进行训练!权威教练视频教学,健身干货自由分享!有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

97

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

223

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

458

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

169

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

246

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

34

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

nginx浅谈
nginx浅谈

共15课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号