Keepalived和Haproxy

Keepalived和Haproxy

一、Keepalived

1、keepalived概念

调度器的高可用

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

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

1、配优先级

2、配vip地址和真实服务器

3、主备的id要一致

4、主备的id要区分

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

keepalive也可以使用nginx,haproxy

2、keepalive+nginx实现高可用

实验

在这里插入图片描述

nginx1 192.168.100.11 keepalive

nginx2 192.168.100.12 keepalive

客户端 192.168.100.13

监控脚本,来监控nginx1的状态,如果nginx1挂了,nginx1的keepalive也要停止,实现vip的飘移

#nginx1和nginx2#
systemctl stop firewalld
setenforce 0
yum -y install keepalived#nginx1#
cd /opt
vim check_nginx.sh#!/bin/bash
/usr/bin/curl -I http://localhost &> /dev/null
if [ $? -ne 0 ]
thensystemctl stop keepalived
fi
wq!systemctl restart keepalived
systemctl status keepalived
systemctl restart nginx
chmod 777 check_nginx.sh
# ls查看是否生成check_nginx.sh的文件cd /etc/keepalived
vim keepalived.conf
#修改smtp_server 192.168.200.1如下
smtp_server 127.0.0.1
#修改router_id LVS_DEVEl如下
router_id LVS_01
#新增一行
vrrp_iptables
}#修改interface eth0如下
interface ens33
#virtual_router_id 51保持不变(主备保持相同)
#priority 100修改如下
priority 120#virtual_ipaddress修改为vip地址如下
virtual_ipaddress {192.168.100.100
}
# 以下全部删除
# 在虚拟地址结束的新增一行track_script {check_nginx}# 在vrrp_iptables
#}下新增
vrrp_script check_nginx {script "/opt/check_nginx.sh"# 调用脚本内容,检测nginx的状态interval 5# 检测的时间间隔是5秒,如果业务敏感可以改成3秒
}wq!systemctl status keepalived.service
# 此时状态是开启
systemctl stop nginx 
# 等待5秒
systemctl status keepalived.service
# 此时状态是关闭#nginx2#
systemctl restart nginx
cd /etc/keepalived
cp keepalived.conf keepalived.conf.bak.2024.07.12
scp root@192.168.100.11:/etc/keepalived/keepalived.conf /etc/keepalived/
vim keepalived.conf#修改router_id LVS_01如下
router_id LVS_02
#修改state MASTER如下
state BACKUP
#priority 120修改如下
priority 100
wq!#nginx1#
systemctl start nginx
systemctl start keepalived.service
# 一定要先启动nginx,因为脚本检测的是nginxvim /usr/local/nginx/html/index.html
# 修改为this is nginx1
wq!#nginx2#
systemctl restart nginx
systemctl restart keepalived
ip addr
vim /usr/local/nginx/html/index.html
# 修改为this is nginx2
wq!主备切换
#客户机#
页面访问vip地址:curl 192.168.100.100,此时访问的是nginx1的页面#nginx1#
systemctl stop nginx#nginx2#
ip addr
vip地址切换到nginx2#客户机#
页面访问vip地址:curl 192.168.100.100,此时访问的是nginx2的页面#nginx1#
页面访问vip地址:curl 192.168.100.100,此时页面又切换回来,是nginx1的页面

3、脑裂是什么?

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

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

原因:

3.1 keepalive的配置文件出现问题

3.2 心跳线(网线)断了、老化

3.3 网卡出现问题(硬件),ip地址出现问题

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

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

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

4、怎么解决?

lvs中碰见、nginx中碰见如何解决?

4.1 查看keepalive的配置文件是否配置有误

4.2 更换新的网线,或者同时使用两条心跳线,用来预防其中一条挂掉导致出现脑裂

4.3 检查网卡和ip地址是否出现问题

4.4 关闭防火墙,关闭iptables策略,或者在配置文件里增加vrrp_iptables

4.5 保持两台服务器的时间同步,设置NTP

nginx、lvs、lvs+keepalive、keepalive单独配置

二、Haproxy

1、Haproxy的概念

1.1 Haproxy负载均衡:

