keepalive+nginx/haproxy+keepalive 高可用

news/2024/8/13 12:51:44/ 标签: nginx, 运维

keepalive:

调度器的高可用

vip地址在主备之间的切换,主在工作时,vip地址只在主;主停止工作,vip飘到备上。

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

1、配优先级

2、配vip和真实服务器

3、主备的id要一致

4、主备的id要区分

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

keepalive也可以使用nginx、haproxy

keepalive+nginx实现高可用

vrrp_script check—_nginx {
script "/opt/check nginx.sh"
#调用脚本内容,检测nginx的状态
interval 5
#检测的时间是5秒一次
}
[root@nginx1 keepalived]# vim keepalived.conf 
​
! Configuration File for keepalived
​
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_01vrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0vrrp_iptables
}vrrp_script check—_nginx {script "/opt/check nginx.sh"interval 5
}
​
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 120advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.65.100}track_script {check_nginx
}
​
[root@nginx1 opt]# vim check_nginx.sh
​
#!/bin/bash
/usr/bin/curl -I http://localhost &> /dev/null
if [ $? -ne 0 ]
thensystemctl stop keepalived
fi
[root@nginx2 keepalived]# vim keepalived.conf 
​
! Configuration File for keepalived
​
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_02vrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0vrrp_iptables
}vrrp_script check—_nginx {script "/opt/check_nginx.sh"interval 5
}
​
vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.65.100}track_script {check_nginx
}

面试题

脑裂是什么

HA 高可用架构中的一个特殊现象,只要使用vp地址代理的冗余模式的高可用。都有可能出现脑裂的问题。 主和备同时都有yip地址。 主和备无法确定各自的身份,同时出现了vp地址,两边起来了,但是两边都无法使用。

原因:

1、keepalive的配置文件问题

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

3、网卡处理问题(硬件问题),IP地址配置冲突

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

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

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

怎么解决

1、检查keepalive的配置文件①名称不能相同 ②优先级不能相同 ③接口要相同 ④调用的文件权限不足 ⑤调整连接超时的时间(太长太短都不行)⑥查看日志

2、换根新网线

3、换台服务器,重新分配ip地址

4、关闭防火墙和安全机制,iptables -F;或者在配置文件中加入"vrrp_iptables"来清楚安全机制带来的阻碍

5、将两台服务器的时间调整到同步

6、更改其他服务配置

nginx Ivs Ivs+keepalivekeepalive单独配置

web集群

Haporxy负载均衡:

nginx 四层转发(ip+端口) 七层代理

lvs四层转发 内核态 七层用户态

Haporxy 四层转发 七层转发

Haporxy的作用和使用场景

场景

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

工作原理:

提高一个代理地址,访问集群

作用

1、进行四层和七层转发

2、支持https

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

4、支持主备切换(keepalive)

特点

1、可靠性高,稳定性好

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

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

算法

1、rr

2、wrr

3、leastconn

安装haproxy 解压

[root@test-41 opt]# tar -xf haproxy-1.5.19.tar.gz 
[root@test-41 opt]# uname -r
[root@test-41 haproxy-1.5.19]# make TARGET=linux2628 ARCH=x86_64
#target使用的版本要大于linux.2.60以上的版本
[root@test-41 haproxy]# make install
[root@test-41 haproxy]# mkdir /etc/haproxy
[root@test-41 opt]# cd examples/
[root@test-41 examples]# cp haproxy.cfg /etc/haproxy/

配置haproxy.cfg

