LVS 负载均衡

最近在研究服务器负载均衡,阅读了网上的一些资料,发现主要的软件负载均衡方案有nginx(针对HTTP服务的负载均衡),LVS(针对IP层,MAC层的负载均衡)。LVS模式工作在网络层,且由内核实现负载转发,效率要比nginx高。 
    LVS负载均衡包含三种模式: 
1. NAT模式(类似路由器,实现外网内网地址映射,负载均衡服务器修改请求包的源以及目的MAC地址和IP地址,发送给实际服务器;负载均衡服务器,修改响应包的源以及目的MAC地址和IP地址,发送给客户端。请求和响应报文都需要经过负载均衡服务器) 
2. TUN模式(IP隧道,负载均衡服务器将外网传来的数据包封装在IP隧道中,传给实际服务器。实际服务器的响应直接发给客户端,而不需要经过负载均衡服务器。) 
3. DR模式(负载均衡服务器和后端的实际服务器拥有相同的虚拟IP地址,负载均衡服务器收到响应包后,修改目的MAC地址发给实际服务器,实际服务器将响应包直接发给客户端,不需要经过负载均衡服务器)

搭建 LVS DR模式负载均衡服务

连接示意图如下:

其中,负载均衡服务器的IP地址为 10.10.10.30/24 和 10.10.10.22/32(该IP地址是用户访问的IP地址), Real Server 1的IP地址为10.10.10.31/24, Real Server 2的IP地址为10.10.10.32/24,三者连接在同一个局域网中,且 RS1和 RS2的虚拟IP地址(可以在lo或者lo:0上设置该IP地址,即本地环回,这样该虚拟IP只对该机器本身可见,不会暴露在外部造成IP冲突)都设为负载均衡服务器的IP地址 dev-1. 
    这样外部访问10.10.10.22时,会访问到负载均衡服务器,而负载均衡服务器选择某个实际服务器,比如RS1,然后将包的目的MAC地址修改为RS1的MAC地址,在将包送到局域网上。此时对于请求数据包来说,目的MAC地址为RS1的MAC地址,因此RS1会收到,RS1发现包的目的MAC为自身,且目的IP地址为10.10.10.22,也是自身的一个IP,于是就认为数据包是发到自己的,就开始进行处理。

一、安装http服务 
1. 在RS1和RS2上分别安装httpd服务 
2. 修改/etc/httpd/conf/httpd.conf 文件,进行相应的配置。 
3. 启动httpd服务,并设置防火墙开放80端口

二、在负载均衡服务器上安装并配置ipvsadm 
1. yum -y install ipvsadm 
2. 设置实际ip和虚拟IP

    ifconfig eth0 10.10.10.30/24ifconfig eth0:0 10.10.10.22 netmask 255.255.255.255 #虚拟IP,暴露给外部

3. 设置负载转发

方式一,通过ipvsadm

    systemctl start ipvsadmipvsadm -Cipvsadm --set 30 5 60#vip on load balanceripvsadm -A -t 10.10.10.22:80 -s wrr -p 20 #接受转发协议ipvsadm -a -t 10.10.10.22:80 -r 10.10.10.31:80 -g -w 1 #增加转发目的地ipvsadm -a -t 10.10.10.22:80 -r 10.10.10.32:80 -g -w 1 #增加转发目的地ipvsadm -L -n

