热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

服务负载之LVS

duang!duang!duang!今天开始写服务高可用之lvs。回顾一下,我们一般服务集群可分为以下三种:1.负载均衡集群,如lvs,nginx(7层负载),haproxy(4层

duang!duang!duang!今天开始写服务高可用之lvs。

回顾一下,我们一般服务集群可分为以下三种:

  1.负载均衡集群,如lvs,nginx(7层负载),haproxy(4层,7层都可以)等

  2.高可用集群,如keepalive,heartbeat组成的高可用,数据自身的主从高可用,主主高可用

  3.高性能集群,如某些运算工作站

LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。lvs是根据TCP/IP4层协议,依赖内核的netfilter,工作在INPUT链上,实现4层负载,突破了套接字的限制,具有强大的并发能力。由于它不关心服务是否可用,在轮询等算法中,前端访问服务时,会出现固定比例的访问不可达,没有冗余功能。

lvs工作模式可分为:

  1.nat,多目标DNAT,顾名思义,目标地址转换,修改请求报文的目标地址(有时也会修改端口),转发给后端服务器。

  2.dr,直接路由,修改请求报文的目标mac地址,转发给同网段服务器。

  3.tun,隧道,不修改请求报文的IP首部,在原有的IP首部上,再封装一个IP首部,有可能会突破mut的限制,可能有一些手段限制请求包的大小。

lvs支持的算法:

  1.rr,轮询,根据ipvsadm管理表里面的次序,依次循环分配请求,绝对公平

  2.wrr,加权轮询,根据服务性能设置权重,根据权重比例分配请求,手握权重,我优先

  3.sh,源地址hash,把来自同一IP的请求始终分配同一RS主机,可以实现类似session会话保持功能

  4.dh,目标地址hash,对同一目标请求始终分配给同一RS主机,实现类似提高缓存命中功能

上面4种为静态算法。何为静态呢?是指,前端负载,不管后端服务的性能差异,始终我行我素的按照规则分配,根据现实社会规律,当人数太多,而每个人的能力强弱不一样,平均分配会使能力差的人不太公平,古人云,能者多劳。于是有了下面的算法;

  5.lc,最少链接,最少的家伙优先分配,公式:活动链接数*256+非活动链接数之和

  6.wlc,加权最少链接,lc升级版,权重大的优先分配,公式:(活动链接数*256+非活动链接数)/权重

  7.sed,最短期望延迟,公式:(活动链接数+1)*256/权重

  8.nq,按照权重大小一次分配,再按照sed算法

  9.lblc,基于本地最小链接的目标地址hash,即为动态DH算法,先LC,再DH,目前主要用于Cache集群系统

 10.lblcr,带复制功能的LBLC

ipvs管理工具:ipvsadm

常用命令: 

添加服务:ipvsadm -A -t 192.168.0.50:80 -s rr

修改服务:ipvsadm -E -t 192.168.0.50:80 -s wrr

保存服务:ipvsadm-save = ipvsadm -S

载入服务:ipvsadm-restore =ipvsadm -R

添加RS:ipvsadm -a -t 192.168.0.50:80 -r 172.16.1.90 -m -w 1 (-m为nat工作模式)

修改RS:ipvsadm -e -t 192.168.0.50:80 -r 172.16.1.90 -g -w 1 (-g为dr工作模式)

显示链接报文数: ipvsadm -L -n --stats

由于ipvs是工作在内核上的,我们只需要安装ipvsadm,往ipvs上面写规则就是了。

yum install -y ipvsadm

基于nat工作模式的lvs

在lvs服务端,清空iptables规则,准备2台httpd服务器

在服务端添加

iptables -F 

ipvsadm -A -t 172.16.2.10:80 -s rr

ipvsadm -a -t 172.16.2.10:80 -r 172.16.1.90 -g -w 1

ipvsadm -a -t 172.16.2.10:80 -r 172.16.1.91 -g -w 1


基于dr工作模式lvs

服务端配置:

iptables -F 

ifconfig eth0:0 172.16.2.10 up

route add -host 172.16.2.10 dev eth0:0

添加ipvs命令

ipvsadm -A -t 172.16.2.10:80 -s rr

ipvsadm -a -t 172.16.2.10:80 -r 172.16.1.90 -g -w 1

ipvsadm -a -t 172.16.2.10:80 -r 172.16.1.91 -g -w 1

技术分享

 

所有客户端配置:

先定义参数:

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

在lo上配置ip别名

ifconfiglo:0 172.16.2.10/32 broadcast 172.16.2.10 up

添加lo到网卡的路由

route add -host 172.16.2.10 dev lo:0

技术分享

服务负载之LVS


推荐阅读
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • LeetCode 102 - 二叉树层次遍历详解
    本文详细解析了LeetCode第102题——二叉树的层次遍历问题,提供了C++语言的实现代码,并对算法的核心思想和具体步骤进行了深入讲解。 ... [详细]
  • JavaScript 中引号的多层嵌套使用技巧
    本文详细介绍了在 JavaScript 编程中如何处理引号的多级嵌套问题,包括双引号、单引号以及转义字符的正确使用方法。 ... [详细]
  • 解决UIScrollView自动偏移问题的方法
    本文介绍了一种有效的方法来解决在使用UIScrollView时出现的自动向下偏移的问题,通过调整特定的属性设置,可以确保滚动视图正常显示。 ... [详细]
  • 如何高效渲染JSON数据
    本文介绍了在控制器中返回JSON结果的方法,并详细说明了如何利用jQuery处理和展示这些数据,为Web开发提供了实用的技巧。 ... [详细]
  • Awk是一款功能强大的文本分析与处理工具,尤其在数据解析和报告生成方面表现突出。它通过读取由换行符分隔的记录,并按照指定的字段分隔符来划分和处理这些记录,从而实现复杂的数据操作。 ... [详细]
  • 深入解析Unity3D游戏开发中的音频播放技术
    在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
  • 本文探讨了一种常见的C++面试题目——实现自己的String类。通过此过程,不仅能够检验开发者对C++基础知识的掌握程度,还能加深对其高级特性的理解。文章详细介绍了如何实现基本的功能,如构造函数、析构函数、拷贝构造函数及赋值运算符重载等。 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 3DSMAX制作超现实的体育馆模型
    这篇教程是向脚本之家的朋友介绍3DSMAX制作超现实的体育馆模型方法,教程制作出来的体育馆模型非常地不错,不过教程有点难度,需要有一定基础的朋友学习,推荐到脚本之家,喜欢的朋友可 ... [详细]
  • 本文介绍了如何在AngularJS应用中使用ng-repeat指令创建可单独点击选中的列表项,并详细描述了实现这一功能的具体步骤和代码示例。 ... [详细]
  • 在项目冲刺的最后一天,团队专注于软件用户界面的细节优化,包括调整控件布局和字体设置,以确保界面的简洁性和用户友好性。 ... [详细]
  • JavaScript 页面卸载事件详解 (onunload)
    当用户从页面离开时(如关闭页面或刷新页面),会触发 onunload 事件,此时可以执行预设的脚本。需要注意的是,不同的浏览器对 onunload 事件的支持程度可能有所不同。 ... [详细]
author-avatar
多米音乐_35677591
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有