戏说:负载均衡

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值