LVS DR模式 负载均衡服务搭建
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
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模式 负载均衡服务搭建相关推荐
- LVS DR模式负载均衡
高并发场景 LVS 安装及高可用实现 分类: 运维基本功,故障解决 转载自 惨绿少年 https://www.cnblogs.com/clsn/p/7920637.html 1.1 负载均衡介绍 ...
- LVS+Keepalived-DR模式负载均衡高可用集群
LVS+Keepalived DR模式负载均衡+高可用集群架构图 工作原理: Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能. VRRP,虚拟路由冗余协议,是针对路由器的 ...
- 企业运维实战--lvs之DR模式负载均衡、keepalived、lvs高可用
LVS 介绍 lvs 负载均衡( linux virtual server),linux虚拟服务器,是一个虚拟的四层交换器集群系统,根据目标地址和目标端口实现用户请求转发,本身不产生流量,只做用户请求 ...
- 十六周一次课(4月11日) 学习完成 18.11 LVS DR模式搭建 18.12 keepalived + LVS
2019独角兽企业重金招聘Python工程师标准>>> 18.11 LVS DR模式搭建 准备工作:三台机器 分发器,也叫调度器(简写为dir) 192.134 rs1 192.13 ...
- LVS DR模式搭建、keepalived+LVS
LVS DR 模式搭建 准备工作 三台机器,三台机器均有公网IP. 调度器(director) IP:192.168.159.131 real server 1 (real1) IP:192.168. ...
- LVS DR模式搭建,keepalived + LVS
2019独角兽企业重金招聘Python工程师标准>>> LVS DR模式搭建 准备工作 三台机器,只需要有公网IP 分发器,也叫调度器(简写为dir)IP:192.168.133.1 ...
- Linux集群架构(LVS DR模式搭建、keepalived + LVS)
为什么80%的码农都做不了架构师?>>> LVS DR模式搭建 准备工作:三台机器 分发器,也叫调度器(简写为dir):192.168.248.128 rs1 :192.168 ...
- LVS DR模式搭建、keepalived + LVS
一. LVS DR模式搭建 1).准备工作: 三台机器 分发器,也叫调度器(简写为dir) 1.31 rs1 1.12 rs2 1.29 vip 1.200 2). dir上编写脚本 vim /usr ...
- LVS负载均衡服务器搭建
LVS简介 现在LVS已经是Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须重新编译内核以支持LVS功能模块,但是从Linux2.4内核心之后,已经完全内置了LVS的各个功能模 ...
最新文章
- 导入sql时出现Invalid default value for ‘create_time‘报错处理方法
- 9种不同的方法帮助你提高国内访问Github的速度!
- python 贴吧自动回复机-Python实现微信自动回复机器人详细教程
- 机器学习中的lazy method与eager method的比较
- 亚马逊AWS本月第三次出现数据中心断电故障,Coinbase、Slack等受影响
- 基于用例点来度量软件规模并管理进度 之二
- Mysql 索引的基础(下)
- 2013.10u-boot移植之SD保存环境变量
- android 16进制 全透明_你有几种实现方案Android 设备唯一标识?
- Intel缓存控制相关的寄存器
- rest_framework-00-规范-APIview源码解析-认证
- 制作GHOST XP 基于自由天空驱动包+SysPacker 2.1
- Libev源码分析07:Linux下的eventfd简介
- RegExp 误用解析
- MATLAB遗传算法调试
- python教材推荐:
- 从维密天使到编程大拿,她的彪悍人生不需要解释!
- 多客技巧分享|【建议收藏】TikTok七大避坑指南帮你少走许多弯路
- 游戏视觉内容逆向破解
- 1399元千元真旗舰,360手机N5“能耐”在哪?