LVS-NAT + LVS-DR

news2024/9/18 18:21:02

LVS

现在lvs已经是linux内核标准的一部分,使用lvs可以达到的技术目标是:通过linux达到负载均衡技术和linux操作系统实现一个高性能高可用的linux服务器集群,他具有良好的可靠性,可延展性和可操作性,从而以低廉的成本实现最优的性能,Lvs是一个实现负载均衡集群开源软件项目,lvs从逻辑上可以分为调度层, server集群层,和共享存储

一个调度主机,有两个网卡

lvs的工作原理

1. 当用户向负载均衡调度器(director server)发起请求,调度器将请求发往内核空间
2. prerouting链首先会接受到用户请求,判断目标ip确定是本机ip,将数据包发往input链
3. IPVS是工作在input链上的,当用户请求到达input时,ipvs会将用户请求和自己定义好的集群服务器进行比对,如果用户请求就是定义的集群服务,那么此时ipvs会强行修改数据包里的目标ip地址以及端口,并将新的数据包发往POSTROUTING链
4. POSTROUTING链接收到数据包后,发现目标ip地址刚好是自己的后端服务器,那么通过选路,将数据包最终发送给后端服务器

lvs组成及术语

1.ipvs:

ip virtual server,一段代码工作在内核空间,ipvs,是真正生效实现
调度的代码(类似nginx中的proxy_pass)

2.ipvsadm

另一段是工作在用户空间,ipvsadm,负责为ipvs内核框架编写规则,定义
谁是集群服务,谁是后端真正的服务器(real server)类似nginx中的
upstrean

DS:前端负责均衡节点(负载均衡服务器)

RS:后端真实工作服务器(web服务器)

vip向外部直接面向用户请求,作为用户请求的目标ip地址(负载均衡的ip地址,提供给用户)

DIP Director Server Ip 和内部主机通讯的ip地址(负责与Real Server交互的内部Ip)
RIP Real Server Ip 后端服务器ip地址
CIP client IP 访问客户端ip地址

vip:对外,公网

dip:对内,局域网

lvs的工作模式

LVS-NAT模式

nat模式工作原理

1. 用户请求ds,此时请求的报文会先到内核空间prerouting链,此时报文ip为cip,目标ip为vip
2. prerouting检测发现数据包目标ip是本机,将数据包送到input链
3. ipvs对比数据包请求的服务是否为集群服务,如果是,修改数据包的目标ip地址为后端服务器的IP地址,然后将数据包发送给POSTROUTING链,此时报文ip为cip,目标ip为rip
4. POSTROUTING通过选路,将数据发送给Real Server
5. RealServer对比发现目标ip为自己的ip,开始构建响应报文发回给Director Server此时报文的源ip为RIP,目标ip为CIP
6. Derector Server在响应客户端前,会将源ip地址修改为自己的VIP,然后响应给客户端,目标ip为cip,此时报文源IP为VIP,目标ip为cip
nat模式的特性
1. Rs应该是私有地址,Rs网关必须指向DIP
2. DIP和RIP必须在同一个网段内
3. 请求和响应报文都应该经过Director Server,高负载场景中Director Server容易成为性能瓶颈
4. 支持端口映射
5. Rs可是使用任意操作系统
6. 缺陷,对Ds压力会比较大,请求和响应都需要经过ds,

nat环境搭建
主机名称ip地址功能
web01192.168.118.200rs
web02192.168.118.201realserver
nat

vip:192.168.10.100

dip:192.168.118.10

负载均衡调度器directorserver,ntp

dns192.168.118.110dns

web服务器:

下载nginx,在index.html写入内容,启动nginx,编写计划任务

yum  -y  install nginx

echo "web-----01" > /usr/share/nginx/html/index.html
[root@web01 ~]# nginx
[root@web01 ~]# crontab -e

30 3 * * * /usr/sbin/ntpdate 192.168.118.10   //时间服务器的IP

nat服务器:

需要两块网卡,再添加一块网卡

配置vip网卡:

1. 在编辑虚拟网络中创建桥接模式的网卡,并且桥接到有网的适配器上
2. 在vmware的虚拟主机资源管理器找到虚拟主机,右键菜单,设置
3. 添加新的网卡,自定义为刚才创建的桥接模式网卡
4. 此时在虚拟主机中使用ifconfig无法找到新的网卡
5. ip a能够查看到新的ens36网卡,没有路由
6. 编辑网卡配置
7. 重启network服务

