lvs简介

LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器。

特点

跨平台:window,linux

作用

实现负载均衡

核心组件

ip_vs:linux的内核功能模块,工作在内核,依赖该内核模块实现负载均衡功能

ipvsadm:应用层程序,该程序可以和内核中的ip_vs模块通信,实现对负载均衡的管理和控制

优点

LVS主要用于多服务器的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。

补充

keepalived也可以对ip_vs进行管理

相关术语

1. DS:Director Server。指的是前端负载均衡器节点。
2. RS:Real Server。后端真实的工作服务器。
3. VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
4. DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
5. RIP:Real Server IP,后端服务器的IP地址。
6. CIP:Client IP,访问客户端的IP地址。

LVS的工作模式

DR

NAT

TUN

FULLNAT

LVS的调度算法

【所谓的算法:DR按照什么规则来从多个RS中筛选出来一个给用户提供服务】

动态算法:DR会实时的检测后端的RS的负载情况,将新用户的请求调度到一个负载较少的RS之上

静态算法:无论后端的RS当前的服务器负载情况怎么样,都安装固定的方式来给RS分配用户请求

静态算法

rr:Round Bobin,轮询,将客户端的请求交替分配给RS

wrr:Weighted Round Bobin,加权轮询,根据RS的性能不同,让他们来承担不同比例的用户请求

dh:Destination Hashing,目标地址哈希调度,基于用户所请求的地址做哈希表

作用:实现将对于相同的地址(rs)的请求调度到同一个RS之上

使用场景:适应于前端是一个DR,后端是多个cache的时候

sh:Source Hashing,源地址的哈希调度,基于用户的ip地址做哈希表

作用:实现将同一个客户端调度到相同的RS之上

动态算法

lc:Least Connection,最小连接数调度,本质是调度到当前负载最低的主机上

overhead=active*256+inactive

wlc:Weighted Least Connection,加权最小连接数调度,本质是调度到当前负载最低的主机上

overhead=(active*256+inactive)/weight

SED:是wlc补充,为了降低overhead出现重复的情况

overhead=((active+1)*256+inactive))/weight

NQ:Never queue,算法基本和sed相同,为了避免性能差的RS长时间处于空闲状态

lblc:基于目标地址的最小连接数调度,这种算法那是lc和dh的组合,适应于cache场景

lblcr:带有复制功能的lblc

ipvsadm的使用格式

ipvsadm的使用格式
ipvsadm -A|E -t|u|f service-address:port [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] <<添加一个lvs服务器
ipvsadm -D -t|u|f service-address <<删除一个lvs服务器
ipvsadm -C <<清空规则表
ipvsadm -R <<从标准输入恢复规则表
ipvsadm -S [-n] <<使用service ipvsadm save即可
ipvsadm -a|e -t|u|f service-address -r server-address [options] <<添加一个后端web服务
ipvsadm -d -t|u|f service-address -r server-address <<删除一个后端web服务
ipvsadm -L|l [options] << 显示lvs中的规则表
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]
ipvsadm --stop-daemon state
ipvsadm -h

ipvsad的选项参数

-A:添加一个虚拟服务(添加vip)[相当于负载均衡哪个服务器]
-E:编辑修改一个虚拟服务
-D:删除虚拟服务
-C:清空规则表
-R:从标准输入恢复规则表
--save|-S:将当前内存中的规则保存到标准输出
-a:指定在虚拟服务中添加RS节点 [添加后端的web服务器]
-e:指定在虚拟服务中编辑修改RS节点
-d:指定在虚拟服务中删除RS节点
-L|-l:显示lvs中的规则表 << ipvsadm -L -n --stats
-Z:将计数器清零
-t service-address[:port]:该规则是对tcp协议的请求做调度
-u service-address[:port]:该规则是对udp协议的请求做调度
-f:表示这个请求是经过iptables所标记过的服务类型
-r: 指定真实服务器的地址(remote)
-s scheduler:指定该规则要用的调度算法(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)
-p [time]:指定在多次时间以内,将相同的客户端调度到相同的后端节点之上,默认时间300s
-w:设置RS节点的权重
-g:指定用DR模式(默认)
-i:指定用tunnel模式
-m:指定用nat模式

