• 高负载集群实战之lvs负载均衡-技术流ken


    lvs简介

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

    特点

    跨平台:window,linux

    作用

    实现负载均衡

    核心组件

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

    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分配用户请求

    静态算法

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

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

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

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

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

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

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

    动态算法

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

    overhead=active*256+inactive

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

    overhead=(active*256+inactive)/weight

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

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

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

    lblc:基于目标地址的最小连接数调度,这种算法那是lcdh的组合,适应于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/ipvsadmsysV风格服务管理脚本

    /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.0-862.el7.x86_64/ /usr/src/linux/

    安装lvs

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

    添加一个vip

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

    添加一个虚拟服务器

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

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

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

    查看规则

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

    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/32 dev lo:0

    在RS做ARP抑制

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

    关闭安全服务

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

    浏览器测试

    输入VIP地址

    进行刷新测试

    测试完成!

    补充

    关于arp抑制

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

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

    控制方式1arp_ignore

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

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

    控制方式2arp_announced

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

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

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

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

  • 相关阅读:
    基于Java的Socket类Tcp网络编程实现实时聊天互动程序(一):QQ聊天界面的搭建
    前端开发者的福音!通过拖拽就可生成Vue代码的平台来了!
    爬虫实战 如何爬取B站视频评论?
    年轻就该多尝试,教你20小时Get一项新技能
    利用Python将多张图片合成视频
    利用myqr库创建自己的二维码
    用Python爬取日向、樱坂成员blog中的JPG文件的url并将其下载到本地
    【MemSQL Start[c]UP 3.0 Round 1 A】 Declined Finalists
    【MemSQL Start[c]UP 3.0 Round 1 E】Desk Disorder
    【MemSQL Start[c]UP 3.0 Round 1 C】 Pie Rules
  • 原文地址:https://www.cnblogs.com/kenken2018/p/9734382.html
Copyright © 2020-2023  润新知