当前位置: 首页 > news >正文

LVS+Keepalived NGINX+Keepalived 高可用群集实战部署

Keepalived及其工作原理

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。

VRRP协议(虚拟路由冗余协议)

  • 是针对路由器的一种备份解决方案
  • 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
  • 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
  • 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

工作原理:

在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP(VIP),主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

一个合格的群集应该具备的特点:
1.负载均衡          用于提高群集的性能   LVS  Nginx  HAProxy  SLB  F5
2.健康检查(探针)  针对于调度器和节点服务器    Keepalived   Heartbeat
3.故障转移          通过VIP漂移实现主备切换     VRRP   脚本

健康检查(探针)常用的工作方式:

  1. 发送心跳消息 : vrrp报文    ping/pong
  2. TCP端口检查 :向目标主机的 IP:PORT 发起TCP连接请求,如果TCP连接三次握手成功则认为健康检查正常,否则认为健康检查异常
  3. HTTP URL检查::向目标主机的URL路径(比如http://IP:PORT/URI路径)发起 HTTP GET 请求方法。如果响应消息的状态码为 2XX 或 3XX,则认为健康检查正常           如果响应消息的状态码为 4XX 或 5XX,则认为健康检查异常

LVS+Keepalived 高可用群集部署

实验:配置

主DR 服务器:192.168.73.100
备DR 服务器:192.168.73.130
Web 服务器1:192.168.73.110
Web 服务器2:192.168.73.120
vip:192.168.73.15
nfs服务器 192.168.73.140

1.配置实验环境: 

systemctl stop firewalld 
systemctl disable firewalld
setenforce 0

2.配置两台web节点服务器

将nfs服务器的/share文件挂载再 /etc/share/nginx/html/zyz101目录中 

vim /etc/fstab192.168.73.140:/share  /usr/share/nginx/html/zyz101 nfs defaults,_netdev 0 0 mount -a

配置网卡文件

vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.73.15     #指向vip
NETMASK=255.255.255.255service network restart 或 systemctl restart network 

修改 /etc/sysctl.conf 文件

/etc/sysctl.conf 
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
sysctl -p #加载

设置临时路由

设置临时路由
route add -host 192.168.73.15  
或者
vim /etc/rc.local
/sbin/route add -host 192.168.73.15 dev lo:0
chmod +x /etc/rc.d/rc.local永久加载:
vim /etc/sysconfig/static-routes
any host 192.168.73.15 dev lo:0systemctl restart network  #重启网卡

3..配置负载调度器(主、备相同)

yum -y install ipvsadm keepalived   #安装keepalived
modprobe ip_vs     #开启模块
cat /proc/net/ip_vs   或者  lsmod | grep ip_vs   #查看模块开始配置keeplived
global_defs {						#定义全局参数
--10行--修改,邮件服务指向本地smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02router_id LVS_01后面四行vrrp开头的全部删掉

         主配置global_defs 全局参数如下

vrrp_instance VI_1 {				#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUPstate MASTER--21行--修改,指定承载vip地址的物理接口interface ens33--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	virtual_router_id 51--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90priority 100修改virtual_ipaddress {				#指定群集vip地址192.168.73.15}--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.73.15 80delay_loop 6					#健康检查的间隔时间(秒)lb_algo rr						#指定调度算法,轮询(rr)--39行--修改,指定群集工作模式,直接路由(DR)lb_kind DRpersistence_timeout 0			#连接保持时间(秒)protocol TCP					#应用服务采用的是 TCP协议--43行--修改,指定第一个Web节点的地址、端口real_server 192.168.80.110 80 {weight 1					#节点的权重--45行--删除,添加以下健康检查方式		TCP_CHECK {connect_port 80			#添加检查的目标端口connect_timeout 3		#添加连接超时(秒)nb_get_retry 3			#添加重试次数delay_before_retry 3	#添加重试间隔

然后再real_server 添加第二个web节点的地址和端口

再删除后面的多于选项

systemctl restart keepalived
ip a  查看虚拟网卡vip地址  只有主服务器上有vip地址
systemctl restart ipvsadm
ipvsadm -ln
#如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived

验证测试;

在客户端访问 http://192.168.73.15/zyz101/test.html 
再在主服务器关闭 keepalived 服务后再测试, systemctl stop keepalived

NGINX配合keepalived实现高可用负载均衡

实验配置

主DR 服务器:192.168.73.40
备DR 服务器:192.168.73.30
Web 服务器1:192.168.73.110
Web 服务器2:192.168.73.120
vip:192.168.73.15
nfs服务器 192.168.73.140

1.配置实验环境:

systemctl stop firewalld 
systemctl disable firewalld
setenforce 0

2.配置两台nginx服务器作为负载均衡的主备服务器

 vim /etc/nginx/nginx.conf 

 在event同层块配置stream 在stream块中配置upstream 

nginx -t 
syatemctl enable --now nginx

 安装keepalived

  yum install -y keepalived.x86_64 cd /etc/keepalived/lsvim nginx_check.sh  #编写脚本 确保nginx服务有没有开启 没有开启就关闭keepalivedchmod +x nginx_check.sh   #给脚本加权

如下: 

 修改keepalived主配置文件

vrrp_instance VI_1 {state MASTER            # 指定keepalived的角色,MASTER为主,BACKUP为备interface ens33         # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡virtual_router_id 66    # 虚拟路由编号,主从要一直priority 100            # 优先级,数值越大,获取处理请求的优先级越高advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)#授权访问authentication {auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信auth_pass 1111}track_script {nginx_check.sh            #(调用检测脚本)}virtual_ipaddress {192.168.73.15           # 定义虚拟ip(VIP),可多设,每行一个}
}#后面把配置lvs多余的删掉

启动keepalived和nginx 进行测试

脑裂故障

现象:主服务器和备服务器都同时拥有相同的VIP
原因:因为主服务器和备服务器的通信中断,导致备服务器无法收到主服务器发送的VRRP报文,备服务器误认为主服务器已经故障了并通过ip命令生成VIP
解决:关闭主服务器或备服务器其中一个的keepalived服务
预防:(1)如果是系统防火墙导致,则关闭防火墙或添加防火墙规则放通VRRP组播地址(224.0.0.18)的传输
          (2)如果是主备服务器之间的通信链路中断导致,则可以在主备服务器之间添加双链路通信
      (3)在主服务器使用脚本定时判断与备服务器通信链路是否中断,如果判断是主备服务器之间的链接中断则自行关闭主服务器上的keepalived服务


      (4)利用第三方应用或监控系统检测是否发生了脑裂故障现象,如果确认发生了脑裂故障则通过第三方应用或监控系统来关闭主服务器或备服务器其中一个的keepalived服务

相关文章:

LVS+Keepalived NGINX+Keepalived 高可用群集实战部署

Keepalived及其工作原理 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。 VRRP协议(虚拟路由冗余协议) 是针对路由器的一种备份解决方案由多台路由器组成一个热备组,通过共用的…...

Mybatis做批量操作

动态标签foreach,做过批量操作,但是foreach只能处理记录数不多的批量操作,数据量大了后,先不说效率,能不能成功操作都是问题,所以这里讲一讲Mybatis正确的批量操作方法: 在获取opensession对象…...

Python | 中心极限定理介绍及实现

统计学是数据科学项目的重要组成部分。每当我们想从数据集的样本中对数据集的总体进行任何推断,从数据集中收集信息,或者对数据集的参数进行任何假设时,我们都会使用统计工具。 中心极限定理 定义:中心极限定理,通俗…...

探索Napier:Kotlin Multiplatform的日志记录库

探索Napier:Kotlin Multiplatform的日志记录库 在现代软件开发中,日志记录是不可或缺的部分,它帮助开发者追踪应用的行为和调试问题。对于Kotlin Multiplatform项目而言,能够在多个平台上统一日志记录的方法显得尤为重要。Napier…...

MySQL基础——SQL语句

目录 1.SQL通用语法 2.SQL分类 3 DDL 3.1数据库操作 3.1.1查询 3.1.2创建 3.1.3删除 3.1.4使用 3.2表操作 3.2.1查询 3.2.2创建 3.2.3数据类型 3.2.4表修改(alter打头) 3.2.5表删除(drop/truncate打头) 3.3 DDL总结…...

比特币通用API服务

Bitcoin 通用API服务 exlectrs: API后台服务(Rust语言编写) https://github.com/Blockstream/electrs.git 使用electr作为后台的区块链浏览器:https://github.com/Blockstream/esplora.git https://github.com/Blockstream/electrs https://github.com/romanz/electrs/blo…...

Spock mock私有方法

mock私有方法 ‍ 被测试的方法是MiddleGroundAppListBO​类下的getPromptIdKeyAppPromptInfoMap方法 private Map<Long, AppPromptInfoModel> getPromptIdKeyAppPromptInfoMap(String cubeAppIdentity) {List<AppPromptInfoDO> promptByApp knowledgeCubeQueryR…...

网络协议四

一、云中网络 物理机的劣势&#xff1a; 1&#xff09;一旦需要扩容 CPU、内存、硬盘&#xff0c;都需要去机房手动弄&#xff0c;非常麻烦 2&#xff09;采购的机器往往动不动几百 G 的内存&#xff0c;而每个应用往往可能只需要 4 核 8G 3&#xff09;一台机器&#xff0c;…...

大数据入门实践一:mac安装Hadoop,Hbase,FLume

一、安装Hadoop 安装hadoop参考此文&#xff0c;关键点是安装JDK和Hadoop的配置&#xff0c;为避免引用文章变收费&#xff0c;我把关键信息摘录如下&#xff1a; jdk安装和配置就不说了(我本机安装了1.8/15/17/21&#xff0c;以17为主&#xff09;&#xff0c;hadoop安装过程…...

openGauss 6.0.0 一主二备集群安装及使用zcbus实现Oracle到openGauss的数据同步

一、前言 openGauss 6.0.0-RC1是openGauss 2024年3月发布的创新版本&#xff0c;该版本生命周期为0.5年。根据openGauss官网介绍&#xff0c;6.0.0-RC1与之前的版本特性功能保持兼容,另外&#xff0c;在和之前版本兼容的基础上增加了很多新功能&#xff0c;比如分区表性能优化…...

0118__C语言——float.h文件

C语言——float.h文件_c float.h-CSDN博客...

settings和toolchains.xml 区别用法配置

在 IntelliJ IDEA 中配置 Maven 项目时&#xff0c;settings.xml 和 toolchains.xml 的使用场景有所不同。以下是具体的使用情景和配置方法&#xff1a; 1. 使用 settings.xml 使用场景 全局或用户级别的配置&#xff1a;包括设置本地仓库位置、远程仓库、代理服务器、认证信…...

leetcode打卡#day43 携带研究材料(第六期模拟笔试)、416. 分割等和子集

携带研究材料&#xff08;第六期模拟笔试&#xff09; #include<iostream> #include<algorithm> #include<vector>using namespace std;int getMaxValue(vector<int>& weights, vector<int>& values, int n, int m) {vector<vector&…...

MPLS的配置

1、IP可达--- 使用路由协议全网可达 2、配置 MPLS ——LDP [r2]mpls lsr-id 2.2.2.2 必须先定义 mpls 的router-id&#xff0c;要为本地设备的真实ip地址&#xff0c;且邻居可达&#xff0c;因为该地址将用于建立 TCP 会话&#xff0c;建议使用环回地址 [r2]mpls 再开…...

【机器学习】机器学习与教育科技在个性化教学中的融合应用与性能优化新探索

文章目录 引言机器学习与教育科技的基本概念机器学习概述监督学习无监督学习强化学习 教育科技概述学生学习行为分析个性化学习路径推荐智能化教育评估 机器学习与教育科技的融合应用实时学习数据分析数据预处理特征工程 学生成绩预测与优化模型训练模型评估 个性化学习路径推荐…...

C++:十大排序

目录 时间复杂度分析 选择排序 引言 算法思想 动图展示 代码实现 (升序) 优化 代码实现 分析 冒泡排序 引言 算法思想 动图展示 代码实现 插入排序 引言 算法思想 动图展示 代码实现 计数排序 引言 算法思想 动图展示 代码实现 桶排序 引言 算法思…...

Python武器库开发-武器库篇之Mongodb未授权漏洞扫描器(五十六)

Python武器库开发-武器库篇之Mongodb未授权漏洞扫描器(五十六) MongoDB 未授权访问漏洞简介以及危害 MongoDB是一款非常受欢迎的开源NoSQL数据库&#xff0c;广泛应用于各种Web应用和移动应用中。然而&#xff0c;由于默认配置的不当或者管理员的疏忽&#xff0c;导致不少Mon…...

【论文速读,找找启发点】2024/6/16

ICME 2023 End-To-End Part-Level Action Parsing With Transformer 类似 DETR&#xff0c;通过 加 query的方式实现 端到端 ELAN: Enhancing Temporal Action Detection with Location Awareness 如何实现位置感知&#xff1f; > 重叠的卷积核&#xff1f; Do we really …...

canal监控mysql变化

目录 概述实践代码总结表创建插入一行数据更新一行数据删除一笔数据 概述 本文测试 canal 监控 mysql 表变化。canal 1.1.7 mysql 8.0.x 版本。 实践 代码 public static void main(String[] args) {// 创建一个 CanalConnector 连接器// username:字符串类型,Canal使用该用…...

MySQLWorkbench导出sql文件

MySQLWorkbench导出sql文件 前言效果图导出操作选择要导出的数据库遇到的问题解决问题 查看mysql路径 前言 在完成数据库搭建之后&#xff0c;需要为上线做准备&#xff0c;那么就需要导出数据库的建库sql了 本篇文章讲解的是mysql Workbench 导出数据建库脚本 效果图 导出操…...

不一样的SYSTEM APP(SYSTEM flag和system_prop区别)

1.问题引入 在Android开发中, 1)Framework中PackageManager扫包后,会把app归类为SYSTEM, SYSTEM_EXT, PRIVILEGED 类别. 2)同样的, SeAndroid也会把APP归类程platform_app, system_app, untrusted_app(甚至还有其他,mediaprovider,gmscore_app). flag SYSTEM和system_app我们…...

C++ 和 JAVA 位运算符

C 和 JAVA 位运算符...

项目进度和成本管理

1.如何正确标识出软件项目活动&#xff1f; 正确标识软件项目活动是项目管理中的一个重要步骤&#xff0c;它有助于确保项目的顺利进行和成功完成。以下是一些标识软件项目活动的步骤和建议&#xff1a; 项目范围定义&#xff1a;首先明确项目的目标和范围&#xff0c;这将帮助…...

Dorkish:一款针对OSINT和网络侦查任务的Chrome扩展

关于Dorkish Dorkish是一款功能强大的Chrome扩展工具&#xff0c;该工具可以为广大研究人员在执行OSINT和网络侦查任务期间提供强大帮助。 一般来说&#xff0c;广大研究人员在执行网络侦查或进行OSINT信息收集任务过程中&#xff0c;通常会使用到Google Dorking和Shodan&…...

树莓派4B_OpenCv学习笔记10:调整视频帧大小

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 今日学习一下如何降低视频帧像素 文章提供测试代码讲解…...

MySQL 保姆级教程(五):数据过滤

第 7 章 数据过滤 7.1 组合 WHERE 子句 MySQL 允许给出多个 WHERE 子句&#xff0c;这些子句可用用两种方式使用&#xff1a;AND 或 OR 操作符 7.1.1 AND 操作符 输入: SELECT server_cost.cost_name,server_cost.cost_value,server_cost.default_value FROM server_cost W…...

《全职猎人》

《全职猎人》 [1-2]是日本漫画家富坚义博的作品。 1999年版改编电视动画由日本动画公司负责动画制作&#xff0c;于1999年10月16日&#xff0d;2001年3月30日在富士电视台播出&#xff0c;该动画的故事至贪婪之岛篇章结束&#xff0c;全92话。 该作在富坚义博老师天马行空的想…...

Linux各目录的作用

Linux各目录的作用 目录作用~登录用户对应的目录.当前工作目录$PATH环境变量/根目录/boot启动Linux使用的文件&#xff0c;例如Linux内核&#xff0c;包括连接文件和镜像文件&#xff0c;&#xff08;删了就启动不了了&#xff09;/bin(/usr/bin,/usr/local/bin)Binary&#x…...

Windows Docker Desktop 安装 postgres

Docker Desktop安装 postgres 12.6 数据库 step docker pull postgres:12.6提前创建F:/D-dockerData/postgres-12.6/data 文件夹用于bind mountdocker run docker run --name postgres-12.6 \-e POSTGRES_PASSWORD123456 \-p 5432:5432 \-v F:/D-dockerData/postgres-12.6/d…...

C# OpenCvSharp Mat操作-创建Mat-构造函数

🌟 Mat类:图像与多维矩阵的魔法 ✨ Mat类是OpenCvSharp中用于表示图像和多维矩阵的核心类。它提供了多种构造函数来创建和初始化矩阵对象。下面我们逐一解释这些构造函数,并通过示例来说明它们的用法。📸 🚀 默认构造函数 Mat() 创建一个空的Mat对象。 Mat mat = …...

wordpress5.1.1版本汉化/百度一下首页手机版

↑关注 星标 &#xff0c;每天学Python新技能后台回复【大礼包】送你Python自学大礼来源&#xff1a;http://suo.im/5TVq0X自2018年被评选为编程语言以来&#xff0c;Python在各大排行榜上一直都是名列前茅。目前&#xff0c;它在Tiobe指数中排名第三个&#xff0c;仅次于Java…...

国外 上海网站建设/网络营销策划方案模板范文

对于tomcat的日志管理&#xff0c;部署Tomcat后&#xff0c;运行久了&#xff0c;catalina.out文件会越来越大&#xff0c;对系统的稳定造成了一定的影响。1 可以修改conf/logging.properties日志配置文件来屏蔽掉这部分的日志信息。vim /data/ifengsite/java/tomcat/conf/logg…...

FPGA毕业设计代做网站/网络游戏推广平台

2019独角兽企业重金招聘Python工程师标准>>> Hadoop&#xff1a;一个分布式系统基础架构&#xff0c;由Apache基金会所开发。 用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。充分利用集群的威力高速运算和存储。 Hadoop实现了一个分布式文件系…...

wordpress+dux5.0/seo优化教程视频

播放铃声&#xff1a; Uri notification RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); Ringtone r RingtoneManager.getRingtone(context,notification); r.play(); 系统闹钟源码分析...

wordpress建设下载网站/seo关键词排名优化联系方式

原文&#xff1a;http://my.oschina.net/leejun2005/blog/343353 目录[-] 1、问题&#xff1a;mysql 遇到某些中文插入异常2、原因&#xff1a;此 utf8 非彼 utf83、解决方案3.1 升级 mysql 版本&#xff0c;并将utf8字符集升级到utf8mb43.1.1 直接修改表结构3.1.2 修改数据库默…...

长葛做网站/营销必备十大软件

java错误-java.lang.ClassNotFoundException: org.aspectj.lang.annotation.Around 标签&#xff1a; aspectjrtaopjava2015-08-31 13:53 5521人阅读 评论(0) 收藏 举报分类&#xff1a;JAVA&#xff08;61&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经…...