LVS简介

LVS介绍

LVS是Linux Virtual Server的缩写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,属于4层负载均衡

ipvs和ipvsadm的关系

我们使用配置LVS的时候,不能直接配置内核中的ipvs,需要使用ipvs的管理工具ipvsadm进行管理  

LVS术语

LVS转发原理

LVS负载均衡器接受所有入站请求,并根据调度算法决定哪个realserver处理该请求

LVS调度算法

  • 轮询(rr):按照请求顺序轮流分发到后端RS
  • 加权轮询(wrr):权值高的获得的任务更多
  • 最小连接数(lc):动态的将请求建立到连接数较少的RS上
  • 加权最小连接数(wlc):调度器自动询问RS的真实负载情况,并动态的调整权

LVS调度算法生产环境选型

一般的网络服务,如:http、mail、MySQL等,常用的调度算法为:

  • 基本轮询调度rr算法
  • 加权轮询调度wrr算法
  • 加权最小连接调度wlc算法

LVS转发模式

  • NAT(Network Address Translation)
  • DR(Direct Routing)
  • TUN

LVS-DR模式

转发流程

将所有入站请求转发给后端realserver,后端realserver处理完直接将结果发给客户端

原理

当用户请求到达Direct Server,此时报文的源IP为CIP、MAC为CIP-MAC,目标IP为VIP、MAC为VIP-MAC
Direct Server根据调度算法确定一台处理请求的realserver,将请求转发给对应的realserver,此时源IP和目标IP均未改变,仅修改了源MAC为DIP-MAC,目标MAC为RIP-MAC
对应的realserver处理完请求,直接将结果发给客户端,此时源IP为VIP、MAC为VIP-MAC,目标IP为CIP、MAC为CIP-MAC

特性

  • 通过在调度器上修改数据包的目的MAC地址实现转发
  • Real-Server和Direct-Server必须在同一网段
  • Real-Server的lo接口必须绑定VIP

为什么要抑制ARP请求

  • 由于后端Real-Server要将VIP绑定到lo网卡上,这就出现了一个问题,客户端请求到达LVS前端路由器的时候,前端路由器会发送一个{*目标地址为VIP*}的请求报文,所以需要抑制Real-Server的ARP,保证让Direct-Server收到这个报文,而不是realserver收到这个报文
  • /proc/sys/net/ipv4/conf/all/arp_ignore 的值为1,/proc/sys/net/ipv4/conf/lo/arp_ignore 的值为1
  • /proc/sys/net/ipv4/conf/all/arp_announce的值为2,/proc/sys/net/ipv4/conf/lo/arp_announce的值为2
  • 一句话说明抑制Real-Server原因:保证前端路由将目标地址为VIP的报文发给Direct-Server,而不是Real-Server

优势

只有请求报文经过调度器,而Real-Server响应处理后无需经过调度器,因此并发量大的时候效率很高

LVS-NAT模式

转发流程

将所有入站请求转发给后端Real-Server,后端Real-Server处理完再发给Direct-Server,Direct-Server再发给客户端

特性

  • 既有RIP也有VIP
  • Real-Server必须得跟Direct-Server在同一网段
  • Real-Server必须将网关指向Direct-Server

优势

只需要一个公网IP给Direct-Server,Direct-Server始终跟外接打交道

劣势

需要依赖Direct-Server把请求转发给Real-Server,Real-Server处理完把结果发给Direct-Server,Direct-Server再把结果转发出去,并发高的时候会成为瓶颈

LVS三种模式对比

ipvsadm介绍

ipvsadm参数

添加虚拟服务器
语法:ipvsadm -A [-t|u|f] [vip_addr:port] [-s:指定算法]
-A:添加
-t:TCP协议
-u:UDP协议
-f:防火墙标记
-D:删除虚拟服务器记录
-E:修改虚拟服务器记录
-C:清空所有记录
-L:查看
添加后端RealServer
语法:ipvsadm -a [-t|u|f] [vip_addr:port] [-r ip_addr] [-g|i|m] [-w 指定权重]
-a:添加
-t:TCP协议
-u:UDP协议
-f:防火墙标记
-r:指定后端realserver的IP
-g:DR模式
-i:TUN模式
-m:NAT模式
-w:指定权重
-d:删除realserver记录
-e:修改realserver记录
-l:查看
通用:
ipvsadm -ln:查看规则
service ipvsadm save:保存规则

ipvsadm配置LVS负载均衡

需求

