负载均衡
负载均衡:负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
DNS
系统安装完成后,用:rpm –qa | grep bind 命令检验Bind的安装情况,正常情况下会有如下安装包:
ypbind-1.19-8.el5
bind-9.3.4-6.P1.el5
bind-chroot-9.3.4-6.P1.el5
bind-libs-9.3.4-6.P1.el5
bind-utils-9.3.4-6.P1.el5
添加多条A记录
Nginx负载均衡
设置负载均衡服务器的地址
设置真实服务器列表
LVS
LVS方式的cluster从结构上可分为两部分:前端的负载均衡器(称之为director)和后端的真实服务器(称之为real server)。cluster前端的director将来自外界的请求调度到cluster后端不同的real server去执行。real server负责真正的提供各种应用服务,比如:Web、FTP、Mail等服务。real server的数量可以根据实际需求进行增加、减少。
LVS的三种包转发方式
NAT(网络地址映射)
NAT方式可支持任何的操作系统,以及私有网络,并且只需一个Internet IP地址,但是整个系统的性能受到限制。因为执行NAT每次需要重写包,有一定的延迟;另外,大部分应用有80%的数据是从服务器流向客户机,也就是用户的请求非常短,而服务器的回应非常大,对负载均衡器形成很大压力,成为了新的瓶颈。
IP Tunneling(IP隧道)
director分配请求到不同的real server。real server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。IP Tunneling技术极大地提高了director的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过100个节点。real server可以在任何LAN或WAN上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有正式的IP地址用于与客户机直接通信,并且所有服务器必须支持IP隧道协议。
Direct Routing(直接路由)
与IP Tunneling类似,负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。Direct Routing与IP Tunneling相比,没有IP封装的开销,但由于采用物理层(修改MAC地址)技术,所有服务器都必须在一个物理网段。
LVS的八种调度算法
1.轮叫调度(Round-Robin Scheduling)
2.加权轮叫调度(Weighted Round-Robin Scheduling)
3.最小连接调度(Least-Connection Scheduling)
4.加权最小连接调度(Weighted Least-Connection Scheduling)
5.基于局部性的最少链接(Locality-Based Least Connections Scheduling)
6.带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
7.目标地址散列调度(Destination Hashing Scheduling)
8.源地址散列调度(Source Hashing Scheduling)
LVS所需的核心模组
LVS发展出一个名为IPVS(IP Virtual Server)的核心模组,直接于Linux的核心中运作,进行连线的导引与调度.IPVS模组于2.4.23版开始,已正式纳入Linux的内核中,成为Linux的一部分。
[root@smart401 ~]# grep "CONFIG_IP_VS" /boot/config-`uname -r`
CONFIG_IP_VS=m //已包含IPVS模组,m代表已编译为模组,y则是已内建于内核,n表示不支援
# CONFIG_IP_VS_DEBUG is not set
CONFIG_IP_VS_TAB_BITS=12
CONFIG_IP_VS_PROTO_TCP=y //这些是IPVS所支援的通讯协定
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_RR=m //这些是IPVS所支援的调度演算模组
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
CONFIG_IP_VS_FTP=m //此为IPVS支援FTP协议的模组
安装
tar zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
ln –s /usr/src/kernels/2.6.9-67.EL-smp-i686/ /usr/src/linux/
make && make install
ipvsadm //出现下面的信息表示ipvsadm安装成功!
使用 VS-NAT 架设LVS群集
NAT设定
首先执行如下命令,在虚拟服务器上设定NAT功能:
[root@smart401 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
//将ip_forward值由0改为1,表示启动封包传送功能
[root@smart401 ~]# modprobe ip_tables //载入ip_table模块
[root@smart401 ~]# modprobe ip_nat_ftp //载入ip_nat_ftp模块,让区域网中的主机可以连上ftp服务器
[root@smart401 ~]# modprobe ip_conntrack //载入连线追踪模块
[root@smart401 ~]# modprobe ip_conntrack_ftp //载入追踪ftp及irc连线的模块
[root@smart401 ~]# modprobe ip_conntrack_irc
/etc/init.d/iptables restart
Iptables -F
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.0.0/24 -j MASQUERADE
算法调度
-A:为add-service的意思,此参数表示随后的设定将为群集新增一个网路服务
-t:表示此网络使用TCP通讯协议
-s:设定此网路服务器将采用哪一种调度演算法进行负载均衡的调度,
rr:为轮序调度算法的所写
-a:为add-server的意思,表示随后将为群集添加一个真实服务器
-t:使用TCP
-r:设定真实服务器IP
-m:设定网路服务采用的运作方式,-m:VS-NAT;-g:VS-DR;-i:VS-TUN
轮序调度算法
ipvsadm -A -t 192.168.1.249:80 -s rr
ipvsadm -a -t 192.168.1.249:80 -r 192.168.0.16 -m
ipvsadm -a -t 192.168.1.249:80 -r 192.168.0.17 –m
加权轮调度演算法
ipvsadm -D -t 192.168.100.234:80 删除先前的设置
ipvsadm -A -t 192.168.100.234:80 -s wrr -s:表示采用加权轮序演算法(所写wrr)
ipvsadm -a -t 192.168.100.234:80 -r 192.168.0.237 -m -w 8
-w:设定真实服务器的权重,权重越高表示被分配越多的连线
ipvsadm -a -t 192.168.100.234:80 -r 192.168.0.239 -m -w 1
目标地址散列调度
ipvsadm -A -t 192.168.100.234:80 -s rr –p 1200
ipvsadm -a -t 192.168.100.234:80 -r 192.168.0.237:80 -m
ipvsadm -a -t 192.168.100.234:80 -r 192.168.0.239:80 -m
验证:
Ipvsadm –save > /etc/init.d/ipvsadm
/etc/init.d/ipvsadm restart
真实服务器:
/etc/init.d/iptables stop
Route add default gw 192.168.100.234
客户端:
Curl http://192.168.100.234
使用 VS-DR 架设LVS群集
director服务器配置
/sbin/ifconfig eth0:0 192.168.100.1 broadcast 192.168.100.1 netmask 255.255.255.255 up
/sbin/route add -host 192.168.100.1 dev eth0:0
echo "1" >/proc/sys/net/ipv4/ip_forward
配置ipvsadm
/sbin/ipvsadm –C
/sbin/ipvsadm -A -t 192.168.100.1:80 -s wlc
/sbin/ipvsadm -a -t 192.168.100.1:80 -r 192.168.0.1:80 -g -w 3
/sbin/ipvsadm -a -t 192.168.100.1:80 -r 192.168.0.2:80 -g -w 1
Ipvsadm –save > /etc/init.d/ipvsadm
/etc/init.d/ipvsadm restart
真实服务器配置
/sbin/ifconfig lo:0 192.168.100.1 broadcast 192.168.100.1 netmask 255.255.255.255 up
Route add –host 192.168.100.1 dev lo:0
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
sysctl -p
keepalived
Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器 发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激 活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的 IP地址是否有效作为服务器工作正常与否的标准。在本文中将采用这种方式。
Layer4: Layer4主要以 TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
Layer5:Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则 Keepalived将把服务器从服务器群中剔除。
Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。
1、 WatchDog 负责监控checkers 和VRRP 进程的状况。
2、 Checkers 负责真实服务器的健康检查healthchecking,是keepalived 最主要的功能。换句话说—可以没有VRRP Stack,但健康检查healthchecking 是一定要有的。
3、 VRRP Stack 负责负载均衡器之间的失败切换FailOver.如果只用一个负载均衡器,则VRRP 不是必须的。
4、 IPVS wrapper 用来发送设定的规则到内核ipvs 代码。
5、 Netlink Reflector 用来设定 vrrp 的vip 地址等。Keepalived 各种功能的实现是通过设置其配置文件 keepalived.conf 来完成的。
安装配置
配置文件:
virtual_server 125.38.38.64 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
# persistence_timeout 20
protocol TCP
real_server 125.38.38.101 80 {
weight 100
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 125.38.38.99 80 {
weight 100
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
安装需要指定内核
需使用-f选项指定配置文件
使用-D选项使其打印详细的日志消息
/usr/local/keepalived/sbin/keepalive –D –f /usr/local/keepalived/etc/keepalived/keepalived.conf
tail -f /var/log/messages