同步时间,编写计划任务,配置时间服务器,启动服务,设置开机自启动

  142  yum -y install ntpdate.x86_64 
  143  ntpdate cn.ntp.org.cn
  144  which ntpdate
  145  crontab -e

* 2 * * * /usr/sbin/ntpdate cn.ntp.org.cn

  147  yum -y install ntp
  148  systemctl start ntpd
  149  systemctl enable ntpd

dns服务器:

[root@dns ~]# yum -y install bind

[root@dns ~]# vim /etc/named.conf     //添加any
[root@dns ~]# vim /etc/named.rfc1912.zones 

zone "yuanyu.zhangmin" IN {
        type master;
        file "yuanyu.zhangmin.zone";
        allow-update { none; };
};

[root@dns ~]# cd /var/named/
[root@dns named]# cp -p named.localhost yuanyu.zhangmin.zone
[root@dns named]# vim yuanyu.zhangmin.zone


[root@dns named]# named-checkconf /etc/named.conf
[root@dns named]# named-checkconf /etc/named.rfc1912.zones 
[root@dns named]# named-checkzone yuanyu.zhangmin.zone yuanyu.zhangmin.zone
[root@dns named]# systemctl restart named

client客户端:

[root@allow ~]# echo "nameserver 192.168.118.110" > /etc/resolve.conf
[root@allow ~]# ping nat.yuanyu.zhangmin -c2
PING nat.yuanyu.zhangmin (192.168.118.135) 56(84) bytes of data.
64 bytes from 192.168.118.135 (192.168.118.135): icmp_seq=1 ttl=64 time=0.639 ms
64 bytes from 192.168.118.135 (192.168.118.135): icmp_seq=2 ttl=64 time=0.305 ms

 

nat配置规则:在nat服务器配置

安装ipvsadm

[root@nat ~]# yum -y install ipvsadm.x86_64

查看所有的规则,如果已经配置好规则,重启之后也就没有了