[root@test-41 haproxy]# vim haproxy.cfg 
# this config needs haproxy-1.1.28 or haproxy-1.2.1
​
globallog /dev/log    local0 infolog /dev/log    local1 notice#log loghost    local0 infomaxconn 4096#最大连接数,推荐使用1024#chroot /usr/share/haproxyuid 99gid 99daemonnbproc 4#haproxy的并发的线程数,设置的数量最好是cpu的两倍或者和cpu保持一致#debug#quiet
​
defaults
#默认参数配置,包含连接配置监听配置,代理配置log     globalmode    httpoption  httplogoption  dontlognullretries 3#检查节点服务器3次,连续3次失败就是节点服务器不可用redispatch#服务器负载很高时,自动结束当前队列中处理比较久的连接maxconn 2000#最大连接数这个数可以和global中保持一致可以比他小不能大于他,一般一致#contimeout     5000#clitimeout     50000#srvtimeout     50000timeout 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  xy102 0.0.0.0:80option httpchk GET /index.htmlbalance static-r
#轮询算法server  rs01 192.168.65.10 check inter 2000 fall 3 weight 2server  rs02 192.168.65.20 check inter 2000 fall 3 weight 3
#server指定真实服务器rs01 自定后台服务器名称 check inter 2000 启动对后端服务器进行检查,检查的间隔时间2000毫秒
​
四层配置
frontend test
bind *:80
mode tcp
default_backend test
​
backend test
mode tcp
balance roundrobin
server server1 192.168.65.10:80 check inter 2000 fall 3 weight 2
server server2 192.168.65.20:80 check inter 2000 fall 3 weight 2
​

对配置文件进行复制、赋权、添加服务、创建软连接

[root@test-41 examples]# cp haproxy.init /etc/init.d/haproxy    #复制
[root@test-41 examples]# chmod 777 /etc/init.d/haproxy          #赋权
[root@test-41 examples]# chkconfig --add /etc/init.d/haproxy    #添加到管理服务
[root@test-41 examples]# ln -s /usr/local/sbin/haproxy /usr/sbin/  #创建软连接
​

结果

[root@test-41 haproxy]# curl 192.168.65.41
This is nginx2
[root@test-41 haproxy]# curl 192.168.65.41
This is nginx1
​

作业   keepalive+haproxy实现高可用

keepalive+haproxy高可用haproxy地址192.168.65.41  虚拟地址vip 192.168.65.100
​
rs1   keepalive  192.169.65.10
​
rs2   keepalive  192.168.65.20
​

调度器

[root@test-41 haproxy]# vim haproxy.cfg 
​
# this config needs haproxy-1.1.28 or haproxy-1.2.1
​
globallog /dev/log    local0 infolog /dev/log    local1 notice#log loghost    local0 infomaxconn 4096#最大连接数,推荐使用1024#chroot /usr/share/haproxyuid 99gid 99daemonnbproc 4#haproxy的并发的线程数,设置的数量最好是cpu的两倍或者和cpu保持一致#debug#quiet
​
defaults
#默认参数配置,包含连接配置监听配置,代理配置log     globalmode    httpoption  httplogoption  dontlognullretries 3#检查节点服务器3次,连续3次失败就是节点服务器不可用redispatch#服务器负载很高时,自动结束当前队列中处理比较久的连接maxconn 2000#最大连接数这个数可以和global中保持一致可以比他小不能大于他,一般一致#contimeout     5000#clitimeout     50000#srvtimeout     50000timeout 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  xy102 0.0.0.0:80option httpchk GET /index.htmlbalance static-rr
#轮询算法server  rs01 192.168.65.10 check inter 2000 fall 3 weight 2server  rs02 192.168.65.20 check inter 2000 fall 3 weight 3
#server指定真实服务器rs01 自定后台服务器名称 check inter 2000 启动对后端服务器进行检查,检查的间隔时间2000毫秒
​
四层
#frontend test
#bind *:80
#mode tcp
#default_backend test
​
#backend test
#mode tcp
#balance roundrobin
#server server1 192.168.65.10:80 check inter 2000 fall 3 weight 2
#server server2 192.168.65.20:80 check inter 2000 fall 3 weight 2
​

rs 1

[root@nginx1 keepalived]# vim keepalived.conf 
​
! Configuration File for keepalived
​
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_01vrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0vrrp_iptables
}vrrp_script check_nginx {script "/opt/check_nginx.sh"interval 5
}
​
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 120advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.65.100}track_script {check_nginx
}
}
​

rs 2