nginx(四层转发、七层代理)、lvs(四层转发)、Haproxy(四层转发 、七层转发)

1.2 Haproxy的作用和使用场景:

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

工作原理:提供一个代理地址用来访问集群

作用:

• 可以进行四层和七层转发

• 支持https协议

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

• 支持主备切换(keepalived)

1.3 特点:

• 可靠性高、稳定性好

• 可以同时维护40000~50000个并发,单位时间内可以处理的最大请求数20000个(3秒)

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

权重:rr、wrr、leastconn

2、实验:七层代理

在这里插入图片描述

nginx1 192.168.100.11

nginx2 192.168.100.12

客户端 192.168.100.13

#客户端#
yum install -y pcre-devel bzip2-devel gcc gcc-c++ maketar -xf haproxy-1.5.19.tar.gz
uname -r
cd haproxy-1.5.19 
make TARGET=linux2628 ARCH=x86_64
# target使用的版本要大于linux2.60以上的版本
mkdir /etc/haproxy
cd examples
#haproxy.cfg是主配置文件
cp haproxy.cfg /etc/haproxy
cd /etc/haproxyvim haproxy.cfg
set nu
#第四行五行改为 注释第八行
log /dev/log local0 info
log /dev/log local1 notice
maxconn 4096
# 最多连接数,推荐10240
# 在daemon下新增
nbproc 6
# haproxy的并发线程数,设置的数量最后是cpu的2倍或者和cpu保持一致defaults
# 这是是默认参数配置,连接配置,监听配置以及代理配置retries 3
# 检查节点服务器3次,连续3次失败,就任务节点服务器不可用
redispatch
# 服务器负载很高时,自动结束当前队列中处理比较久的连接
maxconn 2000
# 最大连接数,这个数值可以和global里面的maxconn的保持一致,但是不能超过它,一般设置成一致
下面三行注释掉
#
#
#
在注释的三行下新增
timeout http-request 10s
# http请求的默认超时时间
timeout queue 1m
# 在队列当中请求的超时时间
timeout connect 10s
# 连接超时时间
timeout client 1m
# 客户端超时时间
timeout server 1m 
# 服务端超时时间
timeout http-keep-alive 10s
# 默认长连接的超时时间
timeout check 10s
# 检查后端服务器超时时间# 删除listen  appli2-insert 0.0.0.0:10002下面的所有行
# 修改listen  appli1-rewrite 0.0.0.0:10001为七层配置的格式# 转发请求的设置,既可以是四层也可以是七层
# 七层的配置:
listen xy102 0.0.0.0:80option httpchk GET /index.html# 设置转发请求的内容balance static-rr# 默认轮询算法server rs01 192.168.11:80 check inter 2000 fall 3 weight 2server rs02 192.168.12:80 check inter 2000 fall 3 weight 3# server 指定真实服务器 rs01 自定义后台服务器的名称 checkinter 2000 启动对后端服务器进行检查,检查间隔是2000毫秒  fall 3 连续cd三次检测不到,则检测失败wq!cd /opt/haproxy-1.5.19/examples
cp haproxy.init /etc/init.d/haproxy
chmod 777 /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin
systemctl restart haproxy.service

3、实验:四层配置

#客户端#
yum install -y pcre-devel bzip2-devel gcc gcc-c++ maketar -xf haproxy-15.19.tar.gz
uname -r
make TARGET=linux2628 ARCH=x86_64
# target使用的版本要大于linux2.60以上的版本
mkdir /etc/haproxy
#haproxy.cfg是主配置文件
cp haproxy.cfgvim haproxy.cfg
set nu
第四行五行
log /dev/log local0 info
log /dev/log local1 notice
maxconn 4096
# 最多连接数,推荐10240
# 在daemon下新增
nbproc 6
# haproxy的并发线程数,设置的数量最后是cpu的2倍或者和cpu保持一致
defaults
# 这是是默认参数配置,连接配置,监听配置以及代理配置retries 3
# 检查节点服务器3次,连续3次失败,就任务节点服务器不可用
redispatch
# 服务器负载很高时,自动结束当前队列中处理比较久的连接
maxconn 2000
# 最大连接数,这个数值可以和global里面的maxconn的保持一致,但是不能超过它,一般设置成一致
下面三行注释掉
#
#
#
在注释的三行下新增
timeout http-request 10s
# http请求的默认超时时间
timeout-queue 1m
# 在队列当中请求的超时时间
timeout connect 10s
# 连接超时时间
timeout client 1m
# 客户端超时时间
timeout server 1m 
# 服务端超时时间
timeout http-keep-alive 10s
# 默认长连接的超时时间
timeout check 10s
# 检查后端服务器超时时间.....删除# 转发请求的设置,既可以是四层也可以是七层
# 四层的配置:
frontend test
bind *:80
mode tcp
default_backend testbackend test
mode tcp
balance roundrobin
server server1 182.168.100.11:80 check inter 2000 fall 3 weight 2
server server1 182.168.100.12:80 check inter 2000 fall 3 weight 3wq!cp haproxy,init /etc/init.d/haproxy
chmod 777 /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin

