负载均衡的几种实现方式
(1)HTTP重定向负载均衡。
这种负载均衡方案的优点是比较简单;
缺点是浏览器需要每次请求两次服务器才能拿完成一次访问,性能较差。
(2)DNS域名解析负载均衡
优点是将负载均衡工作交给DNS,省略掉了网络管理的麻烦;
缺点就是DNS可能缓存A记录,不受网站控制。
(3)反向代理负载均衡。
优点是部署简单;
缺点是反向代理服务器是所有请求和响应的中转站,其性能可能会成为瓶颈。
(4)IP负载均衡。
优点:IP负载均衡在内核进程完成数据分发,较反向代理均衡有更好的处理性能。
缺点:负载均衡的网卡带宽成为系统的瓶颈。
(5)数据链路层负载均衡。
避免负载均衡服务器网卡带宽成为瓶颈,是目前大型网站所使用的最广的一种负载均衡手段。
附录:
数据链路层的负载均衡
Linux服务器实施双网卡绑定(Bonding),可增加吞吐量,实现负载均衡,同时实现高可用。(均衡冗余)(数据链路层唯一负载均衡)
Linux双网卡绑定使两块网卡虚拟成一块网卡,该网卡的驱动是bonding。(在/boot/config*可查看内核是否支持BONDING模块)。
配置方法:
(环境:VMware CentOS7.2 双网卡)
(下面配置,使用nmcli网络管理工具)
1.查看网卡名称及状态
[[email protected] 桌面]# nmcli device status
设备 类型 状态 CONNECTION
virbr0 bridge 连接的 virbr0
eno16777736 ethernet 连接的 eno16777736
eno33554984 ethernet 连接的 有线连接 1
virbr0-nic tap 连接的 virbr0-nic
lo loopback 未管理 --
2.配置网卡虚拟bond0及配置模式(配置为负载均衡轮循模式)
[[email protected] 桌面]# nmcli connection add type bond con-name bond0 ifname bond0 mode balance-rr
成功添加的连接 'bond0'(8654ebdb-99ac-4abb-9862-c16cd63a033f)。
3.将物理网卡绑定到bond0
[[email protected] 桌面]# nmcli connection add type bond-slave ifname eno16777736 master bond0
成功添加的连接 'bond-slave-eno16777736'(7d5cd0c8-703b-4fd3-8f86-e909700cc3a1)。
[[email protected] 桌面]# nmcli connection add type bond-slave ifname eno33554984 master bond0
成功添加的连接 'bond-slave-eno33554984'(2c79b9c4-8a3e-4f27-9cd0-33cc30a51d3c)。
4.启动绑定的物理网卡
[[email protected] 桌面]# nmcli connection up bond-slave-eno16777736
成功**的连接(D-Bus **路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
[[email protected] 桌面]# nmcli connection up bond-slave-eno33554984
成功**的连接(D-Bus **路径:/org/freedesktop/NetworkManager/ActiveConnection/6)
5.启动虚拟bond0网卡
[[email protected] 桌面]# nmcli connection up bond0
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
6.设置静态IP,取消DHCP,设置手动模式
[[email protected] 桌面]# nmcli connection modify bond0 ipv4.addresses 192.168.1.166/24 ipv4.gateway 192.168.1.1 ipv4.dns 192.168.1.1
[[email protected] 桌面]# nmcli con modify team0 ipv4.method manual
[[email protected] 桌面]# service network restart
bond七种模式:
Mode=0(blance-rr):表示负载分担round-robin,和交换机的聚合强制不协商方式配合。
Mode=1(active-backup):表示主备模式,一块active,一块standby.
Mode=2(balance-xor):表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy)
Mode=3(broadcast):表示所有包从所有interface发出,这个不均衡,只有冗余机制和交换机的聚合强制不协商方式配合。
Mode=4(802.3ad):表示支持802.3ad协议,和交换机的聚合LACP方式配合(需要xmit_hash_policy)
Mode=5(balance-tlb):是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave
Mode=6(balance-alb):在5的tlb基础上增加了rlb。
0,2和3理论上需要静态聚合方式。(0可以通过mac地址欺骗的方式在交换机不设置的情况下不太均衡地进行接收)
4需要支持802.3ad
5和6不需要交换机端的设置,网卡能自动聚合。
mode0下bond所绑定的网卡的IP都被修改成相同的mac地址,如果这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址对应的端口就有多个,那么交换机接受到发往这个mac地址的包应该往哪个端口转发呢?正常情况下mac地址是全球唯一的,一个mac地址对应多个端口肯定使交换机迷惑了。所以mode0下的bond如果连接到交换机,交换机这几个端口应该采取聚合方式(cisco称为ethernetchannel,foundry称为portgroup),因为交换机做了聚合后,聚合下的几个端口也被捆绑成一个mac地址.解决办法是,两个网卡接入不同的交换机即可。
参考博客: