戏说:负载均衡

 2023-09-16 阅读 22 评论 0

摘要:lvs Linux Virtual Server (lvs) 是Linux内核自带的负载均衡器,也是目前性能最好的软件负载均衡器之一。 转发模式 调度算法 轮叫调度(Round-Robin Scheduling) 加权轮叫调度(Weighted Round-Robin Scheduling) 最小连接调度(Leas

lvs


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

转发模式

wKioL1mNeePAxZ4UAAG8sOx2HDg604.jpg-wh_50

调度算法

  • 轮叫调度(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转发

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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:


1
systemctl reload keepalived


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


1
2
3
4
5
6
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。


wKioL1mNepXSTFJyAAFBPVV9JEk782.jpg-wh_50


  • 路由器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配置中的负载均衡的装置,适应现代社会的需求,

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



本文转自 xjtuhit 51CTO博客,原文链接:http://blog.51cto.com/51reboot/1955535

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/69085.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息