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

lvs DR模式调试

DS配置:

# cat /etc/keepalived_docker/keepalived.conf 
! Configuration File for keepalived
global_defs {router_id LVS_70          # 设置lvs的id,在一个网络内应该是唯一的
}vrrp_instance VI_70 {state MASTER            # 两个 DS,一个为 MASTER,一个为 BACKUPinterface ens33         # 当前 IP 对应的网络接口virtual_router_id 70    # 虚拟路由 ID(0-255),在一个 VRRP 实例中主备服务器 ID 必须一样priority 100            # 优先级值设定:MASTER 要比 BACKUP 的值大advert_int 1            # 通告时间间隔:单位秒,主备要一致authentication {        # 认证机制,主从节点保持一致即可auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.137.70        # VIP,可配置多个}
}# LB 配置,定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.137.70 80 {delay_loop 3                    # 设置健康状态检查时间lb_algo wlc                     # 设置负载调度的算法,wrr/rr等lb_kind DR                      # 这里测试用了 Direct Route 模式persistence_timeout 600         # 持久连接超时时间即会话保持时间,这段时间内同一ip发起的请求将被转发到同一个 RSprotocol TCPvirtualhost LVSreal_server 192.168.137.3 80 {weight 1TCP_CHECK {connect_timeout 3retry 3                     # 旧版本为 nb_get_retrydelay_before_retry 2connect_port 80}}real_server 192.168.137.4 80 {weight 1TCP_CHECK {connect_timeout 3retry 3                     # 旧版本为 nb_get_retrydelay_before_retry 2connect_port 80}}
}

DS开通ip转发:

#vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p

DS网卡信息:

[root@el7 lvs]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:af:ed:5f brd ff:ff:ff:ff:ff:ff
    inet 192.168.137.2/24 brd 192.168.137.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.137.60/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.137.70/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feaf:ed5f/64 scope link
       valid_lft forever preferred_lft forever

RS脚本:

# cat lvs-rs.sh 
#!/bin/bash
VIP=192.168.137.70
#/etc/rc.d/init.d/functions
case "$1" instart)echo "Start Real Server ..."ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP uproute add -host $VIP dev lo:0#如果多个vip继续类似添加:#ifconfig lo:2 $VIP2 netmask 255.255.255.255 broadcast $VIP2 up#route add -host $VIP2 dev lo:2echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf/lo/arp_announceecho "1" > /proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf/all/arp_announcesysctl -p > /dev/null 2>&1systemctl stop firewalldecho "Real Server Started.";;stop)echo "Stop Real Server ..."ifconfig lo:0 down#如果多个vip继续类似添加:#ifconfig lo:2 downroute del $VIP >/dev/null 2>&1echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" > /proc/sys/net/ipv4/conf/lo/arp_announceecho "0" > /proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" > /proc/sys/net/ipv4/conf/all/arp_announceecho "Real Server Stopped.";;*)echo "Usage: $0 {start|stop}"exit 1
esac
exit 0# 添加VIP,修改内核参数(实现对内可见、对外隐藏),注意掩码必须是255.255.255.255
# 因为VIP是绑在环回网卡上(回环网卡离内核更近,数据包优先匹配)的,如果掩码不是4个255,则数据包在返回的时候匹配上了回环网卡,匹配不上真实网关,数据包发送不出去
#RS、DS 有同样的vip,同一个网段中拥有两个vip,客户端在网关发送arp广播需找vip时需要让RS不接受响应。
#arp_ignore 设置为1,意味着当别人的arp请求过来的时候,如果接收的设备没有这个ip,就不做出响应(这个ip在lo上,lo不是接收设备的进口)
#使用最好的ip来回应,什么是最好的ip?同一个网段内子网掩码最长的

RS网卡信息:

[root@el8 lvs]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.137.60/32 brd 192.168.137.60 scope global lo:0
       valid_lft forever preferred_lft forever
    inet 192.168.137.70/32 brd 192.168.137.70 scope global lo:1
       valid_lft forever preferred_lft forever
    inet 39.134.209.254/32 brd 39.134.209.254 scope global lo:254
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:3f:10:fe brd ff:ff:ff:ff:ff:ff
    inet 192.168.137.3/24 brd 192.168.137.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe3f:10fe/64 scope link
       valid_lft forever preferred_lft forever

查看lvs状态:

ipvsadm -Ln --persistent-conn
echo
ipvsadm -Ln --stats

如:

[root@el7 lvs]# sh watch-ipvsadm.sh
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port            Weight    PersistConn ActiveConn InActConn
  -> RemoteAddress:Port
TCP  192.168.137.60:80 wlc persistent 600
  -> 192.168.137.3:80             1         0           0          0         
  -> 192.168.137.4:80             1         0           0          0         
TCP  192.168.137.70:80 wlc persistent 600
  -> 192.168.137.3:80             1         0           0          0         
  -> 192.168.137.4:80             1         0           0          0         

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.137.60:80                   2      216        0     9006        0
  -> 192.168.137.3:80                    2      216        0     9006        0
  -> 192.168.137.4:80                    0        0        0        0        0
