LVS 负载均衡原理图
LVS无需安装
安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive
ipvsadm是通过命令行管理,而keepalive读取配置文件管理
机器规划
IP | 用途 | 部署 |
134.64.14.200 | DS1 | Ipvsadm+keepalive |
134.64.14.203 | DS2 | Ipvsadm+keepalive |
134.64.14.201 | RS1 | Realserver+http |
134.64.14.202 | RS2 | Realserver+http |
1.安装ipvsadm管理工具
yum -y install ipvsadm
查看当前LVS状态,顺便激活LVS内核模块
Ipvsadm
查看系统LVS模块
2.LVS集群搭建
2.1DS配置
DS1节点keepalive配置:
! Configuration File for keepalivedglobal_defs { router_id LVS_DS1 #机器唯一标识}vrrp_instance VI_1 { #配置虚拟路由器的实例,VI_1是自定义的实例名称 state MASTER #初始状态,MASTER|BACKUP,当state指定的instance的初始化状态,在两台服务器都启动以后,马上发生竞选,优先级高的成为MASTER,所以这里的MASTER并不是表示此台服务器一直是MASTER interface ens32 #通告选举所用端口 virtual_router_id 14 #虚拟路由的ID号(一般不可大于255)(keepalive集群唯一标识 priority 100 #权重 advert_int 1 #VRRP通告间隔,秒 authentication { auth_type PASS #认证机制 auth_pass 1111 #认证密码(随机) } virtual_ipaddress { 134.64.14.204/23 #VIP,可以通知设置掩码 }}virtual_server 134.64.14.204 80 { delay_loop 6 # service polling的delay时间,即服务轮询的时间间隔 lb_algo rr #loadbalance调度算法(rr/wrr/dh/sh/wlc/lc/lblc/lblcr) lb_kind DR #loadbalance工作模式(NAT/DR/TUN) nat_mask 255.255.255.0 persistence_timeout 0 #会话保持时间 protocol TCP #健康检查用的是TCP还是UDP real_server 134.64.220.121 80 { #后端真实节点主机的权重等设置,主要,后端有几台这里就要设置几个 weight 1 #给每台的权重,rr无效 TCP_CHECK { #TCP检查策略 connect_timeout 3 #连接超时时间 nb_get_retry 3 #重连次数 delay_before_retry 3 #重连间隔时间 connect_port 80 #健康检查端口 } } real_server 134.64.220.123 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } }}
DS2节点keepalive配置:
! Configuration File for keepalivedglobal_defs { router_id LVS_DS2}vrrp_instance VI_1 { state BACKUP interface ens32 virtual_router_id 14 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 134.64.14.204/23 }}virtual_server 134.64.14.204 80 { delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 0 protocol TCP real_server 134.64.14.201 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 134.64.14.202 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } }}
启动keepalive服务
Service keepalived start
可以看到有三个keepalive进程
父进程:内存管理,子进程管理等等
子进程:VRRP子进程
子进程:healthchecker子进程
检查lvs配置
可以看到14.204的80端口可以正常转发14.201和14.202两台的80端口,且采用rr轮询方式
2.2 RS配置
RS1节点配置:
[root@jtbs31 init.d]# vim realserver.sh
#!/bin/bash#description: Config realserverVIP=134.64.14.204case "$1" instart) /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /sbin/route add -host $VIP 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 >/dev/null 2>&1 echo "RealServer Start OK" ;;stop) /sbin/ifconfig lo:0 down /sbin/route del $VIP >/dev/null 2>&1 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 "RealServer Stoped" ;;*) echo "Usage: $0 {start|stop}" exit 1esacexit 0
启动rs服务
# chmod u+x realserver.sh# ./realserver.sh start
检查lo回环配置是否正常
RS2节点配置:
[root@jtbs32 init.d]# vim realserver.sh #!/bin/bash#description: Config realserverVIP=134.64.14.204case "$1" instart) /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /sbin/route add -host $VIP 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 >/dev/null 2>&1 echo "RealServer Start OK" ;;stop) /sbin/ifconfig lo:0 down /sbin/route del $VIP >/dev/null 2>&1 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 "RealServer Stoped" ;;*) echo "Usage: $0 {start|stop}" exit 1esacexit 0
启动rs服务
# chmod u+x realserver.sh# ./realserver.sh start
检查lo回环配置是否正常
2.3 http配置
首先在RS1和RS2节点上安装http
yum install httpd
提供一个测试页面
RS1:echo "RS1" >> /var/www/html/index.htmlRS2:echo "RS2" >> /var/www/html/index.html
启动http服务:
service httpd start
加载测试页面
2.3参数详解
DS:Director server LVS调度中心(调度层)
RS:Realserver 真实服务中心(集群层)
LVS三种工作模式:
NAT模式
调度器将请求的目标ip即vip地址修改为Real server的ip,返回的数据也经过调度器,调度器再把源地址修改为vip
TUN模式
调度器将请求来的数据包封装加密通过ip隧道转发到后端的real server上,而real server会直接把数据返回给客户端,而不再经过调度器
DR模式
调度器将请求来的数据包的目标mac地址修改为real server的mac地址,返回的时候也不经过调度器,直接返回给客户端
LVS调度算法:
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lc,lblc,lblcr
(1)rr 轮叫调度(Round Robin),这种算法是最简单的,不管RS的后端配置和处理能力,均衡的分发下去
(2)wrr 加权轮叫(Weight Round Robin),比上面的算法多了一个权重的概念,可以给RS设置权重,权重越高,那么分发的请求数越多,权重取值范围0-100
(3)LC最少链接(least connection),这个算法会根据后端的RS的连接数来决定把请求发给谁,比如RS1连接数比RS2连接数少,那么请求优先发给RS1
(4)WLC 加权最少链接(Weighted Least Connecttion)比最少链接算法多了一个权重
(5)Dh 目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得需要的RS
(6)SH 源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS
(7)lblc 最小连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS
(8)Lblcr 带复制的基于本地的最少连接:是LBLC算法的改进
arp_announce : INTEGER
对网络接口上本地IP地址发出的ARP报文作出相应级别的限制。
0:本机所有IP地址都向任何一个接口通告ARP报文。
1:尽量仅向该网卡回应与该网段匹配的ARP报文。
2:只向该网卡回应与该网段匹配的ARP报文。
arp_ignore : INTEGER
定义对目标地址为本地IP的ARP询问不同的应答模式。
0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。
1:只响应目的IP地址为接收网卡上的本地地址的arp请求。
2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。
3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。
4~7:预留。
8:不回应所有的arp请求。
3.测试验证
3.1VIP高可用测试
可以看到VIP在DS1上面,直接重启DS1主机,观察VIP是否正常漂到DS2上面
可以看到正常切换过来了,验证RS服务是否能正常访问
说明VIP已经具备高可用
3.2LVS负载均衡验证
刷新页面
可以看到从RS2切到RS1中,会话均衡分发
可以通过ipvsadm -lnc查看会话链接情况
---------------------------------------------完结----------------------------------------------