LVS+Keeplived原理与实现

LVS介绍

常用的软负载均衡由如下几种

  1. nginx+keeplived
  2. LVS+keeplived
  3. Haproxy+keeplive
  4. DNS负载均衡

LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。
LVS的转发主要通过修改IP地址(NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR模式)来实现。

主要有NAT模式和DR模式。

  • NAT模式下负载均衡服务器通过修改目的IP来使请求转发到下游的web服务器。响应从web服务器到负载均衡服务器然后再按原路返回。
  • DR模式下负载均衡服务器与下游WEB服务器共用一个虚拟IP,负载均衡服务器将请求中的mac地址修改为下游的web服务器所在的mac地址,而不修改目标IP地址。响应从web服务器直接返回给请求客户端,不经过负载均衡服务器。
    下面两个如表明了请求和响应的路径。
    LVS+Keeplived原理与实现_第1张图片

LVS+Keeplived原理与实现_第2张图片

手动实现LVS负载均衡

  1. 负载均衡服务器配置

添加虚拟服务指定对外IP(VIP)添加虚拟服务指定对外IP(VIP)
ipvsadm -A -t 192.168.40.17:80 -s rr

针对LVS服务器注册真实WEB服务器IP
ipvsadm -a -t 192.168.40.17:80 -r 192.168.41.31:80

ipvsadm -a -t 192.168.40.17:80 -r 192.168.41.33:80

查看VIP和RS是否已经配置成功。
ipvsadm -L -n

  1. web服务器配置

1)添加环路端口lo的对外IP&路由

ifconfig lo 192.168.40.17 netmask 255.255.255.255

route add -host 192.168.40.17 dev lo

2)需要ARP抑制

echo “1”>***/lo/arp_ignore

echo “2”>***/lo/arp_announce

echo “1”>***/all/arp_announce

echo “2”>***/all/arp_announce
如果不进行ARP抑制,客户端请求不知道去负载均衡服务器还是web服务器。ARP抑制后web服务器只能接受从负载均衡服务器中转发的请求。

Keeplived介绍

keepalived:集群管理中保证集群高可用的一个服务软件,用来防止单点故障。keepalived主要是上线了VRRP协议。

VRRP(Virtual Router Redundancy Protocol 虚拟路由冗余协议):实现路由器高可用协议,解决路由器单点问题。将N台提供相同功能的路由器组成一个路由器组,这个组里面通过竞选产生一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip)。master会发组播给backup,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

Keepalived高可用集群之间是通过 VRRP进行通信的, VRRP是通过过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。

配置KVS+Keeplived

  • 负载均衡服务器配置
  1. 安装keeplived和LVS管理软件ipvsadm

yum -y install keepalived ipvsadm

  1. 配置主备keepalived.conf

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email { 			[email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
  state MASTER
  interface ens33
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
  	auth_type PASS
  	auth_pass 1111
  }
  virtual_ipaddress {
  	192.168.112.180
  }
}

virtual_server 192.168.112.180 80 {
  delay_loop 6
  lb_algo rr
  lb_kind DR
  persistence_timeout 50
  protocol TCP
  
  real_server 192.168.112.135 80 {
      weight 1
      TCP_CHECK {  
  	    connect_timeout 10 
  	    nb_get_retry 3  
  	    delay_before_retry 3  
  	    connect_port 80  
      }
  }
  
  real_server 192.168.112.136 80 {
      weight 1
      TCP_CHECK { 
  	    connect_timeout 10
  	    nb_get_retry 3
  	    delay_before_retry 3
  	    connect_port 80
      } 		}
}
  1. 关闭主备防火墙

service firewalld stop

查看防火墙状态

service firewalld status

  1. 启动主备keepalived

systemctl start keepalived

关闭命令:

systemctl stop keepalived

  1. 查看主备VIP绑定情况

ip a l ens33

其中被负载均衡服务器只需要修改

state MASTER --> state backup
priority 100 --> priority 50

  • WEB服务器配置
  1. 安装httpd

yum -y install httpd

编写静态页面:

web服务器1配置
echo WebServer1 > /var/www/html/index.html
web服务器2配置
echo WebServer2 > /var/www/html/index.html

  1. 编写加入LVS集群脚本

vim lvs.sh

#!/bin/bash vip=192.168.112.180 mask=255.255.255.255 dev=ens33:1 case $1 in start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig $dev $vip netmask $mask broadcast $vip up
route add -host $vip dev $dev ;; stop)
ifconfig $dev down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce ;;
*)
echo “Usage: $(basename $0) start|stop”
exit 1 ;; esac

  1. 启动脚本,加入LVS集群

sh lvs.sh start

  1. ipvsadm查看LVS配置信息

ipvsadm -Ln

  1. 开启服务

service httpd start

service httpd stop

LVS+Keeplived测试

1.网址测试+curl测试,浏览器上不断刷新请求地址。

结果1:由于浏览器中设置HTTP中keeplive属性,可以通过wireshark分析tcpdump抓的包看到。需要每隔6秒钟左右刷新可以看到请求被分配到两台web服务器上。

2.abs压力测试,看连接数

ab -n 100000 -c 200 http://192.168.112.180/index.html
ipvsadm -L -n --rate

结果2:请求连接平均分配在两台web服务器上。

3.主备测试:将主调度器停止,看VIP是否切换,备调度器是否能正常工作。

结果3:VIP被切换到了被服务器上。

4.负载测试,停止一台服务器,另一台是否能正常工作

结果4:另一台服务器也可以正常工作。

你可能感兴趣的:(网络编程,云计算)