LVS基本知识
前言 linux集群类型
LB -->负载均衡集群(Load Balancing)
HA-->高可用集群(High Availiablity)
HP-->高性性集群(High Performance)
分布式:分布式存储
分布式计算
LB的实现:硬件层和软件层
硬件:F5-->BIG IP
A10-->a10
软件:LVS、nginx、haproxy、ats
一、LVS(linux vitual server )
LVS 是linux虚拟服务器,在四层协议工作,能使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,有很好的向外扩展性。
1.lvs组成及相关术语
lvs--> ipvs 和 ipvsadm
ipvs :linux基于内核空间上的natfilter和input工作框架;
ipvsadm :用户空间的命令行工具,规则管理和用于管理集群服务;
DS--->Director Server 调度器
RS-->Real Server 后端工作服务器
CIP-->客户端IP
VIP-->调度器上外网的IP,用于响应客户请求的IP地址
DIP-->调度器上与内网通讯的IP
RIP-->后端服务器上的IP
2.lvs基本工作原理图
2.1 当用户发起请求时,VIP将请求发往调度器内核空间;
2.2 内核空间中路由前进入PREROUTING链,查验是否是本机地址,假如是本机IP,则经路由到IPUT链上;
2.3 IPUT链上的集群服务(ipvs)将对用户请求检查,是否是定义的规则的内容,如果是IPVS会修改数据报文中的目标IP地址及端口(自己定义的后端服务器);将更改过的数据包发往POSTROUTIN链;
2.4 POSTROUTIN链检查目标IP是自己能连上的后端服务器,刚通过,发往后端服务器进行处理;
3. LVS三种工作模型 及特性
3.1 LVS-NAT
~ 多目标的DNAT,通过把请求报文中的目标IP和端口修改成后端真实的服务器主机的RIP和PROT来实现转发;
~ DIP和RIP在同一网段,应该是私有地址,且RIP的网关指向DIP;
~ 支术修改端口,可将请求报文的PROT修改;
~ VS必须是linux系统,RS可以是任意系统;
~ 打开Director的核心转发功能;
3.2 LVS-DR
~ 通过为请求报文重新封装一个MAC地址进行转发,源MAC 是DIP接口所在的MAC,目标MAC是RS服务器中挑选的一台服务器的MAC,源IP-PROT和目标IP-PROT保持不变;
~ 前端路由器能把目标IP的VIP请求报文送到Director----》在RS上修改内核参数以限制arp通告及应答级别:arp_announe (2) apr_ignore (1);
~ RS可以使用公网地址,也可以使用私网地址,RIP和DIP在同一IP网络,RIP的网关不能指向DIP以确保响应报文不会经同director;
~ RS和Director要在同一物理网络;
~ 请求报文经由Director,但响应报文不能经由Director,由RS直接返回给客户端;
~ 不支持端口映射;
3.3 LVS-TUN
~ 转发时不修改请求报文的IP首部(源CIP,目标为VIP);而是在原来IP首部再封装一个IP首部(源IP为DIP,目标IP为RIP),将请求报文发往
挑选的RIP主机。RS直接响应给客户端;
~ VIP、DIP、RIP是公网地址;
~ RIP的网关不能指向DIP;
~ 请求报文经由Director ,响应报文不能经由Director;
~ 不支持端口映射和RS的OS要支持隧道功能;
二、LVS(linux vitual server ) 调度算法
1.静态算法
rr---->轮询
wrr--->加权轮询
sh--->会话邦定(session sticky),将来自同一个IP的会话发往同一台RS;
dh--->目标地址哈希,将发往同一个目标的请求始终发往同一RS;
2.动态算法
lc-->最少链接
wlc-->加权最少链接
lblcr--->带复制功能的LBLC
三、实验
1. LVS-NAT
实验拓扑:
配置:
1.1 RS1 和 RS2 配置两台web服务器(httpd) ;
1.2 配置网关指向Director(192.168.64.130);
~]# route add default gw 192.168.64.130
1.3 在Director配置
~]# yum install ipvsadm -y #安装管理工具
~]# ipvsadm -A -t 192.168.1.171:80 -s wrr #设置调度器及算法(加权轮询)
~]# ipvsadm -a -t 192.168.1.171:80 -r 192.168.64.128 -m -w 3 #加入后端主机(.64.128) -m 指nat模式 -w 指加权3
~]# ipvsadm -a -t 192.168.1.171:80 -r 192.168.64.129 -m -w 1 #加入后端主机(.64.129) -m 指nat模式 -w 指加权1
~]# echo 1 > /proc/sys/net/ipv4/ip_forward #打开核心转发功能
查看调度是否成功
2. LVS-DR
实验拓扑
配置:
2.1 配置两台Real Server
~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore # 1-->仅在请求的目标IP配置在本地主机的接收到请求报文接口上,才给予响应;
~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #2-->必须避免向非本网络通告;
~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
~]# ifconfig lo:0 192.168.64.131 netmask 255.255.255.0 broadcast 192.168.64.131 #配置loopback地址;
~]# route add -host 192.168.64.131 dev lo:0 # 配置静态路由
2.4 配置Director 上配置
yum install ipvsadm
~]# route add -host 192.168.64.131 dev ens34 # 配置静态路由
~]# ipvsadm -A -t 192.168.64.131:80 -s wrr #配置ipvs规则 -s wrr (加权轮询算法)
~]# ipvsadm -a -t 192.168.64.131:80 -r 192.168.64.128 -g -w 2 #加入后端主机 -g 指DR模式 -w 指加权为2
~]# ipvsadm -a -t 192.168.64.131:80 -r 192.168.64.129 -g -w 1 #加入后端主机 -g 指DR模式 -w 指加权为1
查看配置结果
查看调度是否成功
DR方案脚本方案:
RS配置:
#/bin/bash
vip="192.168.64.131"
mask="255.255.255.255"
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig lo:0 ${vip} netmask ${mask} broadcast ${vip} up
route add -host ${vip} dev lo:0
;;
stop)
ifconfig lo:0 down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
*)
echo "Usage :${basename $0} start | stop"
exit 2
;;
esac
VS配置:
#!/bin/bash
vip="192.168.64.131"
mask="255.255.255.255"
interface="ens34"
rs1="192.168.64.128"
rs2="192.168.64.129"
scheduler="wrr"
type="-g"
prot="80"
case $1 in
start)
ifconfig ${interface} ${vip} netmask ${mask} broadcast ${vip} up
iptables -F
ipvsadm -A -t ${vip}:${prot} -s ${scheduler}
ipvsadm -a -t ${vip} -r ${rs1}:${prot} ${type} -w 3
ipvsadm -a -t ${vip} -r ${rs2}:${prot} ${type} -w 2
# route add ${vip} dev ${interface}
;;
stop)
ipvsadm -C
inconfi ${interface} down
;;
*)
echo "Usage: $(basname $0) start|stop"
;;
esac
网上案例:
lvs-dr模式负载均衡集群,realserver通过80端口提供http服务。
发现通过vip无法访问http服务,而直接访问realserver的IP 的http服务时正常的。这说明realserver的http服务是正常的。
为了排除lvs dr配置的vip 、arp抑制和 路由是正常的,又添加了ipvs规则,监听22端口,并负载分担到realserver。经过测试,22端口的ssh服务正常,可以ssh登陆到后端realserver。所以包括IP、arp、路由等配置的链路本身是正确的。
另外检查了realserver的firewalld是关闭的。iptables也再INPUT链放通了80端口。realserver段检查不出什么问题。因为开始时通过浏览器访问vip的http服务,没有任何错误信息,非常不利于排错,于是又用另一台同网段的linux机器用curl 命令访问vip的http服务,结果报错
curl: (7) Failed connect to 192.168.14.100:80; No route to host
访问vip的http服务时,在director server和 real server上tcpdump抓包,只能在director上能抓到报文,realserver没有报文,这说明问题在director上。于是检查了一下 director server的iptables规则,果然有一条iptables规则
-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT但是没有80端口的iptablels规则,判断这里缺少放通80端口的iptables规则应该就是问题所在。执行iptables命令,放通INPUT链的80端口之后,果然可以访问vip的http了!^_^
iptables -A IN_public_allow -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
这次故障是因为不了解ipvs负载均衡是作用在内核的INPUT上,忘了配置相应的iptables规则。
lvs工作机制:
1、当client向vip发送请求时,lvs服务器收到报文,将报文从物理网卡送到内核空间。
2、在系统内核空间匹配netfilter的chain,PREROUTING链首先判断报文目的IP是本机IP,将数据包发往INPUT链。
3、ipvs工作在INPUT链上,并且是在INPUT链匹配accept时,ipvs将报文与定义好的ipvs规则匹配,如果命中ipvs规则,ipvs会强行修改报文的目的ip地址和端口,然后将数据包发往POSTROUTING链。
4. POSTROUTING链再根据目的IP查路由,将报文最终发送给后端服务器。
LVS基本知识的更多相关文章
- LVS基础知识
LVS介绍(Linux Virtual Server) 负载调度器,已经集成到内核 工作原理:VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS iptables/ ...
- LVS+keepalived实现负载均衡
背景: 随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要 的浪费?同时实现商业硬件一样的 ...
- LVS+Keepalived实现高可用集群
LVS+Keepalived实现高可用集群来源: ChinaUnix博客 日期: 2009.07.21 14:49 (共有条评论) 我要评论 操作系统平台:CentOS5.2软件:LVS+keepal ...
- lvs简单使用
LB集群实现 硬件 F5 BIG-IP Citrix NetScaler A10 Redware 软件 1 lvs 2 haproxy 3 nginx 4 ats apache traffic ser ...
- LVS+keepalived负载均衡
背景: 随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要的浪费?同时实现商业硬件一样的高 ...
- LVS+Heartbeat 高可用集群方案操作记录
之前分别介绍了LVS基础知识和Heartbeat基础知识, 今天这里简单说下LVS+Heartbeat实现高可用web集群方案的操作说明. Heartbeat 项目是 Linux-HA 工程的一个组成 ...
- keepalived+lvs高可用集群
LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...
- BAT网络运维常见面试题目总结
BAT常见面试题目总结 Author:Danbo 2015-7-11 TCP/IP详解鸟哥Linux的书网络安全ping的原理make的过程文件有哪些类型各种Linux发行版的区别.有关suid的作用 ...
- LVS负载均衡-基础知识梳理
一. 集群的概念 服务器集群简称集群是一种服务器系统,它通过一组松散集成的服务器软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台服务器.集群系统中的单个服务器通常称 ...
随机推荐
- 以太网驱动的流程浅析(五)-mii_bus初始化以及phy id的获取【原创】
以太网驱动的流程浅析(五)-mii_bus初始化以及phy id的获取 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号 ...
- java8-9-Stream 的中间操作
Stream 的中间操作 filter 过滤 排除元素 filter(T -> boolean) 保留 boolean 为 true 的元素
- CCPC2018-湖南全国邀请赛
传送门 A - Easy \(h\)-index 签到. Code /* * Author: heyuhhh * Created Time: 2019/10/29 11:58:23 */ #inclu ...
- git(1) 比较两个不同版本的文件
git diff commit_id1:file_name commit_id2:file_name 或者 git diff commit_id1 commit_id2 -- file_name co ...
- hebust-fengyu
三人行必有我师焉,择其善者而从之,其不善者而改之. 入则无法家拂士,出则无敌国外患者,国恒亡,然后知生于忧患而死于安乐也. 狡兔死走狗烹,飞鸟尽良弓藏,敌国尽谋臣亡 今齐地方千里,百二十城,宫妇左右莫 ...
- SpringBatch介绍
SpringBatch 是一个大数据量的并行处理框架.通常用于数据的离线迁移,和数据处理,⽀持事务.并发.流程.监控.纵向和横向扩展,提供统⼀的接⼝管理和任务管理;SpringBatch是Spring ...
- springboot+jpa分库分表项目实例
分库分表场景 关系型数据库本身比较容易成为系统瓶颈,单机存储容量.连接数.处理能力都有限.当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库.优化索引,做很多操作时性能仍下降严 ...
- Global Azure Bootcamp 2019 宁波站活动总结
4月27日,由微软MVP技术社区发起的Global Azure Bootcamp 2019盛会在全球80多个国家270个城市举办.本次活动由全国众多Azure专家及微软MVP技术社区成员,分别在北京. ...
- 我说精通字符串,面试官竟然问我 Java 中的 String 有没有长度限制?
String 是 Java 中很重要的一个数据类型,除了基本数据类型以外,String 是被使用的最广泛的了,但是,关于 String,其实还是有很多东西容易被忽略的. 就如本文我们要讨论的问题:Ja ...
- app——升级测试点
APP版本升级的测试点 该文章转载于:https://www.cnblogs.com/changpuyi/p/8618755.html 移动端版本更新升级是一个比较重要的功能点,主要分为强制更新和 ...