一、数据链路层负载均衡
1、双网卡绑定交换机配置
实现方式:双网卡绑定,在思科交换机上称呼为EtherChannel
Switch(config)#interface range fstaEthernet 0/23-34
Switch(config-if-range)#switchport mode access
Switch(config-if-range)#channel-group 3 mode active
Switch(config-if-range)#switchport access vlan 9
Switch(config-if-range)#no shut
Switch(config)#show etherchannel summary #如果显示是SU状态正常,如果是D,协商失败。
说明:
Switch(config-if-range)#channel-group 1 mode ? #通过此命令在交换机查看端口聚合可以使用的协议
active Enable LACP unconditionally #主动发送LACP报文
auto Enable PAgP only if a PAgP device is detected #被动发送PAgP报文
desirable Enable PAgP unconditionally #主动发送PAgP报文
on Enable Etherchannel only #手动设置,需要两边都设置成on
passive Enable LACP only if a LACP device is detected #被动接收LACP报文
2、服务器配置
vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.157
NETMASK=255.255.255.0
vi /etc/sysconfig/network
GATEWAY=192.168.1.1
vi /etc/sysconfig/network-scripts/ifcfg-enp132s0f0
BOOTPROTO=none
TYPE=Ethernet
DEVICE=enp132s0f0
ONBOOT=yes
MASTER=bond0
SLAVE=yes
vi /etc/sysconfig/network-scripts/ifcfg-enp132s0f1
BOOTPROTO=none
TYPE=Ethernet
DEVICE=enp132s0f1
ONBOOT=yes
MASTER=bond0
SLAVE=yes
vi /etc/modprobe.conf
alias bond0 bonding
options bond0 miimon=100 mode=0
vi /etc/rc.d/rc.local
ifenslave bond0 enp132s0f0 enp132s0f1
modprobe bonding;lsmod |grep bonding;service network restart
注:
1、miimon 单位:毫秒,miimon=100的意思就是,每100毫秒检测网卡和交换机之间是否连通,如不通则使用另外的链路。
2、mode=0 表示负载均衡方式:第1个包走eth0,下一个包就走eth1....一直循环下去,直到最后一个传输完毕
3、mode=1 表示主备关系,只有一个设备处于活动状态,当 一个宕掉另一个马上由备份转换为主设备
6、mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,....ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量
7.mode=4 是两块网卡同时跑流量,交换机支持802.3AD功能,即LACP协议,必须开启该模式。
vi /etc/rc.d/rc.local
ifenslave bond0 eth0 eth1 …… eht*
#检查状态
cat /proc/net/bonding/bond0
#检查流量信息
#ifstat -b
二、四层负载均衡
原理:是由负载均衡设备或者软件 ,通过TCP或者UDP的Header信息进行直接判断由哪个实际的后端服务器来处理该链接,从而实现转发。
简要说明:
1)负载均衡接受来自客户端的TCP SYN包后,通过调度到后端服务器。
2)后端服务收到SYN以后,回复SYN+ACK包到负载均衡。
3)负载均衡回复SYN+ACK至客户端。
4)客户端收到SYN+ACK包以后,客户端回复一个ACK包
5)至此会话建立。
四层负载均衡的特点:
1)模型简单,不关心业务逻辑,只负载调度,网络转发,和对后端的服务器监控检查。
2)吞吐量大的业务。
3)应用范围广,工作在4层,可以对所有的应用做负载均衡,包括HTTP,和数据库,和在线聊天等。
三、七层负载均衡
与4层最大的区别:7层是在后端服务器接收到TCP数据以后,才开始才开始建立连接。而4层是在一开始就建立连接。
七层负载均衡的特点:
1)模型复杂度高,需要解开请求里面的HTTP主机头信息,作为调度的依据。
2)吞吐量小,CPU处理负载,相对于4层,提供的吞吐量较小。
3)对后端选择的精细化控制,可以根据客户的请求,更加合理的选择,提高后端的执行效率。
四、基于DNS的负载均衡
原理:在DNS上多配置几条A记录
特点:
1)配置简单,不需要额外的投入
2)DNS的缓存问题,会导致被访问的服务器故障时,切换时间变长。
3)一般需要配合其他负载均衡方案和监控。
五、基于重定向的负载均衡
1)基于HTTP 302重定向下载系统,302重定向上传系统
通过302方法,不同用户访问该链接时,按照预先配置的比率,概率的引导客户端去不同的节点去下载资源,从而达到分流目的。
六、基于客户端的负载均衡
1)基于哈希算法
在程序中,通常使用哈希算法来计算节点。例如有3台功能相同的服务器A,B,C,有一个数据M需要存储在其中一个节点上,最简单的方法是通过CRC32,然后取模,计算出存储节点。
2)数据库读写分离
在基于数据库的应用中,应用程序使用数据库分离方法,将对数据库的读写压力进行均衡,在mysql集群中,可以配置一台或者多台Slave,来分担数据读取压力。
应用程序判断SQL的类型,是SELECT就发送给slave节点,如果是INSERT,或UPDATE就发给master节点。
基于客户端的负载均衡的特点:
1)由客户端的程序内部实现,不需要额外的负载均衡。
2)程序内部需要解决业务服务不可用问题,服务器端故障对应用程序的透明度较小。
3)程序内部需要解决业务服务器过载的问题。