Nginx+keepalived实现七层的负载均衡
1.keepalived VRRP 介绍
keepalived是什么?
keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
keepalived工作原理
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议:可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
脑裂 split barin:
Keepalived的BACKUP主机在收到不MASTER主机报文后就会切换成为master,如果是它们之间的通信线路出现问题,无法接收到彼此的组播通知,但是两个节点实际都处于正常工作状态,这时两个节点均为master强行绑定虚拟IP,导致不可预料的后果,这就是脑裂。
关于脑裂问题的解决方法:
- 添加更多的检测手段,比如冗余的心跳线(两块网卡做健康监测),ping对方等等。尽量减少"裂脑"发生机会。(指标不治本,只是提高了检测到的概率);
- 设置仲裁机制。两方都不可靠,那就依赖第三方。比如启用共享磁盘锁,ping网关等。(针对不同的手段还需具体分析);
- 爆头,将master停掉。然后检查机器之间的防火墙。网络之间的通信。
2.Nginx+keepalived实现七层的负载均衡
通过Nginx的upstream实现负载均衡
proxy-master: 192.168.134.165
proxy-slave: 192.168.134.166
real-server1: 192.168.134.163
real-server2: 192.168.134.164
VIP 192.168.1345.160
2.1准备工作
- 关闭四台机器上的防火墙和selinux
systemctl stop firewalld
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux //关闭selinux,重启生效
- 在四台机器上安装nginx
[root@proxy-master ~]# cd /etc/yum.repos.d/
[root@proxy-master yum.repos.d]# vim nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
[root@proxy-master ~]# yum install yum-utils -y
[root@proxy-master ~]# yum install nginx -y
[root@proxy-master ~]# systemctl start nginx
2.2两台服务器做代理
proxy-master:192.168.134.165和proxy-slave:192.168.134.166做代理。
在两台代理机器上都配置:
[root@master ~]# vim /etc/nginx/conf.d/default.confupstream aren {server 192.168.134.163:80 weight=1 max_fails=3 fail_timeout=20s;server 192.168.134.164:80 weight=1 max_fails=3 fail_timeout=20s;}server {listen 80; root /usr/share/nginx/html;location /{proxy_pass http://aren;proxy_set_header Host $host:$proxy_port;proxy_set_header X-Forwarded-For $remote_addr;
}[root@master ~]# nginx -s reload
2.3在两台Keepalived实现调度器HA
注:主/备调度器均能够实现正常调度
1. 主/备调度器安装软件
主:
[root@proxy-master ~]# yum install -y keepalived
[root@proxy-slave ~]# yum install -y keepalived
[root@proxy-master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak ##备份! Configuration File for keepalivedglobal_defs {router_id directory1
}vrrp_instance VI_1 {state MASTER #定义为主interface ens33 #VIP绑定接口virtual_router_id 80 #整个集群的调度器一致 priority 100advert_int 1authentication {auth_type PASSauth_pass 123}virtual_ipaddress {192.168.134.160/24 #VIP}
}
备:
[root@proxy-slave ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@proxy-slave ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {router_id directory2 #
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 80priority 50 #back的优先级为50 (小于master)advert_int 1authentication {auth_type PASSauth_pass 123}virtual_ipaddress {192.168.134.160/24}
}
此时可以看到VIP在master上:

2.4在real-server上写入测试页面
[root@server03 ~]# echo "lvs-RS1" > /usr/share/nginx/html/index.html
[root@server03 ~]# systemctl start nginx[root@server04 ~]# echo "lvs-RS2" > /usr/share/nginx/html/index.html
[root@server04 ~]# systemctl start nginx
2.5测试
- 当我们关闭master上的keepalived可以发现VIP会转移到slave上,这就实现了高可用(当master挂掉后slave会顶替master继续提供服务)
##关闭master的nginx 和 keepalived
[root@master ~]# systemctl stop keepalived
- 查看slave,可以发现VIP在slave上。

- 访问VIP(192.168.134.160)可以访问到。

3.解决nginx故障
- 可以解决心跳故障keepalived但不能解决Nginx服务故障。这是我们要添加对nginx健康检查。(两台都设置)
思路:
让Keepalived以一定时间间隔执行一个外部脚本,脚本的功能是当Nginx失败,则关闭本机的Keepalived
[root@proxy-master ~]# vim /etc/keepalived/check_nginx_status.sh
#!/bin/bash
/usr/bin/curl -I http://localhost &>/dev/null
if [ $? -ne 0 ];then
# /etc/init.d/keepalived stopsystemctl stop keepalived
fi
- keepalived使用script
! Configuration File for keepalivedglobal_defs {router_id directory1
}vrrp_script check {script "/etc/keepalived/check-nginx.sh"interval 5 #每5秒检测一次
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 80priority 100advert_int 1authentication {auth_type PASSauth_pass 123}virtual_ipaddress {192.168.134.160/24}track_script {check}}
- 测试
关闭master上的nginx服务,过5秒后会检测到nginx挂掉,随后会关闭master上的keepalived;并且VIP会转移到slave上面,让slave继续提供服务。
master:

slave:

相关文章:
Nginx+keepalived实现七层的负载均衡
1.keepalived VRRP 介绍 keepalived是什么? keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。 keepalived工作原理 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol&…...
至少在两个数组中出现的值
给你三个整数数组 nums1、nums2 和 nums3 ,请你构造并返回一个 元素各不相同的 数组,且由 至少 在 两个 数组中出现的所有值组成。数组中的元素可以按 任意 顺序排列。 示例 1: 输入:nums1 [1,1,3,2], nums2 [2,3], nums3 [3]…...
子女关于骨灰发生争议,骨灰该如何安置?
亲属去世后,争房产、争车辆、争存款的事情不少,但争骨灰却是稀罕事儿。近日,江苏省无锡市梁溪区人民法院审结了一起人格权案件,马某与继母因父亲老马骨灰安葬引发的纷争,历经2年多终于落幕。 老马与前妻离婚后&…...
android隐藏输入法的一些尝试,最后一个可行
一、背景: 基于android开发自己的输入法app,用户需要手动收起输入法 二、准备工作: 定义类 public class CustIMS extends InputMethodService {} 和 xml声明三、尝试验证: 1、CustIMS.hideWindow(); 结论:这个在…...
【go-zero】go-zero 脚手架 simple-admin 第一章:通过goctls生成rpc整个项目 | go-zero整合 ENT数据库orm框架
往期回顾 【simple-admin 开篇:安装 了解 goctls】https://ctraplatform.blog.csdn.net/article/details/133988572 本章内容 往期回顾一、simple-admin 创建rpc项目实战1、创建git仓库1.1、创建任意git仓库1.2、克隆到本地2、创建RPC项目2.1、goctls 安装 rpc项目2.2、复制项…...
Ubuntu 使用 nginx 搭建 https 文件服务器
Ubuntu 使用 nginx 搭建 https 文件服务器 搭建步骤安装 nginx生成证书修改 config重启 nginx 搭建步骤 安装 nginx生成证书修改 config重启 nginx 安装 nginx apt 安装: sudo apt-get install nginx生成证书 使用 openssl 生成证书: 到对应的路径…...
团队表 -多级团队设计
团队表 -多级团队设计 user_team团队表 ,如果存在子团队 1.我们可以通过每一个团队字段加一个parentid (相当于一对多的关系) 2.还可以设置一个字段CodingNum,比如这样: //系统为了管理查询团队自动生成的有序编号 可以使用3位数代表一个…...
LeetCode每日一题——2103. Rings and Rods
文章目录 一、题目二、题解 一、题目 There are n rings and each ring is either red, green, or blue. The rings are distributed across ten rods labeled from 0 to 9. You are given a string rings of length 2n that describes the n rings that are placed onto the…...
ant-design-vue form表单自定义校验规则
<a-form-itemlabel"市场价"class"status-barcode"name"marketPrice":rules"[{ required: true, message: },{ validator: validateNumber },]"><a-inputshow-count:maxlength"10"v-model:value"formState.ma…...
软件工程:小组开发过程技术(VS VSS UNIX C++)
(注:这个东西是2007年写的,算是个缅怀,或是个吐槽。所有注都是本次发布新加的。) 简介 本文讲述完全没有软件工程经验的软件小组如何借助VS VSS等工具为UNIX开发C程序,实现在小组规模的初级开发过程。这不…...
算法----从字符串中移除星号
题目 给你一个包含若干星号 * 的字符串 s 。 在一步操作中,你可以: 选中 s 中的一个星号。 移除星号 左侧 最近的那个 非星号 字符,并移除该星号自身。 返回移除 所有 星号之后的字符串。 注意: 生成的输入保证总是可以执行题…...
JVS低代码表单引擎助你打造高效表单设计流程
在日常的设计表单过程中,常常会有需要录入一大段文字的场景,例如评论、留言、产品介绍、内容说明等场景,那么简单的文本框组件就不满足了,这里JVS提供了 两种描述类型的组件,多行文本框和富文本组件,如下图…...
运行项目报错error in ./node_modules/marked/lib/marked.umd.js
今天跑项目时发现一个报错,问题出在marked这个包,然后翻看package.json里面也没有这个包,全局搜索项目也没有这个包相关的信息,可它就是报错,索性直接把它给卸载发现还是报错 报错原因:包的版本太高 解决…...
内置对象和方法、前端基础之BOM和DOM
内置对象和方法 RegExp对象 // 定义正则表达式两种方式 var reg1 new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}"); var reg2 /^[a-zA-Z][a-zA-Z0-9]{5,9}$/;// 正则校验数据 reg1.test(jason666) reg2.test(jason666)/*第一个注意事项,正则表达式中不能有…...
内网穿透配置-Cpolar-Ngrok
文章目录 一、Cpolar1、cpolar软件的使用:(1)下载与安装(2)cpolar指定authtoken(3)获取临时域名(4)验证临时域名有效性 二、Ngrok1、配置内网穿透(1ÿ…...
Web前端自动化测试Cypress实践总结
本文主要首先主要介绍了什么是自动化测试,接着对常用的自动化测试框架进行了对比分析,最后,介绍了如果将自动化测试框架Cypress运用在项目中。 一、自动化测试概述 为了保障软件质量,并减少重复性的测试工作,自动化测…...
Nacos本地修改编译源码2.2.3
下载Nacos源码 由于github访问速度慢,所以在gitee上下载 git clone https://gitee.com/mirrors/Nacos.git切换2.2.3版本 git checkout 2.2.3或者直接下载2.2.3的源码 本地编译 源码导入idea,然后编译 mvn -Dmaven.test.skiptrue -Drat.skiptrue c…...
邦芒攻略:提升职场核心竞争力的7点建议
如何提高职场的核心竞争力,职场是由职场定位,以及竞争,合作,等各种关系构建起来的一个无形的圈子,职场一直以来竞争激烈,那么,该如何提高职场的核心竞争力? 1、首先要保持学习…...
Android 如何在Android studio中快速创建raw和assets文件夹
一 方案 1. 创建raw文件夹 切成project浏览模式——>找到res文件粘贴要放入raw文件夹下的文件。 当然此时raw文件还没有,直接在右侧输入框中出现的路径~\res后面加上\raw即可。 2. 创建assets文件夹 同理在main文件夹下粘贴要放入assets文件夹的文件࿰…...
功率放大器功能及用途介绍
功率放大器是一种用于将输入信号的电压放大到更高水平的电子设备。它在各个领域中发挥着重要作用,包括音频、通信、测量和控制等应用。下面Aigtek安泰电子将详细介绍功率放大器的功能及其主要用途。 图:ATA-3000系列功率放大器 功率放大器的功能介绍&…...
【ElevenLabs福建话语音落地实战】:20年语音AI专家亲授3大避坑指南与本地化部署全流程
更多请点击: https://codechina.net 第一章:ElevenLabs福建话语音落地的行业价值与技术定位 福建话(闽南语泉州/厦门腔)作为联合国教科文组织认定的“严重濒危语言”,其语音合成能力的工程化落地,已超越单…...
PHP方案 swoole++io_uring写一个案例
下面是一个完整的 Swoole io_uring 案例,涵盖 HTTP 服务器、协程文件 I/O 和并发请求三个场景。--- ns)环境要求 …...
告别繁琐点击:3大功能助你实现智能文档获取与自动化下载
告别繁琐点击:3大功能助你实现智能文档获取与自动化下载 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了…...
扁平化AI绘图黄金公式:sref 1280+--stylize 600+--v 6.2,为什么92%用户漏掉关键权重锚点?
更多请点击: https://codechina.net 第一章:扁平化AI绘图黄金公式的认知革命 传统AI绘图依赖复杂提示工程与多层参数调优,而“扁平化AI绘图黄金公式”颠覆了这一范式——它将生成逻辑压缩为三个可解释、可复用、可验证的核心要素:…...
Linux驱动开发实战:为I.MX6ULL编写一个DS18B20的字符设备驱动(从设备树到应用测试)
Linux驱动开发实战:I.MX6ULL平台DS18B20字符设备驱动全流程解析 在嵌入式Linux开发领域,能够完整实现一个符合内核规范的设备驱动是工程师的核心能力之一。本文将带您深入探索如何为I.MX6ULL处理器开发DS18B20温度传感器的标准字符设备驱动,…...
KMS_VL_ALL_AIO:Windows和Office永久激活终极指南
KMS_VL_ALL_AIO:Windows和Office永久激活终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活和Office软件授权问题烦恼吗?KMS_VL_ALL_AIO是一…...
如何快速实现碧蓝航线全自动托管:智能脚本Alas终极指南
如何快速实现碧蓝航线全自动托管:智能脚本Alas终极指南 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 还在为碧…...
北邮数电实验:用Verilog在FPGA上实现4位加法器,从全加器到数码管显示(附完整代码与管脚绑定)
北邮数电实验:从全加器到4位加法器的FPGA实现全流程解析 第一次接触FPGA上的数字电路实验时,看着开发板上密密麻麻的管脚和闪烁的LED,我完全不知道从何入手。直到亲手实现了一个4位加法器,才真正理解了数字系统设计的精髓——用硬…...
金属3D打印光束整形:两大路线正面PK
作为金属3D打印技术的最新发展,开展光束整形技术研究的企业越来越多,研发的进程也越来越深。3D打印技术参考注意到,国外由EOS引领该技术发展,同时还有Aconity3D和DMG Mori等行业领导者;在国内,铂力特、华曙…...
Node.js 流处理:高效处理大数据的艺术
Node.js 流处理:高效处理大数据的艺术 什么是流? 在 Node.js 中,流(Stream)是处理大量数据的抽象接口。它允许我们逐块读取或写入数据,而不需要一次性将全部数据加载到内存中。 为什么需要流? 想…...
