keepalive和haproxy

1、keepalive

1.1概念

调度器的高可用

vip地址主备之间的切换,主在工作时,vip地址只在主上,主停止工作,vip漂移到备服务器

在主备的优先级不变的情况下,主恢复工作,vip会飘回到主服务器

1、配优先级

2、配置vip和真实服务器

3、主备的id要一致

4、主备的id要区分

keepalive是专门为lvs打造的,但是不是为lvs专门服务的

keepalive也可以使用nginx、haproxy

keepalive+nginx实现高可用

1.2如何监测vip的漂移?

用一个监控的脚本,来监控nginx1的状态,如果nginx1挂了,nginx1的keepalive会停掉,vip漂移到nginx2上

nginx+keepalive实现主备切换,实验步骤:

关闭防火墙,安装keepalive

 编写监控的脚本

vim check_nginx.sh

 /usr/bin/curl -I http://localhost &> /dev/null
if [ $? -ne 0 ]
then
  systemctl stop keepalived
fi

 重启keepalived,查看keepalived的状态

[root@nginx1 opt]# systemctl restart keepalived
[root@nginx1 opt]# systemctl status keepalived

 给脚本赋权

[root@nginx1 opt]# chmod 777 check_nginx.sh

 打开keepalived的配置文件

[root@nginx1 keepalived]# vim keepalived.conf

 重启keepalived,查看状态

[root@nginx1 keepalived]# systemctl restart nginx
[root@nginx1 keepalived]# systemctl restart keepalived.service

 暂停nginx,查看keepalived状态

 将配置文件发送给nginx2

[root@nginx2 ~]# scp root@192.168.230.60:/etc/keepalived/keepalived.conf  /etc/keepalived

编辑配置文件

 [root@nginx2 ~]# scp root@192.168.230.60:/etc/keepalived/keepalived.conf  /etc/keepalived

 开启nginx1和keepalived

vip地址生成了

[root@nginx1 keepalived]# systemctl start nginx
[root@nginx1 keepalived]# systemctl start keepalived.service 

[root@nginx1 keepalived]# ip addr

 重启nginx2和keepalived,没有生成vip地址

 修改nginx1和2的访问页面

[root@nginx1 keepalived]# vim /usr/local/nginx/html/index.html

 

 

 访问vip地址,只能访问nginx1,不会轮询

 暂停nginx1,vip地址消失了,漂移到nginx2上,此时访问的是nginx2

 恢复nginx1,开始keepalived,vip从nginx2漂移到nginx1上,此时访问的是nginx1

2、脑裂

2.1概念

HA高可用架构中的一个特殊现象,只要使用vip地址代理的冗余模式的高可用,都有可能出现脑裂的问题。

主和备同时都有vip地址

主和备无法确定各自的身份,同时出现了vip地址,两边都起来了,但是两边都无法使用。

2.2原因

1、keepalive的配置文件问题

2、心跳线(网线)断了,老化

3、网卡出了问题(硬件),ip地址配置冲突

4、防火墙的策略,iptables的策略,屏蔽了组播的地址广播,屏蔽了vrrp协议的报文

5、两台服务器的时间不同步也可能导致

6、其他的服务配置对心跳线的检测造成了干扰

2.3解决方法

1、进入keepalive的配置文件,查看哪一步的配置出现问题

2、查看服务器之间的网络连接是否正常,如果网线老化了,更换新的网线

3、检查硬件比如网卡是否正常,ip地址是否配置正确或者与其他地址冲突了

4、关闭防火墙,查看iptables的策略,vrrp协议的报文能否正常发送

5、保证两台服务器的时间同步,设置时间同步协议

6、检查其他服务配置是否有问题

3、Haproxy负载均衡

nginx:四层转发,七层转发(走的是用户态)

lvs:四层转发,走的是内核态

Haproxy:四层转发,七层转发

3.1Haproxy的作用和使用场景

3.1.1场景

用于高并发的web场景,可以支持一万个以上的并发请求,是高性能的tcp和http的负载均衡器

3.1.2工作原理

提供一个代理地址访问集群

3.2作用

1、进行四层和七层转发

2、支持https

3、Haproxy本身不自带缓存功能,请求当中添加cookie,使用缓存

4、支持主备切换(keepalive)

3.3特点

可靠性高,稳定性好

可以同时维护40000-50000个并发,单位时间内可以处理的最大请求数20000个

支持负载均衡算法,虽然不带缓存,但是可以支持会话保持

算法:rr wrr leastconn

3.4七层转发配置

安装test1的依赖环境

[root@localhost opt]# yum install -y pcre-devel bzip2-devel gcc gcc-c++ make

 

 将haproxy的安装包拖进来,解压

[root@localhost opt]# tar -xf haproxy-1.5.19.tar.gz 

 查看内核版本

[root@localhost haproxy-1.5.19]# uname -r
3.10.0-957.el7.x86_64

 make,target使用的版本要大于linux.2.60以上的版本

[root@localhost haproxy-1.5.19]# make TARGET=linux2628 ARCH=x86_64

