openstack-notes

OSPF+ECMP多活负载均衡方案https://cloud.tencent.com/developer/article/2030638

lvs

Linux Virtual Server (lvs) 是Linux内核自带的负载均衡器,也是目前性能最好的软件负载均衡器之一。lvs包括ipvs内核模块和ipvsadm用户空间命令行工具两部分。

在lvs中,节点分为Director Server和Real Server两个角色,其中Director Server是负载均衡器所在节点,而Real Server则是后端服务节点。当用户的请求到达Director Server时,内核netfilter机制的PREROUTING链会将发往本地IP的包转发给INPUT链(也就是ipvs的工作链),在INPUT链上,ipvs根据用户定义的规则对数据包进行处理(如修改目的IP和端口等),并把新的包发送到POSTROUTING链,进而再转发给Real Server。

转发模式

NAT

NAT模式通过修改数据包的目的IP和目的端口来将包转发给Real Server。它的特点包括

DR

DR(Direct Route)模式通过修改数据包的目的MAC地址将包转发给Real Server。它的特点包括

TUN

TUN模式通过将数据包封装在另一个IP包中(源地址为DIP,目的为RIP)将包转发给Real Server。它的特点包括

FULLNAT

FULLNAT是阿里在NAT基础上增加的一个新转发模式,通过引入local IP(CIP-VIP转换为LIP->RIP,而LIP和RIP均为IDC内网IP)使得物理网络可以跨越不同vlan,代码维护在https://github.com/alibaba/LVS上面。其特点是

调度算法

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
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

LVS缺点

Haproxy {#7i5j12}

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

配置和使用方法请见官网

Nginx {#9qlv65}

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

配置和使用方法请见官网

自研负载均衡 {#8a398o}

Google Maglev {#7ljjzx}

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

UCloud Vortex {#1t6dfj}

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

参考文档 {#8hru0w}