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

均衡负载集群(LBC)-1

均衡负载集群(LBC)

客户–>通过Internet—>负载调度器—>n台真实服务器

负载调度器:

  • 软件:LVS;Nginx;Haproxy
  • 硬件:F5;

LVS架构:

  • 使用到C/S(B/S)架构

Nginx的负载均衡:

  • 只能使用在B/S架构上

LVS的工作层级

  • 用户:ipvsadm–>命令行管理工具
  • 内核:ipvs

1、LVS概述

LVS相关原理

  • LVS的组成
    • IPVS:运行内核空间
    • IPVSADM:运行在用户空间,管理集群服务器的命令工具
  • LVS原理:根据用户请求的套接字判断,分流至真实服务器的工作模块

LVS工作方式:

  • 工作模式:
    • NAT模式
    • TUN模式
    • DR模式
    • GitHub–>正在开发;

实验主机的配置

  • 规划:
    • 负载调度器:192.168.75.10
    • 后端服务器:192.168.75.11/12
  • 服务器配置要求:
    • 系统:centos6.x都可以
    • 网卡:双网卡
      • eth0:充当外网:192.168.75.0/24
      • eth1:充当内网:172.24.254.0/24
    • 备注:这个是是实验的预配置

构建一台主机node0–>然后复制出来5台用于后面的实验