[root@nginx2 keepalived]# vim keepalived.conf 
​
! Configuration File for keepalived
​
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_02vrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0vrrp_iptables
}vrrp_script check_nginx {script "/opt/check_nginx.sh"interval 5
}
​
vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.65.100}track_script {check_nginx
}
}
​

结果

访问虚拟地址就是访问哪个优先级高访问哪个
[root@test-42 ~]# curl 192.168.65.100
This is nginx1
[root@test-42 ~]# curl 192.168.65.100
This is nginx1
[root@test-42 ~]# curl 192.168.65.100
This is nginx1
​
访问haproxy就是keepalive的nginx来回轮询
[root@test-42 ~]# curl 192.168.65.41
This is nginx2
[root@test-42 ~]# curl 192.168.65.41
This is nginx1
[root@test-42 ~]# curl 192.168.65.41
This is nginx2
[root@test-42 ~]# curl 192.168.65.41
This is nginx1
​


http://www.ppmy.cn/news/1475437.html

相关文章

LLM推理优化笔记1:KV cache、Grouped-query attention等

KV cache 对于decoder-only 模型比如现在如火如荼的大模型,其在生成内容的过程中,为了避免冗余计算,会将Transformer里的self-attention的K和V矩阵给缓存起来,这个过程即为KV cache。 decoder-only模型的生成过程是自回归的&…

c++课后作业