安装

 [root@localhost haproxy-1.5.19]# make TARGET=linux2628 ARCH=x86_64

创建目录 

[root@localhost haproxy-1.5.19]# mkdir /etc/haproxy

 复制haproxy.cfg

[root@localhost examples]# cp haproxy.cfg /etc/haproxy

 修改配置文件

[root@localhost haproxy]# vim haproxy.cfg

  1 # this config needs haproxy-1.1.28 or haproxy-1.2.1
  2 
  3 global
  4         log /dev/log    local0 info
  5         log /dev/log    local1 notice
  6         #log loghost    local0 info
  7         maxconn 4096
  8         #最大连接数,推荐10240
  9         #chroot /usr/share/haproxy
 10         uid 99
 11         gid 99
 12         daemon
 13         nbproc 6
 15         #debug
 18 defaults
 19 #这里是默认参数配置,包含了连接配置、监听配置以及代理配置
 20         log     global
 21         mode    http
 22         option  httplog
 23         option  dontlognull
 24         retries 3
 26         redispatch
 28         maxconn 2000    
 30         #contimeout     5000
 31         #clitimeout     50000
 40         #客户端超时时间
 41         timeout server 1m
 42         #服务端的超时时间
 43         timeout http-keep-alive 10s
 44         #默认长连接的超时时间
 39         timeout client 1m
 40         #客户端超时时间
 41         timeout server 1m
 42         #服务端的超时时间
 43         timeout http-keep-alive 10s
 44         #默认长连接的超时时间
 45         timeout check 10s
 46         #检查后端服务器的超时时间
 47 #转发请求的设置,既可以是四层也可以是七层
 48 #七层的配置
 49 listen  xy102 0.0.0.0:80
 50         option httpchk GET /index.html
 51 #设置转发请求的内容
 52         balance static-rr
 53 #轮询算法
 54         server  rs01 192.168.230.60:80 check inter 2000 fall 3 weight 2
 55         server  rs02 192.168.230.70:80 check inter 2000 fall 3 weight 3
 56 #server指定真实服务器,rs01自定义后台服务器名称,check inter 2000启动对后端服务器进行检查,间隔是2000毫秒。fall 3连续3次检测不到认为失败

 复制 haproxy.init,赋权

[root@localhost examples]# cp [root@localhost examples]# cp haproxy.init /etc/init.d/haproxy
[root@localhost examples]# chmod 777 /etc/init.d/haproxy

 添加到管理服务中

[root@localhost examples]# chkconfig --add /etc/init.d/haproxy

 建立软连接

[root@localhost examples]# ln -s /usr/local/sbin/haproxy /usr/sbin/

 关闭防火墙,重启haproxy,访问成功实现轮询

3.5四层转发配置

配置文件haproxy.cfg

#四层转发
frontend test
bind *:80
mode tcp
default_backend test
backend test
mode tcp
balance roundrobin
server server1 192.168.230.60:80 check inter 2000 fall 3 weight 2
server server2 192.168.230.70:80 check inter 2000 fall 3 weight 2

 重启,访问成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/45988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【RabbitMQ】一文详解消息可靠性

目录: 1.前言 2.生产者 3.数据持久化 4.消费者 5.死信队列 1.前言 RabbitMQ 是一款高性能、高可靠性的消息中间件,广泛应用于分布式系统中。它允许系统中的各个模块进行异步通信,提供了高度的灵活性和可伸缩性。然而,这种通…

.NET MAUI开源架构_1.学习资源分享

最近需要开发Android的App,想预研下使用.NET开源架构.NET MAUI来开发App程序。因此网上搜索了下相关资料,现在把我查询的结果记录下,方便后面学习。 1.官方文档 1.1MAUI官方学习网站 .NET Multi-Platform App UI 文档 - .NET MAUI | Micro…

Open-TeleVision——通过VR沉浸式感受人形机器人视野:兼备远程控制和深度感知能力

前言 7.3日,我司七月在线(集AI大模型职教、应用开发、机器人解决方案为一体的科技公司)的「大模型机器人(具身智能)线下营」群里的一学员发了《Open-TeleVision: Teleoperation with Immersive Active Visual Feedback》这篇论文的链接,我当时快速看了一…

shell脚本之if/case语句

一、条件测试 1、1 返回码 $? $? :返回码,用来判断命令或者脚本是否执行成功。 0 :表示true ,成功;非0 则表示flase ,失败。 1、2 test命令 可以进行条件测试,然后根据返回值来判断条件是否成立 -e…

RISC-V异常处理流程概述(2):异常处理机制

RISC-V异常处理流程概述(2):异常处理机制 一、异常处理流程和异常委托1.1 异常处理流程1.2 异常委托二、RISC-V异常处理中软件相关内容2.1 异常处理准备工作2.2 异常处理函数2.3 Opensbi系统调用的注册一、异常处理流程和异常委托 1.1 异常处理流程 发生异常时,首先需要执…

4、linux相关基础知识