方式二,通过keepalived
vim /etc/keepalived/keepalived.conf 修改配置文件如下
global_defs {  notification_email {  skc361@163.com  }  notification_email_from sns-lvs@gmail.com  smtp_server 192.168.80.1  smtp_connection_timeout 30router_id LVS_DEVEL  # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {  state MASTER   #指定Keepalived的角色,MASTER为主,BACKUP为备          interface eth0  #指定Keepalived的角色,MASTER为主,BACKUP为备virtual_router_id 51  #虚拟路由编号,主备要一致priority 100  #定义优先级,数字越大,优先级越高,主DR必须大于备用DR    advert_int 1  #检查间隔,默认为1sauthentication {  auth_type PASS  auth_pass 1111  }  virtual_ipaddress {  10.10.10.22  #定义虚拟IP(VIP)为10.10.10.22,可多设,每行一个}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 10.10.10.22 80 {  delay_loop 6 # 设置健康检查时间,单位是秒                    lb_algo wrr # 设置负载调度的算法为wlc                   lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式   nat_mask 255.255.255.0                persistence_timeout 0          protocol TCP                  real_server 10.10.10.31 80 {  # 指定real server1的IP地址weight 3   # 配置节点权值,数字越大权重越高              TCP_CHECK {  connect_timeout 10         nb_get_retry 3  delay_before_retry 3  connect_port 80  }  }  real_server 10.10.10.32 80 {  # 指定real server2的IP地址weight 3  # 配置节点权值,数字越大权重越高  TCP_CHECK {  connect_timeout 10  nb_get_retry 3  delay_before_retry 3  connect_port 80  }  }
}启动keepalived服务
systemctl start keepalived

三、设置实际服务器的网卡

ifconfig lo:0 10.10.10.22 netmask 255.255.255.255 #即设置虚拟IP地址,该IP地址绑定在环回网卡上,不会对外暴露

四、设置实际服务器的内核参数

    [root@dev-2 lvs]#vim /etc/sysctl.conf[root@dev-2 lvs]# sysctl -pnet.ipv4.ip_forward = 1 #打开路由转发net.ipv4.conf.all.arp_ignore = 1 #只回答目的IP为本网口IP地址的arp包的请求net.ipv4.conf.all.arp_announce = 2 #对查询目标使用最适当的本机地址net.ipv4.conf.lo.arp_ignore = 1net.ipv4.conf.lo.arp_announce = 2

上面的 arp_ignore 和 arp_announce 参见 lvs arp设置

五、使用客户端进行访问 
    此时使用客户端访问 http://10.10.10.22, 请求会被转发到RS1或者RS2上。

问题排查

在搭建的时候,可能出现 http://10.10.10.22 无法访问,即HTTP请求没有被转发的情况。这种情况可以从以下情况中进行排查: 
1. 负载均衡服务器 防火墙是否关闭,或者是否允许80端口的tcp连接 
2. RS1 和 RS2 的http配置中是否设置 Listen 80(监听本机上的所有地址,如果只监听机器的网卡地址,而虚拟ip包就会被忽略) 
3. 如果在负载均衡服务器上没有设置VIP,只有一个IP地址 10.10.10.22/24,这样也可以配置出来。但是此时,当负载均衡服务器要向 10.10.10.31和10.10.10.32转发时,它需要知道它们的MAC地址,于是会发送ARP请求报文,当RS1或RS2收到ARP,它进行回复的时候发现请求报文的源IP为10.10.10.22 于是直接发到本机了,就不会回复给负载均衡服务器。于是负载均衡服务器就没法动态获知RS1和RS2的MAC地址。 
    此时,只能手动在负载均衡服务器上设置arp。 arp -s... 
而且这样做也会导致从负载均衡服务器上不能直接访问RS1/RS2,同样RS1/RS2也不能直接访问负载均衡服务器。所以,还是需要在负载均衡服务器上配置一个eth0和一个虚拟IP eth0:0.