用LVS实现后端两台httpd的负载均衡

环境说明 

lb01   192.168.0.91 lvs
realserver-1 192.168.0.92 httpd
realserver-2 192.168.0.93   httpd
test 192.168.0.94   用来测试负载均衡

负载均衡器端

安装LVS
yum -y install ipvsadm
ipvsadm
添加绑定VIP
ip addr add 192.168.0.89/24 dev eth0 label eth0:1
配置LVS-DR模式
ipvsadm -A -t 192.168.0.89:80 -s rr
ipvsadm -a -t 192.168.0.89:80 -r 192.168.0.93 -g
ipvsadm -a -t 192.168.0.89:80 -r 192.168.0.94 -g

Real-Server端

    配置httpd省略
curl 192.168.0.93 #测试realserver-1网站是否正常
192.168.0.93
curl 192.168.0.94 #测试realserver-2网站是否正常
192.168.0.94
绑定VIP到lo网卡

ip addr add 192.168.0.89/32 dev lo label lo:1 #由于DR模式需要realserver也有VIP
抑制ARP
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore

客户端测试

[root@test ~]#curl 192.168.0.89
192.168.0.93
[root@test ~]#curl 192.168.0.89
192.168.0.94

配置LVS+keepalived

需求

  • LVS给两台httpd做负载均衡
  • keepalived做lvs高可用,同时做Real-Server健康检查,如果发现Real-Server80端口没开,就认为故障,从集群中剔除
  • 在keepalived配置文件内就能配置LVS  

环境说明

lb01   192.168.0.91 lvs keepalived-master

lb02

192.168.0.92 lvs keepalived-backup
realserver-1 192.168.0.93 httpd
realserver-2 192.168.0.94 httpd

在负载均衡器端配置lvs+keepalived

lb01节点

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
##################全局配置##########################
global_defs {
#如有故障,发邮件地址
notification_email {
9618154@qq.com #收件人
}
notification_email_from Alexandre.Cassen@firewall.loc #keepalived报警邮件,发件人
smtp_server 192.168.200.1 #邮件服务器地址
smtp_connect_timeout 30 #邮件服务器超时时间
router_id LVS_01 #类似于MySQL的server-id,每个keepalived节点不能相同
}
#################keepalived配置#####################
vrrp_instance VI_1 {
state MASTER #keepalived角色,MASTER和BACKUP
interface eth0 #通信接口,下面的virtual_ipaddress(VIP)绑定到这个网卡
virtual_router_id 51 #vrrp_instance的唯一标识
priority 150 #keepalived权重,数值越大权重越大,MASTER应大于BACKUP
advert_int 1 #发送心跳间隔,如果backup1秒收不到心跳就接管,单位是秒
authentication { #每个keepalived节点通过这里设置的验证通信,必须得设置成一样
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.89/24 #VIP
}
}
##################LVS配置##############
#添加虚拟服务器
#相当于 ipvsadm -A -t 192.168.0.89:80 -s wrr
virtual_server 192.168.0.89 80 {
delay_loop 6 #服务健康检查周期,单位是秒
lb_algo wrr #调度算法
lb_kind DR #模式
nat_mask 255.255.255.0
persistence_timeout 50 #回话保持时间,单位是秒
protocol TCP #TCP协议转发
#添加后端realserver
#相当于 ipvsadm -a -t 192.168.0.89:80 -r 192.168.0.93:80 -w 1
real_server 192.168.0.93 80 { #realserver的真实IP
weight 1 #权重
#健康检查
TCP_CHECK {
connect_timeout 8 #超时时间
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
connect_port 80 #检查realserver的80端口,如果80端口没监听,就会从集群中剔除
}
}
real_server 192.168.0.94 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
} }

lb02节点

 vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
################全局配置###########################
global_defs {
notification_email {
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_02
}
################keepalived配置#####################
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.89/24
}
}
################lvs配置##########################
virtual_server 192.168.0.89 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.0.93 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.0.94 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
} }

配置后端Real-Server

确保网站服务是正常的
curl 192.168.0.93
192.168.0.93
curl 192.168.0.94
192.168.0.94
绑定VIP到lo网卡

ip addr add 192.168.0.89/32 dev lo label lo:0
抑制ARP
[root@realserver-1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@realserver-1 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@realserver-1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@realserver-1 ~]#echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore

客户端测试

  • 负载均衡是否正常
  • 后端Real-Server出问题是否自动剔除
  • lvs高可用是否正常,提供服务的LVS宕机,vip漂移到另一台LVS继续提供服务

