基础:
由于我们的负载调度技术是在Linux内核中实现的,我们称之为Linux虚拟服务器(Linux Virtual Server)
1.ARRP协议(地址解析协议):
实现通过IP地址获得对应主机的MAC地址
IP地址解析为MAC:
发送数据时,先检查缓存,如果没有则开始广播寻找对应的MAC地址,有相对应MAC的MAC的主机给其一个单播回复,并缓存其MAC地址到本地主机arp表中
#arp -a 查看高速缓存中的所有项目
[root@foundation66 ~]# arp -a
www.westos.org (172.25.66.1) at 52:54:00:da:ca:19 [ether] on br0
? (222.24.28.73) at b0:e2:35:c9:d8:72 [ether] on wlp2s0
? (222.24.28.24) at 38:a4:ed:1d:00:c1 [ether] on wlp2s0
? (172.25.254.254) at <incomplete> on br0
? (222.24.28.1) at 20:4e:71:6d:62:9c [ether] on wlp2s0
[root@foundation66 ~]# ping 172.25.66.2
[root@foundation66 ~]# arp -a
.....
www.westos.org (172.25.66.2) at 52:54:00:c5:96:23 [ether] on br0
#已将172.25.66.2缓存至本地
2.集群
一堆机器协同工作,在外面的人看来像是一个机器一样
3.集群的特点等
特点:
(1)高性能
(2)高可用
(3)价格有效性
(4)可伸缩性
4.集群分类
(1)负载均衡集群
(2)高可用集群
(3)高性能网络计算
5.负载均衡集群
把很多客户集中访问的请求负载压力尽可能平均分摊在计算机集群中处理
应用位置:WEB服务器|数据库从服务器
作用:分担请求和数据流量|保证业务连续性
常用软件:Lvs|nginx|haproxy
6.高可用性集群
当一台宕机后另外一台接管(IP资源和服务)
常用软件:keepalive|heartbeat等
参考图:
Lvs负载均衡介绍
1.负载均衡搭建的需求
*)把多个请求分到多个设备上
*)将单个重负载的运算分到多台节点上,节点处理之后返回
*)7*24小时的业务保证(扩展网络和服务器的负载、带宽、增加吞吐量、加强网络数据处理能力)
2.lvs(Linux虚拟服务器)
服务器端平台:Linux/Unix 客户端:可以在windows上
lvs项目介绍:
http://www.linuxvirtualserver.org/zh/lvs1.html
http://www.linuxvirtualserver.org/zh/lvs2.html
http://www.linuxvirtualserver.org/zh/lvs3.html
http://www.linuxvirtualserver.org/zh/lvs4.html
可通过ipvsadm或者keepalived来管理ipvs
LVS:
1.真正的实现调度的管理工具是IPVS
2.真正管理工具:ipvsadm
3.keepalive实现管理及高可用
3.常用术语:
VIP:虚拟IP(VIP为Directory用于向客户端计算机提供IP地址,域名解析就解析在VIP上)
RIP:真正IP(集群下面节点的IP地址)
DIP:Directory上的IP(用来链接内外网络的IP地址)
CIP:客户端主机的IP地址
4.LVS工作模式
(1)NAT模式–网络地址转换
调度器对地址进行改写实现(入:目标IP改写|出:源IP改写)
只需要在调度器上配公网IP即可
RS网关地址要配成LB私有网卡地址
出入都需要经过DR,因此访问量大时,DR很容易成为瓶颈
出入都需要经过DR,因此要开启内核转发
NAT模式:
(2)DR模式–直接路由(使用较多)
在调度器上修改目的MAC地址进行转发
请求的报文经过DR访问无需再经过其返回
RS和LB必须在一个节点内(DR是通过修改MAC的改写实现转发)
需要RS节点的VIP的绑定和ARP抑制问题
RS节点的默认网关不需要调度器LB的DIP
无法进行端口转发
效率高,但是配置麻烦,维护困难(日PV2000W或并发请求万以下都可以考虑Haproxy/nginx)
DR模式:
(3)TUN模式
集群节点可以跨越internet
RIP必须是公网地址
directory只处理入栈请求,响应报文由realserver直接发往客户端
realserver网关不能指向directory
只有支持隧道的(OS)才能用于realserver
TUN模式:
(4)Fullnat模式
在请求报文到达时,同时修改报文的源地址和目标地址
5.Lvs调度算法
一般网络服务如http|Mail|Mysql等
常用lvs调度算法:
基本轮叫:rr
加权最小链接:wlc
加权轮叫:wrr
http://blog.csdn.net/scape1989/article/details/21085659
LVS
1.安装LVS
[root@server1 kernels]# yum install kernel-devel -y
[root@server1 kernels]# uname -r
2.6.32-431.el6.x86_64
#此时如果没有安装kernel-devel包,此时uname不出结果
[root@server1 ~]# ln -s /usr/src/kernels/'uname -r'/ /usr/src/linux
[root@server1 ~]# ll /usr/src/
total 8
drwxr-xr-x. 2 root root 4096 Jun 28 2011 debug
drwxr-xr-x. 3 root root 4096 Sep 21 12:54 kernels
lrwxrwxrwx 1 root root 26 Sep 21 12:57 linux -> /usr/src/kernels/uname -r/
[root@server1 ~]# ls
ipvsadm-1.26.tar.gz varnish-libs-3.0.5-1.el6.x86_64.rpm
[root@server1 ~]# tar zxf ipvsadm-1.26.tar.gz
[root@server1 ~]# cd ipvsadm-1.26
[root@server1 ipvsadm-1.26]# make
#如果报错
.....
‘ipvs_nl_send_message’
make[1]: *** [libipvs.o] Error 1
make[1]: Leaving directory `/root/ipvsadm-1.26/libipvs'
make: *** [libs] Error 2
.....
[root@server1 ipvsadm-1.26]# yum install libnl* popt* -y
[root@server1 ipvsadm-1.26]# make
.....
collect2: ld returned 1 exit status
make: *** [ipvsadm] Error 1
[root@server1 ~]# rpm -ivh popt-static-1.13-7.el6.x86_64.rpm
[root@server1 ipvsadm-1.26]# make install
[root@server1 ipvsadm-1.26]# echo $?
0
[root@server1 ipvsadm-1.26]# lsmod | grep ip_vs
[root@server1 ipvsadm-1.26]# modprobe ip_vs #将命令放入内核中|或者执行/sbin/ipvsadm
[root@server1 ipvsadm-1.26]# lsmod | grep ip_vs
ip_vs 125220 0
libcrc32c 1246 1 ip_vs
ipv6 317340 16 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
[root@server1 ipvsadm-1.26]#
2.配置ipvsadm
ipvsadm -C #清空所有
-D #删除集群
-A #添加实例
-a #添加节点
[root@server1 ~]# ipvsadm -A -t 172.25.66.1:80 -s rr -p 20
[root@server1 ~]# ipvsadm -a -t 172.25.66.1:80 -r 172.25.66.2 -g -w 1
[root@server1 ~]# ipvsadm -a -t 172.25.66.1:80 -r 172.25.66.3 -g -w 1
[root@server1 ~]# ipvsadm -L -n #检查集群结果
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.66.1:80 rr persistent 20
-> 172.25.66.2:80 Route 1 0 0
-> 172.25.66.3:80 Route 1 0 0
[root@server1 ~]#
#添加虚拟IP:ifconfig eth1:0 172.25.66.100
#Lvs自己不能实现健康检查
3.Others
lvs调度器裂脑:互相不知道对方的状态,然后各自起服务
发生原因:
高可用服务器之间心跳链路故障,导致无法相互检查心跳
高可用服务器上开启了防火墙,阻挡了心跳
高可用服务器上网卡地址等信息配置不正常,导致心跳发送失败
其它服务配置不当等原因,如心跳方式不同,心跳广播冲突,软件Bug等