1、gcc编译过程 .c通过编译生成.o文件,.out目标文件进过链接生成.so库文件。 2、在C中可以使用system(("mkdir -p "path).c_str())创建目录。c_str()把string转化为c字符串,便于system命令识别,system命令会新启动一个进程来创建文…

移动硬盘有盘符打不开:深度解析与高效恢复指南

在数字化信息爆炸的今天,移动硬盘作为便捷的数据存储与传输工具,其重要性不言而喻。然而,当您遇到移动硬盘有盘符却无法正常打开的情况时,无疑会给您的工作和生活带来不小的困扰。本文将深入探讨移动硬盘有盘符打不开的原因&#…

东软“引战”国家队 通用技术“补链”大国重器

向来低调温和的东软创始人刘积仁,这一次抛出了“王炸”级的资产交易。 7月3日,《多肽链》获得一则足以引爆国内医疗设备行业的投资信息:被东软集团视为核心资产、掌上明珠的东软医疗,成功引入通用技术集团资本有限公司与中国国有…

BI佐罗,居然抄袭洗稿我的文章

必须曝光此博主不当行径。 4月2日这天发表的原创文章:BI报表系统建设10大坑,因为都是切身的实际项目经验总结,获得了很多人的关注。 我觉得写文章要写的是亲身、真的做过的专业的项目经验,而不是信口开河随口忽悠。 如果有些博…

Fancybox: 号称世界上最流行的灯箱脚本!这款“花盒“为什么与众不同?

今天要分享的是一个灯箱脚本库:Fancybox。最近了不起刚好用到它。这里就和大家分享下。 简介 Fancybox 是终极的 JavaScript 灯箱替代品,为多媒体显示中的优质用户体验设定了标准。支持图像、视频、地图、内联内容、iframe 和任何其他 HTML 内容。 此…

如何在SpringCloud中使用Kafka Streams实现实时数据处理

使用Kafka Streams在Spring Cloud中实现实时数据处理可以帮助我们构建可扩展、高性能的实时数据处理应用。Kafka Streams是一个基于Kafka的流处理库,它可以用来处理流式数据,进行流式计算和转换操作。 下面将介绍如何在Spring Cloud中使用Kafka Streams实…

Pytorch中nn.Sequential()函数创建网络的几种方法

1. 创作灵感 在创建大型网络的时候,如果使用nn.Sequential()将几个有紧密联系的运算组成一个序列,可以使网络的结构更加清晰。 2.应用举例 为了记录nn.Sequential()的用法,搭建以下测试网络&…

数字电路-建立时间和保持时间详解

对于数字系统而言,建立时间(setup time)和保持时间(hold time)是数字电路时序的基础。数字电路系统的稳定性,基本取决于时序是否满足建立时间和保持时间。我自己在初学时一度很难理解清楚他们的概念&#x…

基于JAVA+SpringBoot+Vue+uniApp小程序的心理健康测试平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 该系统由三个核心角色…

【PVE】新增2.5G网卡作为主网卡暨iperf测速流程

【PVE】新增2.5G网卡作为主网卡暨iperf测速流程 新增网卡 新增网卡的首先当然需要关闭PVE母机,把新网卡插上,我用淘宝遥现金搞了个红包,花了26元买了块SSU的2.5G网卡。说实话这个价位连散热片都没有,确实挺丐的。稍后测下速度看…

移动硬盘有盘符打不开的全方位解决方案

一、现象描述:移动硬盘有盘符却无法访问 在日常的数据存储与传输中,移动硬盘无疑扮演着举足轻重的角色。然而,不少用户可能会遇到这样一个令人头疼的问题:移动硬盘在连接电脑后,虽然能正常显示盘符,但双击…

【算法】单调队列

一、什么是单调队列 单调队列是一种数据结构,其特点是队列中的元素始终保持单调递增或递减,主要用于维护队列中的最小值或最大值。 不同于普通队列只能从队头出队、队尾入队,单调队列为了维护其特征,还允许从队尾出队 不管怎么…

深入Linux:权限管理与常用命令详解

文章目录 ❤️Linux常用指令🩷zip/unzip指令🩷tar指令🩷bc指令🩷uname指令🩷shutdown指令 ❤️shell命令以及原理❤️什么是 Shell 命令❤️Linux权限管理的概念❤️Linux权限管理🩷文件访问者的分类&#…

【微信小程序知识点】getApp()全局数据共享,页面间通信,组件间通信

getApp()-全局数据共享 在小程序中,可以通过getApp()方法获取到小程序全局唯一的App实例。因此在App()方法中添加全局共享的数据,方法,从而实现页面,组件的数据传值。 // app.js App({//全局共享的数据globalData: {token: &qu…

力扣每日一题:3011. 判断一个数组是否可以变为有序

力扣官网:前往作答!!!! 今日份每日一题: 题目要求: 给你一个下标从 0 开始且全是 正 整数的数组 nums 。 一次 操作 中,如果两个 相邻 元素在二进制下数位为 1 的数目 相同 &…