精选文章 戏说:负载均衡

戏说:负载均衡

作者:xjtuhit 时间: 2017-08-11 05:53:52
xjtuhit 2017-08-11 05:53:52

lvs


Linux Virtual Server (lvs) 是Linux内核自带的负载均衡器,也是目前性能最好的软件负载均衡器之一。

转发模式

戏说:负载均衡1

调度算法

  • 轮叫调度(Round-Robin Scheduling)

  • 加权轮叫调度(Weighted Round-Robin Scheduling)

  • 最小连接调度(Least-Connection Scheduling)

  • 加权最小连接调度(Weighted Least-Connection Scheduling)

  • 基于局部性的最少链接(Locality-Based Least Connections Scheduling)

  • 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)

  • 目标地址散列调度(Destination Hashing Scheduling)

  • 源地址散列调度(Source Hashing Scheduling)

  • 最短预期延时调度(Shortest Expected Delay Scheduling)

  • 不排队调度(Never Queue Scheduling)

lvs配置示例

安装ipvs包并开启ip转发

yum -y install ipvsadm keepalived
sysctl -w net.ipv4.ip_forward=1

修改/etc/keepalived/keepalived.conf,增加vip和lvs的配置

vrrp_instance VI_3 {
    state MASTER   # 另一节点为BACKUP
    interface eth0
    virtual_router_id 11
    priority 100   # 另一节点为50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass PASSWORD
    }

    track_script {
        chk_http_port
    }

    virtual_ipaddress {        192.168.0.100
    }
}

virtual_server 192.168.0.100 9696 {
    delay_loop 30
    lb_algo rr
    lb_kind DR
    persistence_timeout 30
    protocol TCP

    real_server 192.168.0.101 9696 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 9696
        }
    }

    real_server 192.168.0.102 9696 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 9696
        }
    }
}


重启keepalived:


systemctl reload keepalived


最后在neutron-server所在机器上为lo配置vip,并抑制ARP响应:


vip=192.168.0.100
ifconfig lo:1 ${vip} broadcast ${vip} netmask 255.255.255.255
route add -host ${vip} dev lo:1
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

LVS缺点

  • Keepalived主备模式设备利用率低;不能横向扩展;VRRP协议,有脑裂的风险。

  • ECMP的方式需要了解动态路由协议,LVS和交换机均需要较复杂配置;交换机的HASH算法一般比较简单,增加删除节点会造成HASH重分布,可能导致当前TCP连接全部中断;部分交换机的ECMP在处理分片包时会有BUG。


Haproxy


Haproxy也是Linux最常用的负载均衡软件之一,兼具性能和功能的组合,同时支持TCP和HTTP负载均衡。

配置和使用方法请见https://nginx.org/en/。


Nginx


Nginx也是Linux最常用的负载均衡软件之一,常用作反向代理和HTTP负载均衡(当然也支持TCP和UDP负载均衡)。


自研负载均衡


Google Maglev

Maglev是Google自研的负载均衡方案,在2008年就已经开始用于生产环境。Maglev安装后不需要预热5秒内就能处理每秒100万次请求。谷歌的性能基准测试中,Maglev实例运行在一个8核CPU下,网络吞吐率上限为12M PPS(数据包每秒)。如果Maglev使用Linux内核网络堆栈则速度会慢下来,吞吐率小于4M PPS。


戏说:负载均衡2


  • 路由器ECMP (Equal Cost Multipath) 转发包到Maglev(而不是传统的主从结构)

  • Kernel Bypass, CPU绑定,共享内存

  • 一致性哈希保证连接不中断

UCloud Vortex

Vortex参考了Maglev,大致的架构和实现跟Maglev类似:

  • ECMP实现集群的负载均衡

  • 一致性哈希保证连接不中断即使是不同的Vortex服务器收到了数据包,仍然能够将该数据包转发到同一台后端服务器后端服务器变化时,通过连接追踪机制保证当前活动连接的数据包被送往之前选择的服务器,而所有新建连接则会在变化后的服务器集群中进行负载分担

  • DPDK提升单机性能 (14M PPS,10G, 64字节线速)通过RSS直接将网卡队列和CPU Core绑定,消除线程的上下文切换带来的开销

  • Vortex线程间采用高并发无锁的消息队列通信

  • DR模式避免额外开销


总结


本文为大家详细讲解了关于Linux配置中的负载均衡的装置,适应现代社会的需求,

作为运维工程师的你,学会了吗?

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:CentOS6系统初始化脚本

下一篇:关于php -fpm 出现127.0.0.1:9000已经被占用

