lvs实现均衡负载(DR模式)及lvs的健康检测keepalived

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。

2.lvs
4层 load balance
—基于策划书曾信息进行调度
—调度算法:WRR/WLC等
—工作模式:NAT/DR/TUNNEL
—传输协议:TCP/UDP

主机名 ip
server1 172.25.10.1 主调度器
server2 172.25.10.2
server3 172.25.10.3
server4 172.25.104 backup调度器

一.lvs 调度器的配置

在这里插入图片描述
1、客户端发送请求至调度器(VIP),请求报文源地址是CIP,目标地址为VIP;
2、LVS调度器接收到请求,报文在PREROUTING链检查,确定目的IP是本机,于是将报文发送至INPUT链,ipvs内核模块确定请求的服务是配置的LVS集群服务,然后根据用户设定的均衡策略选择某台后端RS,并将目标MAC地址修改RIP的MAC地址。因为调度器和后端服务器RS在同个网段,因此直接二层互通,将请求发给选择的RS处理;
3、因为报文目的mac是本机,且RS上有配置VIP,因此RS能接收该报文。后端服务处理完请求后,将响应直接发往客户端,此时源IP地址为VIP,目标IP为CIP。

server1 相当于一个调度器,负载均衡

client---->DR (客户端访问调度器)在同一个vlan里面------>RS(调度器调度后端的rs) ------>client

DR端

让客户端的调度落在调度器上

准确地定位到调度器上
2,3上的arp已经被屏蔽
DR :调度器和real server  所有节点上都需要vip, 
real server 上禁用arp ,

[root@server1 ~]# yum install -y ipvsadm ###让用户编写策略---->放在内核;里
需要一个vip 虚拟的ip

[root@server1 ~]# ip addr add 172.25.10.100/24 dev eth0
[root@server1 ~]# ip addr show eth0

inet 172.25.10.1/24 brd 172.25.10.255 scope global eth0
   valid_lft forever preferred_lft forever
inet 172.25.10.100/24 scope global secondary eth0
   valid_lft forever preferred_lft forever

[root@server1 ~]# ipvsadm -A -t 172.25.10.100:80 -s rr 添加 -t tcp 调度
[root@server1 ~]#ipvsadm -a -t 172.25.10.100:80 -r 172.25.10.2:80 -g往tcp服务里面添加真实的服务器地址
[root@server1 ~]# ipvsadm -a -t 172.25.10.100:80 -r 172.25.10.3:80 -g
[root@server1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.10.100:80 rr
-> 172.25.10.2:80 Route 1 0 0
-> 172.25.10.3:80 Route 1 0 0

在client端

server2中

yum install -y httpd
systemctl enable --now httpd
echo server2>/var/www/html/index.html

[root@server2 ~]# ip addr add 172.25.10.100/24 dev eth0
加vip
添加策略屏蔽arp
在这里插入图片描述

server3中

yum install -y httpd
systemctl enable --now httpd
echo server3>/var/www/html/index.html

[root@server3 ~]# ip addr add 172.25.10.100/24 dev eth0
加vip

在这里插入图片描述

测试

调度直接落在调度器上
在这里插入图片描述

[root@server1 ~]# ip addr show eth0
link/ether 52:54:00:f7:b8:3dbrd ff:ff:ff:ff:ff:ff

lvs工作原理?(待补充)

安全控制---->优先级

访问控制
linux的安全体系控制
iptables ----->tcpwarp---->xinted(超级守护进程)---->service------>filesystem(rwx,SELINUX)

在火墙策略中禁止vip访问
在这里插入图片描述
在这里插入图片描述

LVS

– 内核模块:ip_vs
– 实现了负载均衡

1.2 LVS问题

1.– 某台RealServer down了,怎么办? — 健康检测

2.lvs+shell 健康检测

当检测到realserver挂掉时,在列表中删除
正常,添加

[root@server1 ~]# cat lvs.sh 
#!/bin/bash
VIP=172.25.10.100
PORT=80
RS=(172.25.10.2 172.25.10.3)
LOG=checklvs.log

addrs() {
    
    
	ipvsadm -a -t $VIP:$PORT -r $1:$PORT -g
	echo "add $1 to ipvs" >> $LOG
}

delrs() {
    
    
	ipvsadm -d -t $VIP:$PORT -r $1
        echo "del $1 to ipvs" >> $LOG
}

checkrs() {
    
    
	for i in ${
    
    RS[*]}
	do
		num=`curl  -I -s -o /dev/null -w %{
    
    http_code} http://$i`
		if [ $num -eq 200 -a $(ipvsadm -ln|grep $i|wc -l) -eq 0 ];then
			addrs $i
		elif [ $num -ne 200 -a $(ipvsadm -ln|grep $i|wc -l) -ne 0 ];then
			delrs $i
		fi
	done
}
while true
do
checkrs
sleep 5
done

– LVS本身down了,怎么办?—LVS冗余

二.Keepalived – LVS管理软件

vip作为集群资源,将会由Keepalived接管,清除所有的ipvsadm策略
做一个备用的调度器:主调度器:1 备用 4
删掉之前加的100ip

1.– 主备冗余:采用VRRP协议癿HeartBeat;

lvs本身down掉

在server1

ipvsadm -C
yum install keepalived
相当于将lvs的策略写成文本的方式执行

[root@server1 keepalived]# vim /etc/keepalived/keepalived.conf 
[root@server1 keepalived]# cat keepalived.conf 
! Configuration File for keepalived

global_defs {
  notification_email {
   root@localhost
  }
  notification_email_from keepalived@localhost
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id LVS_DEVEL
  vrrp_skip_check_adv_addr
  #vrrp_strict
  vrrp_garp_interval 0
  vrrp_gna_interval 0
}

vrrp_instance VI_1 {
   state MASTER   ----->主调度器
   interface eth0
   virtual_router_id 51
   priority 100
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 1111
   }
   virtual_ipaddrJan 19 14:45:59 server4 Keepalived_vrrp[14334]: Using LinkWatch kernel netlink reflector...
Jan 19 14:45:59 server4 Keepalived_vrrp[14334ess {
       172.25.10.100
   }
}

virtual_server 172.25.10.100 80 {
   delay_loop 6
   lb_algo rr  
   lb_kind DR
   #persistence_timeout 50
   protocol TCP

   real_server 172.25.10.2 80 {
       weight 1
   TCP_CHECK { 
           connect_timeout 3
           nb_get_retry 3
           delay_before_retry 3
       }
   }
   real_server 172.25.10.3 80 {
       weight 1
       TCP_CHECK {
           connect_timeout 3
           nb_get_retry 3
           delay_before_retry 3
       }
   }
}

[root@server1 keepalived]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:f7:b8:3d brd ff:ff:ff:ff:ff:ff
inet 172.25.10.1/24 brd 172.25.10.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fef7:b83d/64 scope link
valid_lft forever preferred_lft forever

在server4

操作同上

在这里插入图片描述
当主调度器挂掉的时候-
[root@server1 keepalived]# systemctl stop keepalived.service backup调度器会获取vip,
在这里插入图片描述
当主调度器出现故障时,backup调度器转化为主调度器
在这里插入图片描述
当主调度器正常时,其又变成backup状态
在这里插入图片描述

2.– 健康检测:支持4/7监测;

当关闭client上的httpd服务时
信息会发送到调度器上
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ninimino/article/details/112835861