TCP  192.168.137.70:80                   9       61        0     3097        0
  -> 192.168.137.3:80                    9       61        0     3097        0
  -> 192.168.137.4:80                    0        0        0        0        0

ipvsadm管理命令:

#手工添加vip和dr规则
ip addr add $vip dev bond0
ipvsadm -A -t $vip:80 -s wrr
ipvsadm -a -t $vip:80 -r $rs1:80 -g
ipvsadm -a -t $vip:80 -r $rs2:80 -g#将某个RS的权重调为0:
ipvsadm -e -t 192.168.137.70:80 -r 192.168.137.3 -g -w 0#删除某个vip
ipvsadm -D -t 192.168.137.70:80

客户端测试:

curl -vo /dev/null "http://mytest.com/test.mp3" -H "User-Agent:mytest" -m 600 -x 192.168.137.60:80

vrrp抓包:

tcpdump -i ens33 vrrp -n

lvs tcpdump抓包:

tcpdump -i any -e -n -nn -s 0 '(host $lvs_vip or host $client_ip) and tcp port $service_port'

如:

 tcpdump -i any -e -n -nn -s 0 '(host 192.168.137.70 or host 192.168.137.1) and tcp port 80'

错误处理:

问题1:IPVS (cmd 1159,errno 2): No such file or directory

解决:ipvs cmd 1160 is IP_VS_SO_SET_DELDEST and cmd 1159 is IP_VS_SO_SET_ADDDEST so it appears to be attempting to delete the failed real server and then add the real server.

--end--

相关文章:

lvs DR模式调试

DS配置&#xff1a; # cat /etc/keepalived_docker/keepalived.conf ! Configuration File for keepalived global_defs {router_id LVS_70 # 设置lvs的id&#xff0c;在一个网络内应该是唯一的 }vrrp_instance VI_70 {state MASTER # 两个 DS&#xff0…...

Java线程池的优化策略与最佳实践

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云/阿里云/华为云/51CTO&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互…...

android面试:解释一下 AsyncTask是什么?

AsyncTask 是 Android 中用于处理异步操作的一个类&#xff0c;它允许在后台线程中执行任务&#xff0c;并在完成后将结果传递回主线程。AsyncTask 主要用于执行短时间的后台操作&#xff0c;例如网络请求、文件读写等&#xff0c;而不阻塞用户界面。 AsyncTask 的主要特点&am…...

Django+Vue3前后端分离学习(四)(登录功能实现)

1、序列化数据&#xff1a; 创建serializers.py的python文件 从rest_framework里导入serializers类&#xff1a; from rest_framework import serializers class LoginSerializer(serializers.Serializer):email serializers.EmailField(requiredTrue, error_messages{&qu…...

机器学习面试:SVM为什么使用对偶函数求解?

支持向量机&#xff08;SVM&#xff09;在求解过程中使用对偶函数的原因主要与优化问题的性质、计算效率以及模型的泛化能力有关。以下是对偶函数在 SVM 中使用的详细解释&#xff1a; 1. 原始问题与对偶问题 在 SVM 中&#xff0c;我们的目标是找到一个超平面来最大化分类间…...

RabbitMQ 入门教程

介绍 RabbitMQ 是一个消息中间件&#xff0c;它实现了 AMQP (Advanced Message Queuing Protocol) 协议。本教程将引导你通过几个简单的步骤来学习如何使用 RabbitMQ 发送和接收消息。 环境准备 1. 安装 RabbitMQ - 在你的系统上安装 RabbitMQ: https://www.rabbitmq.com/d…...

docker进阶 compose等

Docker Compose 简介&#xff1a; 比如有100个微服务&#xff0c;不需要手动启动每一个&#xff0c;可以使用docker compose定义运行多个容器&#xff0c;高效管理化。 定义、运行多个容器 YAML file配置文件 single command 命令 写docker-compose.yaml docker-compose …...

[详细建模已更新]2024数学建模国赛高教社杯A题:“板凳龙” 闹元宵 思路代码文章助攻手把手保姆级

A 题 “板凳龙” 闹元宵 “板凳龙”&#xff0c;又称“盘龙”&#xff0c;是浙闽地区的传统地方民俗文化活动。人们将少则几十条&#xff0c;多则上百条的板凳首尾相连&#xff0c;形成蜿蜒曲折的板凳龙。盘龙时&#xff0c;龙头在前领头&#xff0c;龙身和龙尾相随盘旋&#x…...

网络编程(TCP+网络模型)

【1】TCP 初版服务器 #include <stdio.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h> #include <unistd.h> #include <arpa/inet.h> #include <string.h…...

Docker Image 命令