# 清空以往的规则
[root@nat ~]# ipvsadm -C
# 查看规则
[root@nat ~]# ipvsadm -L -n
# 新增规则
[root@nat ~]# ipvsadm -A -t 192.168.10.100:80 -s rr
# 添加主机,即添加rs web01,web02添加规则
[root@nat ~]# ipvsadm -a -t 192.168.10.100:80 -r
192.168.118.200:80 -m
[root@nat ~]# ipvsadm -a -t 192.168.10.100:80 -r
192.168.118.201:80 -m
# 设置ip转发
[root@nat ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
# 设置生效
[root@nat ~]# sysctl -p
net.ipv4.ip_forward = 1      //支持IP转发了

web服务器网关配置:

临时修改web01和web02的网关,网关必须指向dip(调度服务器的对内的ip)

这也要求了rs ip和dip要在同一个网段,因为dip是要作为网关存在的

[root@web01 ~]# route del default
[root@web01 ~]# route add default gw 192.168.118.100
[root@web02 ~]# route del default
[root@web02 ~]# route add default gw 192.168.118.100

升级

lvs-nat模式的优点配置简单,缺点是请求和响应都必须经过ds,容易成为性能瓶颈
希望有这样的模式,请求的时候使用input链进行负载均衡,响应的时候就不要经过ds,直接由rs响应给客户端
在nat模式的时候,请求vip,接收vip的响应
构想 请求vip,接受rip响应,这是不允许 lvs-dr模式,但是我们可以在rs上也配置vip

LVS-DR模式

1.性能更优,回路不再经过ds
2.ds和rs为了保证用户响应,都要求配置统一的vip
3.由于rs是直接响应client,网关一定不能设置为ds 的dip
4.对rs的vip进行抑制,让ds的vip接收请求,rs的vip不接受请求
5.rs的vip绑定点lo回路网卡上
设置ds主机:192.168.118.202

1.在ens33上挂一个IP地址(vip)192.168.118.203,在rs上的vip和这个vip相同

    9  ifconfig ens33:0 192.168.118.203 broadcast 192.168.118.203 netmask 255.255.255.255 up

2.设置主机路由
   11  route add -host 192.168.118.203 dev ens33:0
3.  安装ipvsadm
   13  yum -y install ipvsadm

4.配置规则

    ipvsadm  -C  //清空规则
   14  ipvsadm -A -t 192.168.118.203:80 -s rr
   15  ipvsadm -a -t 192.168.118.203:80 -r 192.168.118.200 -g
   17  ipvsadm -a -t 192.168.118.203:80 -r 192.168.118.201 -g
   18  ipvsadm -Ln
注意:

rs不在需要指定端口,dr不支持端口映射,vip上是80端口,最终就是80端口
-m nat
-g  gateway
设置rs主机

1.在lo接口上绑定vip

2.设置主机路由

3.抑制rs接收请求

web01:

[root@web01 ~]# ifconfig lo:0 192.168.118.203 broadcast 192.168.118.203 netmask 255.255.255.255 up
[root@web01 ~]# route add -host 192.168.118.203 dev lo:0
[root@web01 ~]# ifconfig
抑制rs的vip接收请求

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

web02的操作与web01一样,可以使用脚本来操作:

[root@web02 ~]# cat arp.sh
ifconfig lo:0 192.168.118.203 broadcast 192.168.118.203 netmask 255.255.255.255 up
route add -host 192.168.118.203 dev lo:0

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

 

测试使用,查看状态

在浏览器上访问vip 192.168.118.203,在dr上查看详情

[root@dr ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.118.203:80                  6      140        0    39432        0
  -> 192.168.118.200:80                  3       12        0      518        0
  -> 192.168.118.201:80                  3      128        0    38914        0

 

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

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

相关文章

AQS的同步队列和条件队列原理

文章目录 二者区别实现原理同步队列原码-内部类Node源码-获取锁源码-释放锁条件队列原码-内部类Node源码-等待源码-唤醒Demo-比较典型的条件队列使用场景二者区别 首先,AQS中的 同步队列 和 条件队列 是两种不同队列: 目的不同:同步队列主要用于实现锁机制(也就是锁的获取…

4.3.2 C++ 平面拟合的实现

4.3.2 C 平面拟合的实现 参考教程: gaoxiang12/slam_in_autonomous_driving: 《自动驾驶中的SLAM技术》对应开源代码 (github.com) Eigen打印输出_打印eigen矩阵-CSDN博客 1. 编写 Plane fitting 1.1 创建文件夹 通过终端创建一个名为Plane_fitting的文件夹以保…

Cookie和Session的区别(详细讲解)

Session 和 Cookie 的区别 在网络通信过程中,使用的是HTTP协议,它是一种无状态协议,比如,在登录一个网站时,登录成功后,之后在访问这个网站的其他页面时,都需要重新登录,无法识别出…

[240812] X-CMD 发布 v0.4.5:更新 gtb、cd、chat、hashdir 模块功能

目录 📃Changelog✨ gtb✨ cd✨ chat✨ hashdir 📃Changelog ✨ gtb 调整了 fzf 预览窗口中书籍文本的显示效果,通过识别文本中的特殊字符、日期、章节标题等信息,为其赋予不同的颜色。 ✨ cd cd 模块新增功能:在找…

网络编程day03 20240813

一、相关练习 1、通过w(红色臂角度增大)s(红色臂角度减小)d(蓝色臂角度增大)a(蓝色臂角度减小)按键控制机械臂 机械臂需要发送16进制数,共5个字节,协议如下: 0xff 0x0…

数据库核心技术:存储与索引概览

文章目录 存储与索引技术概览存储结构索引技术 MySQL存储结构索引技术事务与锁优势 PostgreSQL存储结构索引技术事务与锁优势 Oracle存储结构索引技术事务与锁优势 SQL Server存储结构索引技术事务与锁优势 选型考量存储结构索引技术事务与锁的支持综合因素未来趋势 结语 数据库…

【微信小程序】网络数据请求

1. 小程序中网络数据请求的限制 2. 配置 request 合法域名 3. 发起 GET 请求 调用微信小程序提供的 wx.request() 方法,可以发起 GET 数据请求,示例代码如下: 4. 发起 POST 请求 调用微信小程序提供的 wx.request() 方法,可以发起 POST 数据请求,示例代码如下: 5. …

今日头条的账号id在哪里看(网页版)

今日头条的账号id在哪里看(网页版) 1.https://mp.toutiao.com/profile_v4/index2.登录今日头条账号3.设置->头条号ID 1.https://mp.toutiao.com/profile_v4/index 2.登录今日头条账号 3.设置->头条号ID 打开下方链接: https://mp.to…

进程的执行与结束

一、文件的读写 1、fork之前open 子进程会继承父进程已打开的文件相关信息 所以,此时父子进程会影响一个offset值 2、fork之后open 父子进程各自有各自的打开文件的信息,相互之间不会有影响。 二、 进程的执行 //进程运行时,典型场景 1…

量化策略开发步骤系列(3)关键投资组合指标

量化策略开发步骤系列(3)关键投资组合指标 投资组合指标波动性夏普比率最大回撤赢/输百分比每笔交易的平均利润/亏损每期交易次数风险价值(VaR) 这是量化交易系列文章的第二系列——量化策略开发步骤,第一系列请参考专…

Prometheus+Grafana-3-Nginx监控-Redis监控

一、监控Nginx 1.Nginx需要开启stub_status 这里我的nginx容器名为mynignx,进入容器查看。 docker exec -it mynginx bash #进入容器 nginx -v 2>&1 | grep -o with-http_stub_status_module #查看 修改nginx.conf ...location /stub_status {stub_stat…

华为od统一考试B卷【AI面板识别】python实现

思路 n int(input())class Light:def __init__(self, id, x1, y1, x2, y2):self.id idself.x1 x1self.y1 y1self.x2 x2self.y2 y2self.height y2 - y1def get_lights_info(n):lights []for _ in range(n):id, x1, y1, x2, y2 map(int, input().strip().split())lights…

量产工具——复习及改进(后附百问网课程视频链接)

目录 一、函数的使用 1.显示系统 1.1 mmap函数 2.输入系统 2.1 ts_setup()函数 2.2 ts_read()函数 2.3 socket()函数 2.4 bind()函数 2.5 recvfrom()函数 2.6 inet_aton()函数 2.7 sendto()函数 2.8 pthread_create()函数 2.9 pthread_cond_signal()函数 2.10 pthre…

思科路由器的基本配置1

#路由技术基础# #路由器的基本配置1# #1调整超级终端的参数 #2退出配置向导,输入“NO”即可进入正常配置方式 #3路由器的模式切换 Router> !进入用户模式 Router>enable !进入特权模…

opencv-python实战项目一:获取鼠标框选区域的颜色

文章目录 一:简介二:框选区域选择颜色方案三、算法实现步骤3.1 按鼠标事件截取图像3.2将图像模糊后转化为hsv并求均值3.3 判断hsv处于何种颜色 四:整体代码实现五,效果: 一:简介 在计算机视觉领域,颜色检测…

19-ESP32-C3加大固件储存区

1默认编译情况。 2、改flash4M。ESP-IDF Partition Table Editor修改。 3、设置输入Partition Table 改自定义.CSV。保存。 4、查看命令输入Partition Table Editor打开-分区表编辑器UI。按图片增加。 nvs,data,nvs,0x9000,0x6000,, phy_init,data,phy,0xF000,0x1000,, factory…

计算机毕业设计Hadoop+Hive居民用电量分析 居民用电量可视化 电量爬虫 机器学习 深度学习 大数据毕业设计 Spark

《Hadoop居民用电量分析》开题报告 一、研究背景与意义 能源问题在全球范围内一直是热点议题,尤其是随着居民生活水平的提高和城市化进程的加快,居民用电量急剧增长,对电力系统的稳定运行和能源管理提出了更高要求。如何科学合理地管理和分…

Hive3:识别内部表、外部表及相互转换

一、识别方法 查看内部表信息 desc formatted stu;查看外部表信息 desc formatted test_ext1;通过Table Type对应的值,我们可以区分外部表和内部表。 二、相互转换 内部表转外部表 alter table stu set tblproperties(EXTERNALTRUE);外部表转内部表 alter ta…

PCIe学习笔记(21)

读请求的数据返回(Data Return for Read Requests) •针对内存读取请求的单个完成可能提供少于请求的全部数据量,只要对于给定请求的所有完成在组合起来时返回了读取请求中请求的数据量。 ◦不同请求的完成不能合并。 ◦I/O和Configuratio…

Qt QCustomPlot 图形库详解

文章目录 原文1. 下载qcustomplot.h与qcustomplot.cpp后,将代码文件拷贝到本地工程,并添加到工程项目2. 看到文件后就是添加成功了3. 在界面中拖拽一个Widget控件,选中并右键选中“提升为”,将原来的Widget控件已成为一个带坐标的 CustomPlot 控件4. 添加printsupport原文 …