#修改一下主机名-->永久修改
[root@node0 ~]# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node0
#修改一下主机名
[root@node0 ~]# hostname LVS-SERVER
[root@node0 ~]# su -
#关闭一下NetworkManager-->关闭网卡的守护进程
#关闭一下网卡的守护进程-->Centos6.8需要关闭;我的实验环境是没有的;使用的是Centos6.4
[root@LVS-SERVER ~]# service NetworkManager stop#配置网卡公网ip
[root@LVS-SERVER ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.75.10
NETMASK=255.255.255.0
GATEWAY=192.168.75.2
#配置内网ip
[root@LVS-SERVER ~]# cd /etc/sysconfig/network-scripts/
[root@LVS-SERVER network-scripts]# cp -a ifcfg-eth0 ifcfg-eth1
[root@LVS-SERVER network-scripts]# vim ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.25.254.10
NETMASK=255.255.255.0
#重启网络
[root@LVS-SERVER network-scripts]# service network restart#配置光盘yum源
[root@LVS-SERVER network-scripts]# cd /etc/yum.repos.d/
[root@LVS-SERVER yum.repos.d]# vim local.repo 
[local]
name=local_repo
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
#配置自动开机挂载光盘
[root@node0 ~]# vim /etc/fstab 
...........#在末行添加以下内容
/dev/cdrom      /mnt/cdrom      iso9660 defaults        0       0#关闭iptables和selinux
[root@node0 ~]# service iptables stop
[root@node0 ~]# chkconfig iptables off
[root@node0 ~]# getenforce 
Disabled#关闭对应的ARP响应以及公告功能--->这个是可选选--->先把它所有的写进内核;#需要的时候打开
[root@node0 ~]# vim /etc/sysctl.conf 
..............#在末行添加如下几行
#关闭ARP功能
#net.ipv4.conf.all.arp_ignore = 1
#net.ipv4.conf.all.arp_announce = 2_
#net.ipv4.conf.default.arp_ignore = 1
#net.ipv4.conf.default.arp_announce = 2
#net.ipv4.conf.lo.arp_ignore = 1
#net.ipv4.conf.lo.arp_announce = 2#使用命令重新读取
[root@node0 ~]# sysctl -p

2、LVS-DR模式

工作逻辑图
客户–>与后端、LVS都处于同一个网段当中;

用户–>访问LVS服务器–>找后端服务器

二层MAC地址转发–>同一个IP被后端服务器隐藏了;

模式的特点:

  • 集群节点:必须在一个网络当中,集群节点必须处于同一个广播域中
  • 真实服务器网关指向路由器
  • RIP既可以是私网地址,又可以是公网IP
  • 负载调度器只负责入站请求,压力是最小的;
  • 大大减轻负载调度器的压力,支持更多的服务器节点
  • 不能支持端口映射

ARP的响应级别

  • arp-ignore
    • 0:只要本机配置有相应的IP地址就有响应
    • 1:仅在请求的目标地址配置在请求到达的网络接口上时,才给与响应

ARP的通告行为

  • arp-announce
    • 0:将本机任何网络接口上的任何地址都向外通告
    • 1:尽可能避免像目标网络通告与其网络不匹配的地址信息表
    • 2:仅向目标网络通告与其网络相匹配的地址信息

LVS-DR模式实验

  • 负载调度器配置如下—>使用是的centos7.x
    • 服务器:192.168.75.130
#首先关闭一下网卡的守护进程
[root@node0 ~]# systemctl stop NetworkManager
[root@node0 ~]# systemctl disable NetworkManager#创建一个eth0:0用来充当集群入口接口
[root@node0 ~]# cd /etc/sysconfig/network-scripts/
[root@node0 network-scripts]# cp ifcfg-ens32 ifcfg-ens32:0#配置一个虚拟ip
[root@node0 network-scripts]# vim ifcfg-ens32:0
TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens32:0"				#注意修改网卡名
DEVICE="ens32:0"			
ONBOOT="yes"
IPADDR="192.168.75.100"		#这个就是虚拟ip-->自己随便创建的
PREFIX="24"#然后把子接口拉起来
[root@node0 network-scripts]# ifup ens32:0#关闭网卡重定向功能
[root@node0 network-scripts]# cd
[root@node0 ~]# vim /etc/sysctl.conf 
............#在末行添加如下内容够
#关闭网卡重定向功能
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0#刷新配置文件
[root@node0 ~]# sysctl -p#重载ipvs模块
[root@node0 ~]# modprobe ip_vs#安装ipvsadmin命令行工具
[root@node0 ~]# yum -y install ipvsadm
  • 后端服务器配置—>这里使用两台服务器–>两台服务器的配置完全是一样的
    • 192.168.75.131/132
    • 两台服务器分别是安装httpd
      • 创建一个页面用于实验区分
#关闭一下网卡的守护进程
[root@Node1 ~]# systemctl stop NetworkManager
[root@Node1 ~]# systemctl disable NetworkManager#配置一个环回口
[root@Node1 ~]# cd /etc/sysconfig/network-scripts/
[root@Node1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@Node1 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.75.100			#配置虚拟IP-->这个ip和调度服务器的ip是一样的
NETMASK=255.255.255.255			#广播全部是255
...............
#拉起来网卡lo:0
[root@Node1 ~]# systemctl restart network#调整一下内核参数
[root@Node1 network-scripts]# cd 
[root@Node1 ~]# vim /etc/sysctl.conf 
..........
#关闭ARP功能
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2_
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 3#重新读取一下
[root@Node1 ~]# sysctl -p
#添加一个路由-->#如果有人来访问这个ip就把它丢给lo:0网卡
[root@node2 ~]# route  add  -host 192.168.75.100 dev lo:0#然后配置开机自启
[root@node2 ~]# echo "route  add  -host 192.168.75.100 dev lo:0" >> /etc/rc.local #安装一下httpd
[root@Node1 ~]# yum -y install httpd#启动httpd
[root@Node1 ~]# systemctl start httpd.service 
[root@Node1 ~]# systemctl enable httpd.service #修改默认页面
[root@Node1 ~]# vim /var/www/html/index.html
this is node1-131#测试一下是否能够访问
[root@Node1 ~]# curl localhost
this is node1-131
  • 最后回到调度服务器node0配置
    • 192.168.75.130
    • 开始创建lvs集群
#查看一下当前集群内容--->还没有创建,因此没有任何集群信息
[root@node0 ~]# ipvsadm -v
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)#添加一下集群
-->-A是添加一个集群
-->-t是指定一个虚拟ip以及端口
-->-s:指定轮询模式为rr
[root@node0 ~]# ipvsadm -A -t 192.168.75.100:80 -s rr #添加集群子节点
-->-a:添加子节点
-->-r:指定子节点的真实ip以及端口
-->-g:指定了是DR模式
[root@node0 ~]# ipvsadm -a -t 192.168.75.100:80 -r 192.168.75.131:80 -g#查看一下集群的信息
[root@node0 ~]# 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.75.100:80 rr-> 192.168.75.131:80            Route   1      0          0         -> 192.168.75.132:80            Route   1      0          0  [root@node0 ~]# 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.75.100:80                   2       33        0     6972        0-> 192.168.75.131:80                   1        6        0      360        0-> 192.168.75.132:80                   1       27        0     6612        0

测试一下

http://192.168.75.100/

3、LVS-NAT模式

工作逻辑图:

用户—>访问LVS服务器

  • 源是自己,目的是LVS

LVS—>访问后端服务器

  • LVS–>通过DNAT–>把目的地址修改成后端服务器
  • 后端返回–>也是通过SNAT–>给到LVS–>然后再给到用户;

DNAT:目的地址转换

SNAT:源地址转换;

NAT模式的特点:

  • 集群节点,必须在一个网络中
  • 真实服务器必须将网关指向负载调度器
  • RIP 通常都是私有 P,仅用于各个集群节点通信
  • 负载调度器必须位于客户端和真实服务器之间,充当网关
  • 支持端口映射
  • 负载调度器操作系统必须是 Linux,真实服务器可以使用任意系统
  • 进出数据报文都要进过负载调度器机器,压力较大

实验架构图:

客户端--->路由器--->后端服务器

实验环境的构建:

  • 负载调度器:192.168.75.110

  • 后端服务器:192.168.75.130

    • 网络类型:仅主机模式:172.25.254.130;
    • 虚拟机硬件配置:
      • 硬件:2U–>CPU
      • 内存:2G
      • 网卡两张–>不同网段
        • 192.168.75.0/24–>充当公网
        • 172.25.254.0/24–>充当私网
    • 虚拟机软件配置:
  • 后端服务器:192.168.75.131

LVS负载调度器配置

  • LVS负载调度服务器:Centos6.x
  • 双网卡:192.168.75.110–>充当外网
    • 172.25.254.110–>充当内网和两台后端服务器130和131互通
#关闭selinux和防火墙
[root@localhost ~]# getenforce 
Disabled[root@localhost ~]# service iptables stop
[root@localhost ~]# chkconfig iptables off#关闭一下网卡的守护进程-->Centos6.8需要关闭;我的实验环境是没有的;使用的是Centos6.4
[root@localhost ~]# service NetworkManager stop#配置光盘yum源
[root@localhost ~]# vim /etc/yum.repos.d/local.repo 
[local]
name=local_repo
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
#挂载yum源
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/#配置网络-->#公网网络-->如下
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-eth0 
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.75.110
NETMASK=255.255.255.0#私网网络如下-->eth1是使用ip a s 可以看出内核识别的网卡名;直接复制出来修改ip
[root@localhost network-scripts]# cp -a ifcfg-eth0 ifcfg-eth1
[root@localhost network-scripts]# vim ifcfg-eth1
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.25.254.110
NETMASK=255.255.255.0#重启网络
[root@localhost network-scripts]# service network restart#关闭网卡的重定向功能
[root@localhost network-scripts]# vim /etc/sysctl.conf #在文件的末行添加
#关闭网卡重定向
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth1.send_redirects = 0#开启路由转发功能
[root@localhost ~]# vim /etc/sysctl.conf 
..........7 net.ipv4.ip_forward = 1
........#查看一下配置是否生效
[root@localhost network-scripts]# sysctl -p#重新挂载ipvs模块
[root@localhost network-scripts]# modprobe ip_vs
#安装ipvsadm命令行工具
[root@localhost network-scripts]# yum -y install ipvsadm#查看当前的ipvs集群内容
[root@localhost network-scripts]# ipvsadm -v#然后开启防火墙
[root@localhost ~]# service iptables start#一定要先清楚一下防火墙规则-->然后在设置防火墙规则
[root@localhost ~]# iptables -F#设置防火墙规则#添加防火墙规则:当源地址是内网网段,并且出口网卡为eth0的时候,进行SNAT转换,转换源地址为外网网卡地址
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 172.25.254.0/24 -o eth0 -j SNAT --to-source 192.168.75.110#查看规则是否生效
[root@localhost ~]# iptables -t nat -L
.........#看到这一行代表成功
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  172.25.254.0/24      anywhere            to:192.168.75.110 #添加集群-->添加ipvsadm的TCP集群-->指定规则是轮询
[root@localhost ~]# ipvsadm -A -t 192.168.75.110:80 -s rr#为集群添加节点-->-m指定的是LVS的nat模式
[root@localhost ~]# ipvsadm -a -t 192.168.75.110:80 -r 172.25.254.130:80 -m
[root@localhost ~]# ipvsadm -a -t 192.168.75.110:80 -r 172.25.254.131:80 -m#查看一下集群内容
[root@localhost ~]# 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.75.110:80 rr-> 172.25.254.130:80            Masq    1      0          0         -> 172.25.254.131:80            Masq    1      0          0  #把集群保存到配置文件,开启持久化
[root@localhost ~]# service ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [  OK  ]#设置开机自启动
[root@localhost ~]# chkconfig ipvsadm on

后端服务器131/132配置

  • 安装httpd
  • 注意网段是172.25.254.0/24
  • 注意添加网关地址:
#查看一下ip
[root@Node1 ~]# ip a
.........
inet 172.25.254.131/24 brd 172.25.254.255 scope global noprefixroute ens32
........#安装httpd
[root@Node1 ~]# yum -y install httpd#修改默认页面
[root@Node1 ~]# vim /var/www/html/index.html
this is 131.index#启动apaceh
[root@Node1 ~]# systemctl start httpd
[root@Node1 ~]# curl  localhost
this is 131.index#把网关指定到调度服务器ip
[root@Node1 ~]# route add default gw 172.25.254.110
[root@Node1 ~]# route -n 

最后浏览器访问–>到这里位置实验成功

http://192.168.75.110/

4、LVS-TUN模式

工作逻辑图:

客户端、LVS、后端–>大家都是公网地址

客户–>访问LVS—>

数据包的二次封装;

模式的特点

  • 集群节点不必位于同一个物理网络但必须都拥有公网 IP (或都可以被路由)
  • 真实服务器不能将网管指向负载调度器
  • RIP 必须是公网地址
  • 负载调度器只负责入站请求
  • 不支持端口映射功能
  • 发送方和接收方必须支持道功能
http://www.lryc.cn/news/5344.html

相关文章:

  • WebSocket
  • GA-PEG-GA,Glutaric Acid-PEG-Glutaric Acid,戊二酸-聚乙二醇-戊二酸供应
  • 使用sqlmap + burpsuite sql工具注入拿flag
  • 替代AG9300|替代NCS8823|CS5260 Type-C转VGA视频转换方案
  • 乐鑫特权隔离机制的 OTA 固件升级
  • C++数据结构 —— 二叉搜索树
  • Maven面试题及答案
  • WebRTC系列-Qos系列之接收放RTX处理
  • 国内能否炒伦敦金,2023国际十大正规伦敦金交易平台排名
  • react路由 - react-router-dom
  • 01-RTOS
  • 信息安全管理
  • 深度学习tips
  • 2023-2-13 刷题情况
  • [HSCSEC 2023] rev,pwn,crypto,Ancient-MISC部分
  • SpringBoot 接入 Spark
  • 在线支付系列【23】支付宝开放平台产品介绍
  • Python绝对路径和相对路径详解
  • 基于多进程的并发编程
  • Flask入门(4):CBV和FBV
  • Qt OpenGL(三十九)——Qt OpenGL 核心模式-在雷达坐标系中绘制飞行的飞机
  • 系统应用 odex 转 dex
  • 【GPLT 三阶题目集】L3-013 非常弹的球
  • vue项目第三天
  • 【渝偲医药】实验室关于核磁共振波谱NMR的知识(原理、用途、分析、问题)
  • 教你文本生成图片——stablediffusion
  • C语言学习笔记-命令行参数
  • ASEMI代理FGH60N60,安森美FGH60N60车规级IGBT
  • http409报错原因
  • 设计模式:适配器模式(c++实现案例)