keepalive+haproxy

ode tcp
default_backend test

backend test
mode tcp
balance roundrobin
server server1 182.168.100.11:80 check inter 2000 fall 3 weight 2
server server1 182.168.100.12:80 check inter 2000 fall 3 weight 3

wq!

cp haproxy,init /etc/init.d/haproxy
chmod 777 /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin

keepalive+haproxy

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

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

相关文章

C++——编译报重复定义错误的解决办法

原因: 头文件被多次编译。 解决办法: 找到包含头文件的地方,仔细检查。 比如: 这两句话是包含关系,写了第一句就不用第二句了。 因为:第一句是编译 tracker/detector/rknn_model_zoo/examples/yolov5/c…

【MySQL进阶之路 | 高级篇】简谈redo日志

1. 前言 事务有四种特性:原子性,一致性,隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢? 事务的隔离性由锁机制实现。而事务的原子性,一致性和持久性由事务的redo日志和undo日志来保证。 REDO LOG称为…

云计算实训13——DNS域名解析、ntp时间服务器配置、主从DNS配置、多区域DNS搭建

一、DNS域名解析 1.正向解析 将域名解析为IP地址 DNS正向解析核心配置 (1)安装bind [rootdns ~]# yum -y install bind (2)编辑配置文件 编辑named.conf文件,限定访问权限 [rootdns ~]# vim /etc/named.conf 编辑named.rfc文件,指定要访问的域名 [ro…

【数据结构】:用Java实现链表

在 ArrayList 任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后搬移,时间复杂度为 O(n),效率比较低,因此 ArrayList 不适合做任意位置插入和删除比较多的场景。因此:java 集合中又引入了 LinkedList&…

一步一步测试DNS隧道

目录 0、前言 1、DNS解析 1.1 DNS简介 1.2 DNS查询类型 1.3 DNS解析过程 2、DNS隧道准备工作 2.1 DNS隧道介绍 2.1.1 什么是DNS隧道? 2.1.2 DNS隧道的原理 2.2 客户端、服务端准备 2.3 域名准备 2.4 连接隧道 2.5 遇坑 3、隧道确认和利用…

Windows本地启动Redis

找到本地redis目录 输入cmd,然后输入redis-server.exe redis.windows.conf,默认端口为6379 再新打开一个cmd,输入redis-cli.exe -p 6379 -a (你在redis.windows.conf中设置的密码)

如何做好服务器的安全管理

以下是一些服务器安全防护措施: 1、安装杀毒软件:安装杀毒软件是保护服务器免受病毒和恶意软件攻击的基本措施之一。保持杀毒软件更新至最新版本,定期扫描检测服务器以确保其不被病毒、蠕虫等恶意软件入侵。保护服务器免受侵害。像360杀毒&am…

HarmonyOS NEXT星河版零基础入门到实战

文章目录 一、HarmonyOS NEXT介绍学习内容1、鸿蒙APP开发2、能力套件开发3、全场景开发适合人群 持续更新中✒️总结 一、HarmonyOS NEXT介绍 放弃安卓框架之后,HarmonyOS NEXT成为真正独立于安卓、iOS的操作系统,堪称是一场史无前例的脱胎换骨。在其众多…

服务器利用宝塔面板部署Django项目