ipvsadm主要配置文件

说明:lvs主要文件说明

/etc/rc.d/init.d/ipvsadm:sysV风格服务管理脚本

/etc/sysconfig/ipvsadm-config:配置文件

/sbin/ipvsadm:用于配置lvs规则的工具

/sbin/ipvsadm-restore:恢复或者读取规则到内存的工具

/sbin/ipvsadm-save:保存内存中的规则的工具

【默认情况下,所配置的规则都是保存在内存中的】

LVS的DR模式实战

1.准备环境

centos7.5

DR1  172.20.10.2/28

WEB1 172.20.10.8/28

WEB2 172.20.10.8/28

VIP  172.20.10.11/28

2.配置服务器端

安装依赖包

[root@ken ~]# yum install libnl* popt* kernel-devel -y

给安装的内核开发库做连接

[root@ken ~]# ln -s /usr/src/kernels/3.10.-.el7.x86_64/ /usr/src/linux/

安装lvs

[root@ken ~]# yum install ipvsadm -y

添加一个vip

[root@ken ~]# ip a a 172.20.10.11/ dev eth0

添加一个虚拟服务器

[root@ken ~]# ipvsadm -A -t 172.20.10.11: -s rr

在虚拟服务器中添加后端服务器

[root@ken ~]# ipvsadm -a -t 172.20.10.11: -r 172.20.10.9: -w  -g
[root@ken ~]# ipvsadm -a -t 172.20.10.11: -r 172.20.10.8: -w -g

查看规则

