概述:
在大规模互联网应用中,负载均衡设备是必不可少的一个节点,源于互联网应用的高并发和大流量的冲击压力,我们通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务器(数据库、缓存等等)
一、负载均衡的作用
负载均衡设备的任务就是作为应用服务器流量的入口,首先挑选最合适的一台服务器,然后将客户端的请求转发给这台服务器处理,实现客户端到真实服务端 的透明转发。最近几年很火的「云计算」以及分布式架构,本质上也是将后端服务器作为计算资源、存储资源,由某台管理服务器封装成一个服务对外提供,客户端 不需要关心真正提供服务的是哪台机器,在它看来,就好像它面对的是一台拥有近乎无限能力的服务器,而本质上,真正提供服务的,是后端的集群。
一个典型的互联网应用的拓扑结构是这样的:
二、负载均衡的类型
负载均衡可以采用硬件设备,也可以采用软件负载。
商用硬件负载设备成本通常较高(一台几十万上百万很正常),所以在条件允许的情况下我们会采用软负载,软负载解决的两个核心问题是:选谁、转发,其中最著名的是LVS(Linux Virtual Server)。
三、软负载——LVS
LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。
LVS的转发主要通过修改IP地址(NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR模式)来实现。
LVS的工作模式主要有4种:
DR
NAT
TUNNEL
Full-NAT
这里挑选常用的DR简单介绍一下:
请求由LVS接收,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过LVS
DR模式下需要LVS和绑定同一个VIP(RS通过将VIP绑定在loopback实现)
一个请求过来时,LVS只需要将网络帧的MAC地址修改为某一台RS的MAC,该包就会被转发到相应的RS处理,注意此时的源IP和目标IP都没变,LVS只是做了一下移花接木
RS收到LVS转发来的包,链路层发现MAC是自己的,到上面的网络层,发现IP也是自己的,于是这个包被合法地接受,RS感知不到前面有LVS的存在。而当RS返回响应时,只要直接向源IP(即用户的IP)返回即可,不再经过LVS,DR模式是性能最好的一种模式
四、根据ipvsadm工具来实战配置DR模型的实现
命令的主要配置步骤:
Director:
# iptables -t filter -F
# ifconfig eth0:0 VIP up
# route add -host VIP dev eth0:0
RSs:
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
# ifconfig lo:0 VIP netmask 255.255.255.255 broadcast VIP up
# route add -host VIP dev lo:0
Director:
# ipvsadm -A -t IP:PORT -s SCHEDULER
# ipvsadm -a -t IP:PORT -r RS1 -g -w WEIGHT
虚拟环境vmware对DR模型的实现
1.LVS负载均衡器,即VIP和DR的机器
清空防火墙设置(避免和lvs控制器冲突):
# iptables -t filter -F
安装ipvsadm管理工具
# yum install -y ipvsadm
添加两块网卡
DR:
DIP:192.168.8.100
DEVICE=eth0
IPADDR=192.168.8.100
BROADCAST=192.168.8.255
NETMASK=255.255.255.0
GATEWAY=192.168.8.254
NETWORK=192.168.8.0
VIP:192.168.8.40
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-eth0 ifcfg-eth1
# vim ifcfg-eth1
DEVICE=eth1
IPADDR=192.168.8.40
BROADCAST=192.168.8.255
NETMASK=255.255.255.0
GATEWAY=192.168.8.254
NETWORK=192.168.8.0
开启路由转发功能
# vim /etc/sysctl.conf
# sysctl -p
将访问192.168.8.40的路由转发至eth1
# route add -host 192.168.8.40 dev eth1
清空规则
# ipvsadm -C
2.rs配置
rs1和rs2都安装apache服务,分别当做web1和web2
# yum install -y httpd
# cd /etc/httpd/conf.d/
删除默认页面
# rm welcome.conf -f
# vim /var/www/html/index.html
<h1>meb2 192m168.8.102</h1>
rs1
192.168.8.101
# cd /etc/sysconfig/network-scripts/
# vim ifcfg-eth0
IPADDR=192.168.8.101
NETWORK=192.168.8.0
NETMASK=255.255.255.0
GATEWAY=192.168.8.254
BROADCAST=192.168.8.255
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-lo ifcfg-lo:0
# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.8.40
NETMASK=255.255.255.255
BROADCAST=192.168.8.40
ONBOOT=yes
NAME=loopback
# service network restart
将访问192.168.8.40的数据转发到lo:0回环口上
# route add -host 192.168.8.40 dev lo:0
并验证配置是否生效
rs2
192.168.8.102
# cd /etc/sysconfig/network-scripts/
# vim ifcfg-eth0
IPADDR=192.168.8.101
NETWORK=192.168.8.0
NETMASK=255.255.255.0
GATEWAY=192.168.8.254
BROADCAST=192.168.8.255
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# cp ifcfg-lo ifcfg-lo:0
# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.8.40
NETMASK=255.255.255.255
BROADCAST=192.168.8.40
ONBOOT=yes
NAME=loopback
# service network restart
# route add -host 192.168.8.40 dev lo:0
3.对dr进行配置
# ipvsadm -A -t 192.168.8.40:80 -s rr
# ipvsadm -a -t 192.168.8.40:80 -r 192.168.8.101 -g
# ipvsadm -a -t 192.168.8.40:80 -r 192.168.8.102 -g
# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.8.40:80 rr
-> 192.168.8.101:80 Route 1 0 0
-> 192.168.8.102:80 Route 1 0 0
通过同网段的访问可以看到已经实现了负载轮询访问
真实服务器环境实现DR模型
1.DR和VIP配置
清空防火墙设置(避免和lvs控制器冲突):
# iptables -t filter -F
安装ipvsadm管理工具
# yum install -y ipvsadm
机器为dell r720的服务器,有4块网卡,此处我们使用其中的EM1和EM2两块网卡
DR:
DIP:192.168.8.70
DEVICE=em1
IPADDR=192.168.8.70
BORADCAST=192.168.8.255
GATEWAY=192.168.8.254
NETMAST=255.255.255.0
VIP:192.168.8.68
DEVICE=em2
IPADDR=192.168.8.68
BROADCAST=192.168.8.255
GATEWAY=192.168.8.254
NETMASK=255.255.255.0
开启路由转发功能
# vim /etc/sysctl.conf
配置 net.ipv4.ip_forward = 1
# sysctl -p
将访问192.168.8.68的路由转发至EM1
# route add -host 192.168.8.68 dev em2
清空规则
# ipvsadm -C
2.rs配置
rs1和rs2都安装apache服务,分别当做web1和web2
# yum install -y httpd
# cd /etc/httpd/conf.d/
删除默认页面
# rm welcome.conf -f
# vim /var/www/html/index.html
<h1>meb2 192m168.8.102</h1>
修改默认apache访问端口为8888
默认yum方式安装apache配置文件的位置# vim /etc/httpd/conf/httpd.conf
# vim /etc/httpd/httpd.conf
Listen 8888
重启使配置生效
# service httpd restart
rs1
192.168.8.101
# cd /etc/sysconfig/network-scripts/
# vim ifcfg-eth0
IPADDR=192.168.8.101
NETWORK=192.168.8.0
NETMASK=255.255.255.0
GATEWAY=192.168.8.254
BROADCAST=192.168.8.255
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-lo ifcfg-lo:0
# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.8.68
NETMASK=255.255.255.255
BROADCAST=192.168.8.68
ONBOOT=yes
NAME=loopback
# service network restart
将访问192.168.8.68的数据转发到lo:0回环口上
# route add -host 192.168.8.68 dev lo:0
并验证配置是否生效
rs2
192.168.8.102
# cd /etc/sysconfig/network-scripts/
# vim ifcfg-eth0
IPADDR=192.168.8.101
NETWORK=192.168.8.0
NETMASK=255.255.255.0
GATEWAY=192.168.8.254
BROADCAST=192.168.8.255
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# cp ifcfg-lo ifcfg-lo:0
# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.8.68
NETMASK=255.255.255.255
BROADCAST=192.168.8.68
ONBOOT=yes
NAME=loopback
# service network restart
# route add -host 192.168.8.68 dev lo:0
3.对dr进行配置
# ipvsadm -A -t 192.168.8.68:8888 -s rr
# ipvsadm -a -t 192.168.8.68:8888 -r 192.168.8.101 -g
# ipvsadm -a -t 192.168.8.68:8888 -r 192.168.8.102 -g
# ipvsadm -L -n
注意:
1.无论是在vmware虚拟环境中,还是在真实机器中,必须将dip设置在第一块网卡上,而VIP必须设置在第二块网卡上,否则无法进行负载均衡
如dip分别要配置在vmware的eth0和真实dell服务器的em1网卡中
2.在真实环境中,内网地址很快就能负载均衡成功,如直接访问http://192.168.8.68:8888没有问题
而192.168.8.68映射到外网地址的 193.239.143.212等了差不多半个小时后才生效
LVS负载均衡器DR模型的实现的更多相关文章
-
LVS的DR模型配置
LVS的DR模型配置 介绍 下图为DR模型的通信过程,图中的IP不要被扑结构中的IP迷惑,图里只是为了说明DR的通信原理,应用到本例中的拓扑上其工作原理不变. 拓扑结构 服务器 IP地址 角色 Srv ...
-
负载均衡集群之LVS的DR模型详解(Diretor Routing)
LVS的默认模型:默认模型DR DR模型原理图--> 在讲DR模型要点之前,需要了解网络的相关知识: 接收的报文拆解顺序:帧(MAC)-->数据包(IP)-->数据报文(port) ...
-
keepalived 高可用lvs的dr模型(vip与dip不在同一网段)
现在rs1和rs2上面安装httpd并准备测试页 [root@rs1 ~]# yum install httpd -y [root@rs1 ~]# echo "this is r1" ...
-
集群--LVS的DR模型配置
1.查看内核是否有IPVS内核模块 grep -i 'ip_vs' /boot/config-2.6.32-431.el6.x86_64
-
lvs dr 模型配置详解
前期准备: 两台服务器 note01(lvs服务器) note02(real sever) 1 首先在note01配置子网卡: ifconfig eth0: :2意思是eth0的子接口,随便一个数字就 ...
-
LVS之NAT模型、DR模型配置和持久连接
前言:继LVS概述,本篇实现NAT模型和DR模型下的负载均衡. NAT模型: LVS-NAT基于cisco的LocalDirector.VS/NAT不需要在RealServer上做任何设置,其只要能提 ...
-
LVS跨网段DR模型
客户端IP地址:172.16.8.147 路由器服务器IP地址:172.16.8.167内网IP地址:192.168.1.3 一.将客户端的网关修改为路由服务器IP地址 vim ifcfg-ens33 ...
-
LVS nat模型+dr模型
nat模型 在 rs1 和 rs2 安装httpd 并配置测试页,启动 [root@rs1 ~]# yum install httpd -y[root@rs1 ~]# echo "thi ...
-
LVS包转发模型和调度算法(转)
LVS简介 Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来 讲, CPU.I/O处理能力很快会成为瓶颈.由于单台 ...
随机推荐
-
jQuery.last() 函数
last() 函数详解 函数 获取当前对象的最后一个元素 语法 $selector.last() 返回值 返回值为一个对象 实例说明 代码 <!DOCTYPE html><html ...
-
通过工厂方式配置bean
src\dayday\CarFactoryBean.java package dayday;import org.springframework.beans.factory.FactoryBean;/ ...
-
删:Centos 7安装Nginx 1.8
[CentOS 7] 安装nginx! 首先进行 nginx yum Nginx安装记录 注意:如果用源码安装,nginx配置时需要指定--with-pcer对应的压缩包路径,如果使用二进制安装不需要 ...
-
Java中的移位操作符
记住所有的移动位数,针对的都是补码来讲的,所以要先将十进制整数转换成补码后,然后再来进行移位操作 移位操作 还要注意类型的约束条件,例如int,移动范围是0-31位,所以看补码只能看最后五位,这才是有 ...
-
jquerymobile实例介绍
[创建页面] data-role="page" 是在浏览器中显示的页面.. data-theme="b"更换主题,有a和b两种 data-role= ...
-
CMOS门电路
参考:https://wenku.baidu.com/view/8582501e964bcf84b9d57bd3.html 1. CMOS与非门(P并N串) 2. CMOS或非门(N并P串 ...
- MTK6261初始化待机流程
-
Jmeter 分布式(Jmeter5.1版本)
一.修改负载机配置 vi /home/programs/apps/apache-jmeter-5.1/bin/jmeter.properties A.(先保证1099端口没有被占用,这里假设此端口未被 ...
-
第 8 章 容器网络 - 052 - overlay 如何实现跨主机通信?
overlay 如何实现跨主机通信? 在 host2 中运行容器 bbox2: docker run -itd --name bbox2 --network ov_net1 busybox bbox2 ...
-
不可不知的Oracle常用技巧
不可不知的Oracle常用技巧 表复制 1.方法一:复制表结构和数据 create table temp_clientloginuser as select distinct userid from ...