把字符串转换为整数 int main() {char pn[21];cout << "请输入一个由数字组成的字符串&#xff1a; ";cin >> pn;int last 0;int res[10];int j strlen(pn);int idx 2;cout << "请选择&#xff08;2-二进制&#xff0c;10-十进制&#xf…

项目/代码规范与Apifox介绍使用

目录 目录 一、项目规范&#xff1a; &#xff08;一&#xff09;项目结构&#xff1a; &#xff08;二&#xff09;传送的数据对象体 二、代码规范&#xff1a; &#xff08;一&#xff09;数据库命名规范&#xff1a; &#xff08;二&#xff09;注释规范&#xff1a; …

JavaSE 面向对象程序设计进阶 IO流练习 字节缓冲流 字符缓冲流 底层原理

目录 字节缓冲流 字节缓冲流底层原理 字符缓冲流 字节缓冲流 刚刚学习的四个流是基本流 对四个基本流进行封装&#xff0c;添加了新的功能&#xff0c;叫做缓冲流 底层自带长度为8192的缓冲区 import java.io.*;public class Main {public static void main(String[] args) …

xcode中对项目或者文件文件夹重命名操作

提起揭秘答案&#xff1a;选中文件后&#xff0c;按下回车键就可以了 如果在项目中对新建的文件夹或者文件名称不满意或者输入错误了&#xff0c;想要修改一下名称该怎么办&#xff1f;如果是在文件或文件夹上右键是没有rename选项的&#xff1a; 其实想要重命名&#xff0c;很…

红日靶场----(三)1.漏洞利用

上期已经信息收集阶段已经完成&#xff0c;接下来是漏洞利用。 靶场思路 通过信息收集得到两个吧靶场的思路 1、http://192.168.195.33/phpmyadmin/&#xff08;数据库的管理界面&#xff09; root/root 2、http://192.168.195.33/yxcms/index.php?radmin/index/login&am…

自定义波形图View,LayoutInflater动态加载控件保存为本地图片

效果图&#xff1a; 页面布局&#xff1a; <?xml version"1.0" encoding"utf-8"?><LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:la…

AirPods Pro新功能前瞻:iOS 18的五大创新亮点

随着科技的不断进步&#xff0c;苹果公司一直在探索如何通过创新提升用户体验。iOS 18的推出&#xff0c;不仅仅是iPhone的一次系统更新&#xff0c;更是苹果生态链中重要一环——AirPods Pro的一次重大升级。 据悉&#xff0c;iOS 18将为AirPods Pro带来五项新功能&#xff0…

电子签章 签到 互动 打卡 创意印章 支持小程序 H5 App

电子签章 签到 互动 打卡 创意印章 支持小程序 H5 App 定制化

iOS 开发中不常见的专业术语

乐此不疲地把简单的问题复杂化&#xff0c;并把这种XX行为叫作专业 APM 在 iOS 开发中&#xff0c;APM 代表 Application Performance Management&#xff08;应用性能管理&#xff09;。APM 是一套监控和管理应用程序性能的工具和技术&#xff0c;旨在确保应用程序运行平稳、…

Django 新增数据 save()方法

1&#xff0c;添加模型 Test/app11/models.py from django.db import modelsclass Book(models.Model):title models.CharField(max_length100)author models.CharField(max_length100)publication_date models.DateField()price models.DecimalField(max_digits5, decim…

常见的网络安全设备

一、防火墙 防火墙的核心任务&#xff1a;防护和控制&#xff0c;防火墙通过安全策略识别流量并做出相应的动作。 防火墙的安全策略在进行匹配时&#xff0c;自上而下逐一匹配&#xff0c;匹配成功则不向下进行匹配&#xff0c;末尾隐含拒绝所有规则。 1.包过滤防火墙 工作范围…

【C++深度探索】全面解析多态性机制(二)

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;C从入门至进阶 这里将会不定期更新有关C/C的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 前言 我…

Elasticsearch 理解相关性评分(TF-IDF、BM25等)

在Elasticsearch中&#xff0c;相关性评分是搜索功能的核心&#xff0c;它决定了搜索结果的质量和排序。了解Elasticsearch是如何计算相关性评分的&#xff0c;特别是TF-IDF和BM25算法&#xff0c;对于优化搜索性能和结果至关重要。本文将深入探讨这两种算法及其在Elasticsearc…

vue3 ts 报错:无法找到模块“../views/index/Home.vue”的声明文件

解决办法&#xff1a; env.d.ts 新增代码片段&#xff1a; declare module "*.vue" {import type { DefineComponent } from "vue";// eslint-disable-next-line typescript-eslint/no-explicit-any, typescript-eslint/ban-typesconst component: Define…

C#面:阐述控制反转是什么?

控制反转&#xff08;Inversion of Control&#xff0c;缩写为IoC&#xff09;&#xff0c;是⾯向对象编程中的⼀种设计原则&#xff0c;可以⽤来减低计算机代码之间的耦合度。其中最常⻅的⽅式叫做依赖注⼊&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;&am…

深入解析C#中的Stopwatch类:精准计时的艺术

目录 引言 了解Stopwatch类 创建与使用Stopwatch 使用多个Stopwatch实例 性能分析与优化 结论 后记 引言 在软件开发中&#xff0c;性能分析是不可或缺的一环&#xff0c;它帮助我们识别瓶颈、优化代码&#xff0c;确保应用程序的高效运行。C#中的Stopwatch类便是开发者…

数据湖仓一体(六)安装flink

上传安装包到/opt/software目录并解压 [bigdatanode106 software]$ tar -zxvf flink-1.17.2-bin-scala_2.12.tgz -C /opt/services/ 重命名文件 [bigdatanode106 services]$ mv flink-1.17.2-bin-scala_2.12 flink-1.17.2 配置环境变量 [bigdatanode106 ~]$ sudo vim /etc…

Elasticsearch:Node.js ECS 日志记录 - Morgan

这是之前系列文章&#xff1a; Elasticsearch&#xff1a;Node.js ECS 日志记录 - Pino Elasticsearch&#xff1a;Node.js ECS 日志记录 - Winston 中的第三篇文章。在今天的文章中&#xff0c;我将描述如何使用 Morgan 包针对 Node.js 应用进行日子记录。此 Morgan Node.j…

threejs

1.场景清空&#xff0c;释放内容 // 假设你已经有一个Three.js的场景对象scene// 函数&#xff1a;清空场景中的所有对象 function clearScene(scene) {while(scene.children.length > 0){const object scene.children[0];if(object.isMesh) {// 如果有几何体和材质&#…