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

【LVS】防火墙mark标记解决调度问题

环境准备

五台主机

主机名称ip地址回环地址
client.timinglee.orgeth0:172.25.254.200
router.timinglee.org

eth0:172.25.254.100

eth1:192.168.0.100

lvs.timinglee.orgeth1:192.168.0.50lo:192.168.0.200/32

web1.timinglee.org

eth0:192.168.0.10lo:192.168.0.200/32
web2.timinglee.orgeth0:192.168.0.20lo:192.168.0.200/32
作用:RS安装mod_ssl模块,让RS支持https
[root@web1 ~]# yum install mod_ssl -y
[root@web1 ~]# systemctl restart httpd[root@web2 ~]# yum install mod_ssl -y
[root@web2 ~]# systemctl restart httpd

1.防火墙标签解决轮询错误

1.1轮询规则中可能会遇到的错误

  • 以http和https为例,当我们在RS中同时开放80和443端口,默认控制是分开轮询的,这样就出 现了一个轮询错乱的问题

问题呈现 

lvs中设置调度,因为我们要调度80和443两个端口所以我们需要设定两组策略
]  # ipvsadm -C[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:443 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20 -g
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 rr-> 192.168.0.10:80              Route   1      0          0         -> 192.168.0.20:80              Route   2      0          0         
TCP  192.168.0.200:443 rr-> 192.168.0.10:443             Route   1      0          0         -> 192.168.0.20:443             Route   1      0          0   

 测试出现问题

[root@client ~]# curl http://192.168.0.200;curl -k https://192.168.0.200
web2 - 192.168.0.20
web2 - 192.168.0.20
# 同时访问192.168.0.20-->不合理

1.2.防火墙标记解决轮询调度问题

[root@lvs ~]# ipvsadm -C
FWM:FireWall Mark
MARK target 可用于给特定的报文打标记,--set-mark value
其中:value 可为0xffff格式,表示十六进制数字借助于防火墙标记来分类报文,而后基于标记定义集群服
务:可将多个不同的应用使用同一个集群服务进行调度[root@lvs ~]# iptables -t mangle -Ln
iptables v1.8.8 (nf_tables): chain `n' in table `mangle' is incompatible, use 'nft' tool.[root@lvs ~]# iptables -t mangle -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         Chain INPUT (policy ACCEPT)
target     prot opt source               destination         Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination   # 在vs调度器中设定端口标签,人为80和443是一个整体
[root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66[root@lvs ~]# iptables -t mangle -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
MARK       tcp  --  0.0.0.0/0            192.168.0.200        multiport dports 80,443 MARK set 0x42Chain INPUT (policy ACCEPT)
target     prot opt source               destination         Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination           # 设定调度规则
[root@lvs ~]# ipvsadm -A -f 66 -s rr
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.0.10 -g
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.0.20 -g
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  66 rr-> 192.168.0.10:0               Route   1      0          0         -> 192.168.0.20:0               Route   1      0          0    

测试结构

[root@client ~]# curl -k https://192.168.0.200;curl 192.168.0.200
web1 - 192.168.0.10
web2 - 192.168.0.20
[root@client ~]# curl -k https://192.168.0.200;curl 192.168.0.200
web1 - 192.168.0.10
web2 - 192.168.0.20
[root@client ~]# curl -k https://192.168.0.200;curl 192.168.0.200
web1 - 192.168.0.10
web2 - 192.168.0.20

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 5、关于kali搭建vulhub
  • Datawhale X 魔搭 AI夏令营第四期 | AIGC文生图——可图Kolors-LoRA风格故事 Task1笔记
  • 雪花算法(Snowflake Algorithm)
  • C/C++字符串函数
  • LVS (Linux virual server)
  • 【ARM】ARM Cortex 处理器详细讲解
  • Upload 上传图标不显示
  • 【C#】StringComparer
  • 智能电话机器人的优势与挑战
  • 在mac上通过 MySQL 安装包安装 MySQL 之后,终端执行 mysql 命令报错 command not found: mysql
  • Pytorch-张量的创建
  • 电脑装机-热插拔
  • P1012 [NOIP1998 提高组] 拼数
  • java基础学习笔记1
  • 50 mysql 的 “where 1 = 1“ 的优化处理
  • Android开源项目规范总结
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • input的行数自动增减
  • Javascript Math对象和Date对象常用方法详解
  • k个最大的数及变种小结
  • markdown编辑器简评
  • Solarized Scheme
  • storm drpc实例
  • ubuntu 下nginx安装 并支持https协议
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 那些被忽略的 JavaScript 数组方法细节
  • 前嗅ForeSpider中数据浏览界面介绍
  • 使用agvtool更改app version/build
  • 使用common-codec进行md5加密
  • 听说你叫Java(二)–Servlet请求
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 选择阿里云数据库HBase版十大理由
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #70结构体案例1(导师,学生,成绩)
  • (~_~)
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (万字长文)Spring的核心知识尽揽其中
  • (五)Python 垃圾回收机制
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)C#调用WebService 基础
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net 验证控件和javaScript的冲突问题