[root@ken ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 172.20.10.11:
-> 172.20.10.8:
-> 172.20.10.9:

3.配置客户端

两台客户端配置保持完全相同,除了测试文件之外。

安装配置web服务器

[root@ken ~]# yum install httpd -y
[root@ken ~]# echo "this is 172.20.10.9 for test" >/var/www/html/index.html
[root@ken ~]# systemctl restart http

给RS绑定虚拟IP

[root@ken ~]# ip a a 172.20.10.11/ dev lo:

在RS做ARP抑制

[root@ken ~]# echo "">/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@ken ~]# echo "">/proc/sys/net/ipv4/conf/all/arp_ignore
[root@ken ~]# echo "">/proc/sys/net/ipv4/conf/lo/arp_announce
[root@ken ~]# echo "">/proc/sys/net/ipv4/conf/all/arp_announce

关闭安全服务

[root@ken ~]# setenforce
[root@ken ~]# iptables -F

浏览器测试

输入VIP地址

进行刷新测试

测试完成!

补充

关于arp抑制

作用:设置不对某些arp请求做应答

实现原理:修改内核参数 /proc/sys/net/ipv4/conf/

控制方式1:arp_ignore

0:默认,表示的当该主机收到arp请求,只有该主机有所请求的哪个IP地址,就会给对方做成应答

1:只对哪些请求的目标IP是当前主机的网卡接口(这个接口就是插着网线的接口)上的地址的时候,才会做出应答

控制方式2:arp_announced

作用:限制当前主机做arp应该的条件(也就是限制当用户所请的ip是哪个IP的时候,才做arp应答)

0:默认值,表示在任意网络接口上的IP都可以做arp应答

1:优先使用本地的接口做arp应答

2:优先使用子接口做arp应答

高负载集群实战之lvs负载均衡-技术流ken的更多相关文章

  1. 高可用集群之keepalived+lvs实战-技术流ken

    keepalived简介 lvs在我之前的博客<高负载集群实战之lvs负载均衡-技术流ken>中已经进行了详细的介绍和应用,在这里就不再赘述.这篇博文将把lvs与keepalived相结合 ...

  2. 高可用集群之keepalived+lvs实战2

    keepalived简介 lvs在我之前的博客<高负载集群实战之lvs负载均衡-技术流ken>中已经进行了详细的介绍和应用,在这里就不再赘述.这篇博文将把lvs与keepalived相结合 ...

  3. 高可用集群之keepalived+lvs实战

    keepalived简介 lvs在我之前的博客<高负载集群实战之lvs负载均衡-技术流ken>中已经进行了详细的介绍和应用,在这里就不再赘述.这篇博文将把lvs与keepalived相结合 ...

  4. Haproxy+keepalived高可用集群实战

    1.1  Haproxy+keepalived高可用集群实战 随着互联网火热的发展,开源负载均衡器的大量的应用,企业主流软件负载均衡如LVS.Haproxy.Nginx等,各方面性能不亚于硬件负载均衡 ...

  5. 网站集群架构(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)--技术流ken

    前言 最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客.数据库集群请参考<MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高 ...

  6. 大数据高并发系统架构实战方案(LVS负载均衡、Nginx、共享存储、海量数据、队列缓存)

    课程简介: 随着互联网的发展,高并发.大数据量的网站要求越来越高.而这些高要求都是基础的技术和细节组合而成的.本课程就从实际案例出发给大家原景重现高并发架构常用技术点及详细演练. 通过该课程的学习,普 ...

  7. MySQL读写分离高可用集群及读操作负载均衡(Centos7)

    目录 概述 keepalived和heartbeat对比 一.环境 二.部署 部署lvs代理和keepalived MySQL+heartbeat+drbd的部署 MySQL主从复制 web服务器及a ...

  8. linux系统下对网站实施负载均衡+高可用集群需要考虑的几点

    随着linux系统的成熟和广泛普及,linux运维技术越来越受到企业的关注和追捧.在一些中小企业,尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案. 那么如何实 ...

  9. Linux下"负载均衡+高可用"集群的考虑点 以及 高可用方案说明(Keepalive/Heartbeat)

    当下Linux运维技术越来越受到企业的关注和追捧, 在某些企业, 尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案.那么如何实施Llinux集群架构,才能既有效 ...

随机推荐

  1. lab-kvm

    3)qemu帮助信息 qemu-kvm -h [root@Centos72 libvirt]#qemu-kvm -h QEMU emulator version (qemu-kvm--.el7_5.) ...

  2. JAVA:简单添加菜单界面(swing)第二版

    环境:jdk1.8 package com.le.tool; import java.awt.Color; import java.awt.Container; import java.awt.Flo ...

  3. 获取列表菜单的选项值与选项以后的VALUE

    <html> <body> <select id="izan" name="" onchange='izzzz()'> &l ...

  4. java(二)Web部分

    2.1.1讲一下http get和post请求的区别? GET和POST请求都是http的请求方式,用户通过不同的http的请求方式完成对资源(url)的不同操作.GET,POST,PUT,DELET ...

  5. poj 1026

    这题一开始没看清楚 等级差距不超过1 1->2->3 就是错误的,因为3-1==2 ,意思是间接的也不行 其次等级最小是1,最大是n 你要到达1号首领的位置 假设1号等级x,限制m,最大上 ...

  6. 天气预报demo (ShareREC 官网 MobAPI)

    第一步 自己注册一个应用,然后获取里面的 App Key,下载MobAPI SDK 然后拖入 MobAPI.framework 和 MOBFoundation.framework 到你的项目中 官网是 ...

  7. MFC图片操作

    根据MFC要操作图片的来源,可分为以下两类: 一.非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) 二.动态载入图片(即只需要在程序中指定图片的路径即可载入) 一.非动态显示图片 1.传送 ...

  8. Android-Java-普通类与抽象类(覆盖)&方法重载

    覆盖都是子类与父类之间 & 接口与实现类之间 才会产生:覆盖 有很多名称,覆盖,复写,重写 都是一个意思: 注意:重载都是方法之间  方法同名 不同参数,就属于重载: 普通类-覆盖: 描述An ...

  9. MySQL--Insert Buffer

    在进行数据插入时,需要将数据插入到聚集索引和非聚集索引中,而对于非聚集索引,需要先确定数据要插入的索引页,再将索引页加载到内存中进行修改,而在业务上很难保证插入数据在非聚集索引上也是连续的,因此插入操 ...

  10. JavaScript的文档对象模型DOM

    小伙伴们之前我们讲过很多JavaScript的很多知识点,可以点击回顾一下: <JavaScript大厦之JS运算符>: <JavaScript工作原理:内存管理 + 如何处理4个常 ...