温馨提示:

如果在是实际环境中使用Keepalived做高可用集群解决方案时,为了解决脑裂的问题,我们需要把MASTER与BACKUP服务器的Keepalived的主配置文件(keepalived.conf)中的 "state" 状态都改为 "BACKUP" 优先级 "priority" 选项的值不要设置为相同,可以设置一个数值大另一个数值小;如优先级分别为:priority 100 priority 90

Linux集群之高可用负载均衡lvs+keepalived的更多相关文章

  1. Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)

    Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...

  2. 高可用负载均衡 haproxy+keepalived

    服务器 20.0.0.206    10.0.0.206 bs-hk-hk01 高可用负载均衡节点 2c2g 20.0.0.207    10.0.0.207 bs-hk-hk02 高可用负载均衡节点 ...

  3. Linux 笔记 - 第十八章 Linux 集群之(三)Keepalived+LVS 高可用负载均衡集群

    一.前言 前两节分别介绍了 Linux 的高可用集群和负载均衡集群,也可以将这两者相结合,即 Keepalived+LVS 组成的高可用负载均衡集群,Keepalived 加入到 LVS 中的原因有以 ...

  4. LVS+Keepalived搭建MyCAT高可用负载均衡集群

    LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...

  5. Heartbeat+LVS构建高可用负载均衡集群

    1.heartbeat简介: Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里 ...

  6. Haproxy+Keepalived搭建Weblogic高可用负载均衡集群

    配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G  系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...

  7. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

    1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...

  8. 搭建MySQL高可用负载均衡集群

    1.简介 使用MySQL时随着时间的增长,用户量以及数据量的逐渐增加,访问量更是剧增,最终将会使MySQL达到某个瓶颈,那么MySQL的性能将会大大降低.这一结果也不利于软件的推广. 那么如何跨过这个 ...

  9. Keepalived+Nginx实现高可用负载均衡集群

    一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+nginx双主高可用负载均衡集群及LAMP应用keepalived-1 ...

随机推荐

  1. WebApi迁移ASP.NET Core2.0

    WebApi迁移ASP.NET Core2.0 一步一步带你做WebApi迁移ASP.NET Core2.0   随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的AS ...

  2. Qt5.7中使用MySQL Driver(需要把libmysql.dll文件拷贝到Qt的bin目录中。或者自己编译的时候,链接静态库)

    Qt5.7中使用MySQL Driver 1.使用环境 Qt5.7的安装安装就已经带了MySQL Driver,只需要在安装的时候选择一下即可.如果没有安装,可以采取自己编译的方式.在Qt的源码包的q ...

  3. 关于小米手机USB传输稍大点的文件老中断的问题解决方法!

    关于小米手机USB传输稍大点的文件老中断的问题解决方法! 这是一个很痛苦的事情,当你传输大文件的时候,传输到一半就会莫名其妙的中断,拔插数据线很多次以后,好不容易没准可以成功传输一次. 后来使用了36 ...

  4. 观察者模式和php实现

    观察者模式: 观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新.观察者模式又叫做发布-订阅(Publ ...

  5. Android安卓电话拦截及短信过滤

    package com.focus.manager; import java.lang.reflect.Method; import Android .app.Activity; import And ...

  6. github入门之更改提交操作--6

    1.回溯历史版本 1.1.回溯到创建feature-A分支前 1.1.1.要让仓库的HEAD.暂存区.当前工作树回溯到指定状态,需要用到提供目标时间点的哈希值 1.1.2.回溯至未创建feature- ...

  7. dstat工具使用介绍

    一.dstat工具多功能系统资源统计生成工具.获取信息类似top.free.iostat.vmstat等多个工具的合集,所以也称为vmstat.iostat.ifstat等工具替代品,其结果可以存储成 ...

  8. C# 使用解析json 嵌套方法

    C#从网页不传参数 接收json数据 public String GetHtmlFromUrl(String url) { //Response.Write(url); //Response.End( ...

  9. EF生成的实体映射含义

    如图: 组合效果: LEFT JOIN 效果: this.HasOptional(t => t.子表) .WithMany(t => t.主表) .HasForeignKey(d => ...

  10. Java 集合框架_下

    Map接口 特点: [1]Map接口称为键值对集合或者映射集合,其中的元素(entry)是以键值对(key-value)的形式存在. [2]Map 容器接口中提供了增.删.改.查的方式对集合进行操作. ...