一、LVS概述:
负载均衡技术有很多实现方案,基于DNS域名轮流解析、基于客户端调度访问、基于应用系统负载的调度、基于IP地址的调度,执行效率最高的是IP负载均衡技术。
LVS的IP负载均衡是通过IPVS模块实现的。在调度器(Director Server)上虚拟出一个IP地址,即VIP(virtual IP)。访问请求首先经过VIP到达负载调度器,然后由负载调度器从real server列表中选取一个服务节点响应用户的请求。
1、LVS的三种模式:
1.1、NAT(Network Address Translation)网络地址翻译技术。
原理:当用户请求到达调度器时,调度器讲请求报文的目标地址(VIP)和端口改写成选定的real server地址和端口,最后将报文请求发送到选定的real server。服务器端得到数据后,将数据返回给用户时,需要再次经过调度器将报文的源地址和端口改成VIP和响应端口,再把数据发送给用户,完成负载调度过程。
缺点:在NAT方式下,用户请求和响应报文都必须经过调度器(Director Server)地址重写,当用户请求越多,调度器的处理能力将成为瓶颈。
1.2、TUN(IP Tunneling)IP隧道技术。
原理:调度器在收到用户的请求时,调度器会采用IP隧道技术将用户请求转发到某个real server,这个real server将直接响应用户的请求,不再经过调度器。real server可以和调度器在同一网段,也可以在独立的一个网络中。
优点:调度器只处理用户的报文请求,从而使集群系统的吞吐量大大提高。
1.3、DR(Direct Routing)直接路由技术。
原理:通过改写用户请求报文的MAC地址,将请求发送到real server,real server将响应直接返回给客户,免去了TUN中IP隧道的开销。
优点:较上两种性能最好,但是Director Server与real server必须由一块网卡连在同一物理网段。
2、LVS负载调度的算法:
2.1、轮叫调度(Round Robin)。
轮叫调度也叫1:1调度,调度器通过轮叫调度算法将外部用户请求按顺序1:1的分配到集群中的每个real server。
特点:此种算法平等的对待每一台real server,不管服务器上实际的负载状况和连接状态。
2.2、加权轮叫调度(Weighted Round Robin)。
加权轮叫调度算法根据real server的不同处理能力来调度访问请求。
特点:当真实服务器系统性能相差较大,对每台real server设置不同的调度权值,系统性能高的real server设置高权值能够处理更多的访问流量。同时,调度器还可以自动查询real server负载情况,并动态的调整其权值。
2.3、最少连接调度(Least Connections)。
最少连接调度算法动态的将网络请求调度到已建立的连接数最少的服务器上。
特点:当真实服务器具有相近的系统性能,此种算法可以较好的负载均衡。
2.4、加权最少连接调度(Weighted Least Connections)。
加权最少连接调度是最少连接调度的超集。
特点:用相应的权值表示每个服务节点的处理能力,并且可以动态的设置相应的权值,默认权值为1。加权最小连接调度在分配新连接请求时尽可能使服务节点的已建立连接数和其权值成正比。
2.5、其他四中调度算法:基于局部性的最少连接(Locality-Based Least Connections)、带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)、目标地址散列(Destination Hashing)、源地址散列(Source Hashing)。
二、Keepalived概述:
keepalived用来监控集群系统中各个服务节点的状态,用来解决静态路由出现的单点故障,能够保证网络不间断的、稳定的运行。
VRRP虚拟路由冗余协议(Virtual Router Redundancy Protocol)是针对路由器的一种备份解决方案,由多台路由器组成一个热备组。通过共用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一台主服务器提供服务,其它服务器处于冗余状态,如果某个服务节点异常或者故障,keepalived将检测到,并将故障的服务节点从集群系统中剔除,当故障节点恢复正常后,keepalived又可自动将此服务节点重新加入到服务器集群中。
三、LVS+Keepalived安装(DR模式):
LVS拓扑图如下:
基于CentOS6.5_x64 mini
1、配置主和备LVS服务器:
1.1、安装ipvsadm:
yum ipvsadm
rpm -ql ipvsadm #查看yum安装ipvsadm的安装路径信息。
ipvsadm --version #yum安装的版本IPVS v1.2.1
modprobe -l |grep ipvs #查看kernel是否支持LVS的IPVS模块。
-
[root@songhyunmin-host2 keepalived]# modprobe -l |grep ipvs
-
kernel/net/netfilter/ipvs/ip_vs.ko
-
kernel/net/netfilter/ipvs/ip_vs_rr.ko
-
kernel/net/netfilter/ipvs/ip_vs_wrr.ko
-
kernel/net/netfilter/ipvs/ip_vs_lc.ko
-
kernel/net/netfilter/ipvs/ip_vs_wlc.ko
-
kernel/net/netfilter/ipvs/ip_vs_lblc.ko
-
kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
-
kernel/net/netfilter/ipvs/ip_vs_dh.ko
-
kernel/net/netfilter/ipvs/ip_vs_sh.ko
-
kernel/net/netfilter/ipvs/ip_vs_sed.ko
-
kernel/net/netfilter/ipvs/ip_vs_nq.ko
-
kernel/net/netfilter/ipvs/ip_vs_ftp.ko
-
kernel/net/netfilter/ipvs/ip_vs_pe_sip.ko
1.2、安装keepalived
yum keepalived
rpm -ql keepalived
#查看yum安装keepalived的安装路径信息
keepalived --version #yum安装的版本Keepalived v1.2.13
1.3、修改主keepalived配置文件
vi /etc/keepalived/keepalived.conf
-
! Configuration File for keepalived
#全局定义部分
global_defs {
notification_email {
acassen@firewall.loc #设置报警邮件地址,可设置多个。
failover@firewall.loc #每行一个,如要开启邮件报警,本机需开启sendmail服务。
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #设置邮件发送地址。
smtp_server 127.0.0.1 #设置smtp server地址。
smtp_connect_timeout 30 #设置连接smtp server超时时间。
router_id LVS_MASTER #表示运行keepalived服务器的标识。发邮件时显示在邮件主题中。
}
#vrrp实例定义部分
vrrp_instance VI_1 {
state MASTER #指定keepalived的角色,MASTER表示此主机为主服务器。
interface eth0 #指定HA监测网络的接口。
virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一标识,
#即同一个vrrp_instance下,master和backup必须一致。
priority 100 #定义优先级,数字越大,优先级越高。在一个vrrp_instance下,
#master的优先级必须大于backup优先级。
advert_int 1 #设定master与backup负载均衡之间同步检查的时间间隔,单位秒。
authentication { #设定验证类型和密码
auth_type PASS #设置验证类型,主要有PASS和AH两种
auth_pass 1111 #设置验证密码,在一个vrrp_instance下,
#master与backup必须使用相同的密码才能正常通信。
}
virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个。
192.168.1.121
}
}
#虚拟服务器定义部分
virtual_server 192.168.1.121 80 {
#设置虚拟服务器,需要指定虚拟IP和端口,IP与端口空格隔开
delay_loop 6 #设置运行情况检查时间,单位秒
lb_algo rr #设置负载调度算法,rr为轮询算法
lb_kind DR #设置LVS实现负载均衡机制,有NAT、TUN和DR三个模式
nat_mask 255.255.255.0
persistence_timeout 50 #会话保持时间,单位秒。
protocol TCP #指定转发协议类型,有TCP和UDP两种
real_server 192.168.1.123 80 {
#WEB1,指定真实IP和端口
weight 3 #配置服务节点权值,权值用数字表示,数字越大,权值越高
#权值大小可以为不同性能的服务器分配不同的负载
#可为性能高的服务器设置较高的权值
TCP_CHECK {
connect_timeout 10 #(10秒无响应超时)
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.124 80 {
#WEB1,指定真实IP和端口
weight 3 #配置服务节点权值,权值用数字表示,数字越大,权值越高
#权值大小可以为不同性能的服务器分配不同的负载
#可为性能高的服务器设置较高的权值
TCP_CHECK {
connect_timeout 10 #(10秒无响应超时)
nb_get_retry 3
delay_before_retry 3
connect_port 80
nb_get_retry 3
delay_before_retry 3
}
}
}
-
设置MASTER DR和BACKUP DR都开启路由转发:
-
echo "1" > /proc/sys/net/ipv4/ip_forward
-
修改/etc/sysctl.conf
-
vim /etc/sysctl.conf
-
net.ipv4.ip_forward = 1
-
sysctl -p #让/etc/sysctl.conf生效
-
添加实际服务器:
-
ipvsadm -C #清楚虚拟服务列表
-
ipvsadm -A -t 192.168.1.121:80 -s rr #-A添加一个虚拟服务,定义一个服务的ip、端口和协议;-t私用tcp服务;-s指定调度算法(rr、wrr、lc、wlc)。
-
ipvsadm -a -t 192.168.1.121:80 -r 192.168.1.123 -g #-a添加一个真实地址到虚拟服务列表;-r指定真实地址;-g默认网关,直接路由。
-
ipvsadm -a -t 192.168.1.121:80 -r 192.168.1.124 -g
-
service ipvsadm save #保存规则
-
service ipvsadm start #启动服务
-
启动keepalived
-
/etc/init.d/Keepalived start
1.4、
修改备keepalived配置文件
state MASTER 改为state BACKUP
priority 100 改为 priority 90
2、配置WEB服务器
vim /etc/init.d/lvsrs
-
#description : start realserver
-
VIP=192.168.1.121
-
. /etc/init.d/functions
-
case "$1" in
-
start)
-
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
-
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
-
echo "LVS RealServer Start OK"
-
;;
-
stop)
-
/sbin/ifconfig lo:0 down
-
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
-
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
-
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
-
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
-
echo "LVS RealServer Stoped OK"
-
;;
-
*)
-
echo "Usage: $0 {start|stop}"
-
exit 1
-
esac
-
/etc/init.d/lvsrs start
-
echo "net.ipv4.conf.all.arp_ignore = 2" >> /etc/sysctl.conf
-
echo "net.ipv4.conf.eth0.arp_announce = 1" >> /etc/sysctl.conf
-
echo "this is web1" > /var/www/html/index.html
-
echo "this is web2" > /var/www/html/index.html
-
iptables -F ;service iptables stop #清空iptable限制或关闭iptables
-
setenforce 0 #临时关闭selinux
3、测试
访问一直刷新此页面,如果能分别看到
"this is web1"和"this is web2" 就表明LVS已经负载均衡。
模拟宕掉主LVS,服务器照常工作,再宕掉Web1,这时只会显示Web2,这样就实现ip负载均衡,高可用集群。当主LVS恢复后,会切换成主动服务器,如果Keepalived监控模块检测web故障恢复后,恢复的主机又将此节点加入集群系统中。
常用命令:ipvsadm -ln #显示集群中服务器ip信息
ip addr #显示VIP绑定在哪个服务器上
-
[root@songhyunmin-host2 keepalived]# ip add show eth0
-
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
-
link/ether 00:0c:29:88:4d:f8 brd ff:ff:ff:ff:ff:ff
-
inet 192.168.1.120/24 brd 192.168.1.255 scope global eth0
-
inet 192.168.1.121/32 scope global eth0
-
inet6 fe80::20c:29ff:fe88:4df8/64 scope link
-
valid_lft forever preferred_lft forever
/var/log/message #日志消息
阅读(3100) | 评论(0) | 转发(0) |