LVS DR模式 负载均衡服务搭建相关推荐

  1. LVS DR模式负载均衡

    高并发场景 LVS 安装及高可用实现 分类: 运维基本功,故障解决 转载自 惨绿少年   https://www.cnblogs.com/clsn/p/7920637.html 1.1 负载均衡介绍 ...

  2. LVS+Keepalived-DR模式负载均衡高可用集群

    LVS+Keepalived DR模式负载均衡+高可用集群架构图 工作原理: Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能. VRRP,虚拟路由冗余协议,是针对路由器的 ...

  3. 企业运维实战--lvs之DR模式负载均衡、keepalived、lvs高可用

    LVS 介绍 lvs 负载均衡( linux virtual server),linux虚拟服务器,是一个虚拟的四层交换器集群系统,根据目标地址和目标端口实现用户请求转发,本身不产生流量,只做用户请求 ...

  4. ​十六周一次课(4月11日) 学习完成 18.11 LVS DR模式搭建 18.12 keepalived + LVS

    2019独角兽企业重金招聘Python工程师标准>>> 18.11 LVS DR模式搭建 准备工作:三台机器 分发器,也叫调度器(简写为dir) 192.134 rs1 192.13 ...

  5. LVS DR模式搭建、keepalived+LVS

    LVS DR 模式搭建 准备工作 三台机器,三台机器均有公网IP. 调度器(director) IP:192.168.159.131 real server 1 (real1) IP:192.168. ...

  6. LVS DR模式搭建,keepalived + LVS

    2019独角兽企业重金招聘Python工程师标准>>> LVS DR模式搭建 准备工作 三台机器,只需要有公网IP 分发器,也叫调度器(简写为dir)IP:192.168.133.1 ...

  7. Linux集群架构(LVS DR模式搭建、keepalived + LVS)

    为什么80%的码农都做不了架构师?>>>    LVS DR模式搭建 准备工作:三台机器 分发器,也叫调度器(简写为dir):192.168.248.128 rs1 :192.168 ...

  8. LVS DR模式搭建、keepalived + LVS

    一. LVS DR模式搭建 1).准备工作: 三台机器 分发器,也叫调度器(简写为dir) 1.31 rs1 1.12 rs2 1.29 vip 1.200 2). dir上编写脚本 vim /usr ...

  9. LVS负载均衡服务器搭建

    LVS简介 现在LVS已经是Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须重新编译内核以支持LVS功能模块,但是从Linux2.4内核心之后,已经完全内置了LVS的各个功能模 ...

最新文章

  1. 导入sql时出现Invalid default value for ‘create_time‘报错处理方法
  2. 9种不同的方法帮助你提高国内访问Github的速度!
  3. python 贴吧自动回复机-Python实现微信自动回复机器人详细教程
  4. 机器学习中的lazy method与eager method的比较
  5. 亚马逊AWS本月第三次出现数据中心断电故障,Coinbase、Slack等受影响
  6. 基于用例点来度量软件规模并管理进度 之二
  7. Mysql 索引的基础(下)
  8. 2013.10u-boot移植之SD保存环境变量
  9. android 16进制 全透明_你有几种实现方案Android 设备唯一标识?
  10. Intel缓存控制相关的寄存器
  11. rest_framework-00-规范-APIview源码解析-认证
  12. 制作GHOST XP 基于自由天空驱动包+SysPacker 2.1
  13. Libev源码分析07:Linux下的eventfd简介
  14. RegExp 误用解析
  15. MATLAB遗传算法调试
  16. python教材推荐:
  17. 从维密天使到编程大拿,她的彪悍人生不需要解释!
  18. 多客技巧分享|【建议收藏】TikTok七大避坑指南帮你少走许多弯路
  19. 游戏视觉内容逆向破解
  20. 1399元千元真旗舰,360手机N5“能耐”在哪?

热门文章

  1. java 2d svg_SVG 2D入门1 - SVG综述
  2. office2010 启动man_Office2010打开慢速度怎么办?
  3. eclipse lombok插件安装_如果你是Java架构师或项目经理,项目技术会允许使用Lombok吗?
  4. python前端学习-----Flask进阶
  5. python前端学习-------Flask框架基础(建议收藏)
  6. SpringBoot拦截器不生效
  7. 读债务危机0812:接管房利美和房地美
  8. Hessian使用记录
  9. 笔记-高项案例题-2015年上-计算题
  10. Linux下常用的压缩与解压命令