文章目录 目录 文章目录 1 . Docker镜像是什么? 2 . 镜像命令详解 docker images docker tag docker pull docker rmi docker save 总结 1 . Docker镜像是什么? Docker image 本质上是一个 read-only 只读文件&#xff0c; 这个文件包含了文件系统、 源码、库文件…...

如何在IntelliJ IDEA中将Tab设置为4个空格

前言 IntelliJ IDEA是一个强大的开发工具&#xff0c;支持多种编程语言。为了保持代码整洁一致&#xff0c;开发者经常需要调整编辑器中的Tab和缩进设置。 步骤1: 打开设置 首先&#xff0c;启动IntelliJ IDEA。在主界面上方的菜单栏中找到 File&#xff08;文件&#xff09…...

ASP.NET Core 入门教学十五 异步编程

在ASP.NET Core中&#xff0c;异步编程是一种非常重要的技术&#xff0c;它可以提高应用程序的性能和响应能力。本教程将介绍如何在ASP.NET Core中使用异步编程。 1. 异步编程基础 异步编程允许程序在等待某些操作&#xff08;如I/O操作&#xff09;完成时继续执行其他任务&a…...

pycharm 2024.1下载、安装

下载 下载官网&#xff1a; Other Versions - PyCharm 选择需要的版本下载&#xff0c;这里以 2024.1 的版本为例 安装 双击下载好的安装程序&#xff0c;点击下一步 选择安装路径&#xff0c;最好是英文路径&#xff1b;然后下一步 点击完成 激活 网址&#xff1a; Some…...

实变函数精解【18】

文章目录 有限测度有限测度概率测度有限测度与概率测度的关系 σ \sigma σ-有限测度计数测度完备概率测度 参考文献 有限测度 首先&#xff0c;我们来明确“测度”的概念。在数学中&#xff0c;测度是一个将集合映射到非负实数&#xff08;通常是实数的扩展&#xff0c;包括正…...

【深入解析】AI工作流中的HTTP组件:客户端与服务端执行的区别

在当今快速发展的技术环境中&#xff0c;AI工作流的设计和实现变得愈发重要。尤其是在处理HTTP组件时&#xff0c;前端执行与后端执行之间的区别&#xff0c;往往会对系统的安全性和数据的准确性产生深远的影响。今天&#xff0c;我们就来深入探讨这一话题&#xff0c;揭示前端…...

用亚马逊云科技Graviton高性能/低耗能处理器构建AI向量数据库(上篇)

简介&#xff1a; 今天小李哥将介绍亚马逊推出的云平台4代高性能计算处理器Gravition&#xff0c;并利用该处理器构建生成式AI向量数据库。利用向量数据库&#xff0c;我们可以开发和构建多样化的生成式AI应用&#xff0c;如RAG知识库&#xff0c;特定领域知识的聊天机器人等。…...

调用火山云的语音生成TTS和语音识别STT

首先需要去火山云的控制台开通TTS和STT服务语音技术 (volcengine.com) 火山这里都提供了免费的额度可以使用 我这里是使用了java来调用API 目前我还了解到阿里的开源项目SenseVoice&#xff08;STT&#xff09;和CosyVoice(TTS)非常的不错&#xff0c;但是都是使用Python开发…...

中间件解析漏洞

一&#xff1a;IIS less-1 IIS6.X 步骤一&#xff1a;在iis的⽹站根⽬录新建⼀个名为x.asp的⽂件 步骤二&#xff1a;在x.asp中新建⼀个.txt⽂件,内容为<%now()%> asp代码,更改后缀为jpg 步骤三&#xff1a;在外部浏览器进行访问Window2003的ip/x.asp/1.jpg&#xff0…...

如何在Mac电脑上本地部署Stable Diffusion:详细教程(webUI)

Stable Diffusion是一款强大的AI生成图像模型&#xff0c;它可以基于文本描述生成高质量的图像。对于想要在本地运行此模型的用户来说&#xff0c;使用Mac电脑部署Stable Diffusion是一个非常吸引人的选择&#xff0c;特别是对于M1或M2芯片的用户。本文将详细介绍如何在Mac上本…...

FPGA随记——移位寄存器

数电知识——移位寄存器&#xff1a;移位寄存器——数电第六章学习-CSDN博客 移位寄存器在FPGA中&#xff1a;FPGA原理与结构&#xff08;5&#xff09;——移位寄存器&#xff08;Shift Registers&#xff09;-CSDN博客...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

Java并发编程实战 Day 11:并发设计模式

【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天&#xff0c;今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案&#xff0c;它们不仅提供了优雅的设计思路&#xff0c;还能显著提升系统的性能…...

五、jmeter脚本参数化

目录 1、脚本参数化 1.1 用户定义的变量 1.1.1 添加及引用方式 1.1.2 测试得出用户定义变量的特点 1.2 用户参数 1.2.1 概念 1.2.2 位置不同效果不同 1.2.3、用户参数的勾选框 - 每次迭代更新一次 总结用户定义的变量、用户参数 1.3 csv数据文件参数化 1、脚本参数化 …...