目录 1. 使用命令启动Django项目1.1 使用 Xshell 连接服务器1.2 安装Anaconda1.3 启动Django项目1.4 使用tmux实现项目的后台运行 2. 使用Python项目管理器部署项目2.1 安装宝塔面板和软件2.2 添加站点2.3 上传项目文件2.3.1 收集静态文件2.3.2 生成依赖文件 2.4 安装安装Pytho…

【周记】2024暑期集训第二周(未完待续)

文章目录 日常刷题记录合并果子题目解析算法思路代码实现 中位数题目解析算法思路代码实现 C学习笔记队列queue双端队列 deque优先队列 priority_queue定义常见操作 upper_bound 日常刷题记录 合并果子 题目解析 有一堆果子,每次可以将两小堆合并,耗费…

人的心体本乐,回归自己,清静快乐

94天 孔颜之乐,乐是心的本体;真乐,常人所共有; 人心本体,原来就没有什么不快乐的 - 陆元静问:孔颜之乐与七情之中的“ 乐 ”是否相同呢?我经常愁闷,未曾体会过“真乐”的感受&#x…

classfinal太强了,再也不怕被反编译了

这段时间在辛辛苦苦的编写一个算法程序,担心部署到客户服务器,客户反编译jar包,破解程序,那努力就白费了! 在网上查询,发现个好东东,classfinal可以加密jar包,防止反编译&#xff0…

华杉研发九学习日记18 集合 泛型

华杉研发九学习日记18 一,集合框架 1.1 集合和数组的区别 集合就是在java中用来保存多个对象的容器 集合是数组的升级版,集合中只能放置对象[object]. 数组: 在java中用来保存多个具有相同数据类型数据的容器 数组弊端: 1.数组只能保存…

【计算机网络】网络层——IPv4地址(个人笔记)

学习日期:2024.7.24 内容摘要:IPv4地址,分类编址,子网,无分类编址 IPv4地址概述 在TCP/IP体系中,IP地址是一个最基本的概念,IPv4地址就是给因特网上的每一台主机的每一个接口分配一个在全世界…

C语言 之 理解指针(4)

文章目录 1. 字符指针变量2. 数组指针变量2.1 对数组指针变量的理解2.2 数组指针变量的初始化 3. 二维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用 5. 函数指针数组 1. 字符指针变量 我们在前面使用的主要是整形指针变量,现在要学…

实战练习之Linux上实现shell脚本自动化编程

实验拓扑要求 主机环境描述 注意: 172.25.250.101-172.25.250.105 共 5 个 IP 地址由servera.exam.com服务器进行提供。172.25.250.106 由 serverb.exam.com 服务器进行提供。 需求描述 1. 172.25.250.101 主机上的 Web 服务要求提供 www.exam.com Web站点&#…

A Comprehensive Study of Knowledge Editing for Large Language Models

大型语言模型(LLMs)在理解和生成与人类交流密切相关的文本方面表现出了非凡的能力。然而,一个主要的限制在于训练期间的大量计算需求,这是由于它们的广泛参数化而产生的。世界的动态性质进一步加剧了这一挑战,需要经常…

Unity UGUI 之Text 控件

本文仅作学习笔记与交流,不作任何商业用途 本文包括但不限于unity官方手册,唐老狮,麦扣教程知识,引用会标记,如有不足还请斧正 1.Text是什么 UI里面写文本的(注意是legacy Text,而不是TextmeshP…

前端网页打开PC端本地的应用程序实现方案

最近开发有一个需求,网页端有个入口需要跳转三维大屏,而这个大屏是一个exe应用程序。产品需要点击这个入口,并打开这个应用程序。这个就类似于百度网盘网页跳转到PC端应用程序中。 这里我们采用添加自定义协议的方式打开该应用程序。一开始可…

springboot项目从jdk8升级为jdk17过程记录

背景:公司有升级项目jdk的规划,计划从jdk8升级到jdk11 开始 首先配置本地的java_home 参考文档:Mac环境下切换JDK版本及不同的maven-CSDN博客 将pom.xml中jdk1.8相关的版本全部改为jdk17,主要是maven编译插件之类的&#xff0c…