您可能感兴趣

  • 高防弹性IP 金山云荣获“可信云技术最佳实践--网络安全”奖

    7月29-30日,由中国信息通信研究院、中国通信标准化协会主办的“ 2020可信云大会”在京举行。会上,金山云高防弹性IP(Kingsoft Cloud Advanced Defense for EIP)获得“可信云技术最佳实践--网络安全”认证,其安全能力再获国内权威认可。 可信云技术最佳实践--网络安全奖 可信云认证(TRUCS)是国内目前针对云服务的权威认证体系。近年来,随着云计算技术...

  • 美团数据库运维自动化系统构建之路

    本文整理自美团点评技术沙龙第10期:数据库技术架构与实践。 美团点评技术沙龙由美团点评技术团队主办,每月一期。每期沙龙邀请美团点评及其它互联网公司的技术专家分享来自一线的实践经验,覆盖各主要技术领域。 目前沙龙会分别在北京、上海和厦门等地举行,要参加下一次最新沙龙活动?赶快关注微信公众号“美团点评技术团队”。 本次沙龙主要围绕数据库相关的主题,内容包括美团数据库自动化运维系统构建、点评侧My...

  • 历时两周,将我司的Hadoop2升级到Hadoop3,踩了几个大坑...

    文末有赠书福利 继一次超万亿规模的Hadoop NameNode性能故障排查过程之后,虽然解决了Hadoop2.6.0版本在项目中的问题,但客户依然比较担心,一是担心版本过老,还存在其他未发现的问题;二是按目前每天近千亿条的数据增长,终究会遇到NameNode的第二次瓶颈。 基于上述原因,我们决定将当前集群由Hadoop2.6.0版本升级到Hadoop3.2.1版本,且启用联邦模式。历时2周...

  • 对云桌面、桌面云、私有云的一些看法

    最近整理了一下自2017年以来自己对私有云服务平台构建的一些认识,并以刚刚为某后勤保障部队单位提供的小规模私有云服务平台为例阐述。 私有云平台、云计算服务与虚拟化: 我个人认为这三个名称分别指涉了三个不同的事物: 私有云平台:在实践中,私有云平台时包含了服务端软硬件集成和客户端软硬件集成的一整套特定业务需求场景的、已经处于落地实施阶段的解决方案项目。 比如某后勤保障部队为简化征兵流程、节省相...

  • 210道面试官必问经典面试题总结分享|Java+JVM+数据库+算法+Spring+中间件+设计模式超详细整理

    “金九银十”的秋招热潮已经来了,由于疫情影响、今年的秋招来的格外早。小编从今天六月份开始备战,不负众望的成功拿下了一些大厂的offer。经过这么多次的面试,凭借自己的面试成功经验和这两个月的准备,小编整理了一份面试清单分享给大家,希望能给和我一样为了秋招奋战多时的码农亲人们一点帮助(java方向),觉得有帮助的同学可以转发点个赞哦~~祝大家面试顺利,一举拿下大厂offer! 一、JAVA基础...

  • Kubernetes之yaml文件详解(汇总-详细)

    一、YAML基础 YAML是专门用来写配置文件的语言,非常简洁和强大,使用比json更方便。它实质上是一种通用的数据串行化格式。 YAML语法规则: 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tal键,只允许使用空格 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 "#" 表示注释,从这个字符一直到行尾,都会被解析器忽略 在Kubernetes中,只需要知道两种结构类型即可: ...

  • 数据仓库介绍与实时数仓案例

    1.数据仓库简介 数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。 数据仓库是伴随着企业信息化发展起来的,在企业信息化的过程中,随着信息化工具的升级和新工具的应用,数据量变的越来越大,数据格式越来越多,决策要求越来越苛刻,数据仓库技术也在不...

  • 我用 Redis 干掉了一摞简历

    如果你是一位后端工程师,面试时八成会被问到 Redis,特别是那些大型互联网公司,不仅要求面试者能简单使用 Redis,还要深入理解其底层实现原理,具备解决常见问题的能力。可以说,熟练使用 Redis 就是后端工程师的必备技能。 但我发现,在工作或面试时,大家还是会有这样那样的疑问,比如:如何用 Redis 实现分布式锁?Redis 怎样处理过期键?缓存雪崩、穿透、热点问题怎么解决?持久化、...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
51CTO

51CTO

51CTO是一家综合的IT技术用户服务平台,立足满足用户多维度需求,为技术用户成长赋能。2005年成立至今,拥有专业主流技术媒体51CTO企业信息化媒体CIOAge中国最大的IT在线教育平台51CTO学院。