LVS四种模式简介及DR模式的配置

时间:2024-03-20 17:06:12

一、LVS简介

一组服务器通过高速的局域网或者地理分布的广域网相互连接,在它们的前端有一个负载调度器(Load Balancer)。负载调度器能无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务就像访 问一台高性能、高可用的服务器一样。客户程序不受服务器集群的影响不需作任何修改。系统的伸缩性通过在服务机群中透明地加入和删除一个节点来达到,通过检 测节点或服务进程故障和正确地重置系统达到高可用性。由于我们的负载调度技术是在Linux内核中实现的,我们称之为Linux虚拟服务器(Linux Virtual Server)。

 

二、LVS的分类

LVS-DR: 直接路由

LVS四种模式简介及DR模式的配置

LVS-DR模式:

1.客户端将访问vip报文发送给LVS服务器;
2.LVS服务器将请求报文的mac地址改为后端真实服务器的mac地址;
3.后端真实服务器得到访问报文后进行ip查看,再确认自己有vip之后进行请求处理;
4.后端真实服务器在处理完数据请求后,直接响应客户端。

要求:

1.LVS服务器和后端真实的服务器要处在同一vlan中。
2.LVS和后端服务器上都要有vip,并且后端真实服务器上的vip不能对外进行广播。


优点:

1.LVS服务器只是修改了mac地址,所以非常快速,并且LVS不会成为瓶颈。

缺点:

1.要求较高,LVS服务器必须和后端真实服务器处于同一vlan中;
2.后端真实服务器直接响应客户端,对于后端真实服务器来说,并不安全。

LVS-TUN:隧道

LVS四种模式简介及DR模式的配置

LVS-TUNNEL模式:

1.客户端将访问vip报文发送给LVS服务器;
2.LVS服务器将请求报文重新封装,发送给后端真实服务器;
3.后端真实服务器将请求报文解封,在确认自身有vip之后进行请求处理;
4.后端真实服务器在处理完数据请求后,直接响应客户端。

要求:

1.lvs和后端真实服务器上都要有vip。
2.不会成为瓶颈。
3.请求的报文不能太大。

优点:

1.快速
2.不安全,不能抵抗DOS攻击
 

 

LVS-NAT:地址转换

LVS四种模式简介及DR模式的配置

LVS-NAT模式:

1.客户端将访问vip报文发送给LVS服务器;
2.LVS服务器将请求报文的目的地址修改为后端真实服务器(DNAT),发送给后端真实服务器;
3.后端服务器在处理完之后要将响应的报文返回给客户端,但是却不在同一网段;
4.LVS根据自己的追踪技术将后端真实服务响应客户端的报文原地址改为自己的ip地址(SNAT),发送给客户端。


要求:
1.LVS服务器需要有不同的网段。
2.真实服务器的网关必须设置为LVS的ip地址。

优点:

1.安全
2.可以实现不同网段的数据请求。

缺点:

因为在 VS/NAT 中请求和响应报文都需要通过负载调度器,伸缩能力有限, 当服务器结点数目升到 20 时,调度器本身
有可能成为系统的新瓶颈。

 

LVS-FULLNAT模式:

1.客户端将访问vip报文发送给LVS服务器;
2.LVS服务器将请求报文的目的地址修改为后端真实服务器(DNAT),源地址改为自己的ip地址(SNAT),发送给后端真实服务器;
3.后端服务器在处理完之后要将响应的报文返回给lvs;
4.LVS将返回的数据包源地址改为自己(SNAT),目的地址改为客户端(DNAT),发送给客户端。

 

三.LVS-DR模式下的负载均衡

实验环境:

物理机:172.25.254.68

vip:172.25.254.100

server2(VS):172.25.254.2 

server5(VS):172.25.254.5

server3(RS):172.25.254.3

server4(RS):172.25.254.4

server2:

1.配置yum库,安装【Load Balancer】组包:

vim /etc/yum.repos.d/rhel-source.repo

LVS四种模式简介及DR模式的配置

yum cLean all
yum repolist

LVS四种模式简介及DR模式的配置

2、配置虚拟VIP

yum install ipvsadm -y
ip addr add 172.25.254.100/24 dev eth0  #添加虚拟ip为172.25.2.100
ip addr

LVS四种模式简介及DR模式的配置
ipvsadm -A -t 172.25.254.100:80 -s rr     #使用的调度算法,算法为rr(Round Robin)
ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.3:80 -g   #给vip添加rip,-g指定LVS 的工作模式为直接路由模式(默认模式)
ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.4:80 -g
ipvsadm -ln

LVS四种模式简介及DR模式的配置

-m  #--masquerading 指定LVS 的工作模式为NAT 模式

-t #--tcp-service service-address 说明虚拟服务器提供的是tcp 的服务

 

server3:

ip:172.25.254.3
/etc/init.d/httpd start  #开启http服务

LVS四种模式简介及DR模式的配置
ip addr add 172.25.254.100/32 dev eth0
yum install arptables_jf -y

##安装arp防火墙 arp防火墙用来屏蔽数据包,拦截ip冲突,因为虚拟机与real server的地址一致,所以进入real server时需要把虚拟ip DROP掉,即拦截real server的虚拟ip

LVS四种模式简介及DR模式的配置
arptables -L
arptables -A IN -d 172.25.254.100 -j DROP

##拒绝客户端访问realserver的虚拟ip,只要输入进来直接DROP掉
arptables -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.3

##由于tcp三次握手,出去时仍要以vip地址形式才会握手,而真正将数据传输给客户端的就是realserver,mangle参数就是这个功能
/etc/init.d/arptables_jf save
   #保存策略

LVS四种模式简介及DR模式的配置
server4:

ip:172.25.254.4
/etc/init.d/httpd start
ip addr add 172.25.254.100/32 dev eth0
yum install arptables_jf -y
arptables -L
arptables -A IN -d 172.25.254.100 -j DROP
arptables -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.4

/etc/init.d/arptables_jf save   #保存arp火墙配置信息

真机里测试:

curl 172.25.254.100

LVS四种模式简介及DR模式的配置

arp -an |grep 100    #查看vip的vmac
arp -d 172.25.9.100 #清除vip的vmac

LVS四种模式简介及DR模式的配置

假设client的ip为cip,mac地址为m1,调度器vs的ip为vip,mac地址为m2,后端服务器的ip为rip,mac地 址为m3,由于DR模式工作在数据链路层,没有经过路由器,所以vs和rs必须在同一个网段,当client访问vip时,在DR模式下,vs通过它本身 的一些算法m2改为m3,这样就可以实现直接将数据包丢给rs(这里rs上必须有vip,因为客户端访问的是vip),rs通过解封,得到了vip,通过 与自己vip匹配判断数据包确实是给自己的,rs在通过封装,直接将数据发给client,数据包不用原路返回)。由于vs和rs上都有vip,会有冲 突,因此这里我们应用arptables协议,在rs上添加arp策略,控制数据传输

 

四.健康检查

ldirectord介绍

我们需要使用ldirectord程序,这个程序在启动时自动建立IPVS表,然后监视集群节点的健康情况,在发现失效节点时将其自动从IPVS表中移除。

server2:

ip:172.25.2.2
cd /mnt
需要修改/etc/yum.repos.d/rhel-source.repo
vim /etc/yum.repos.d/rhel-source.repo
加入
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.2.250/rhel6.5/HighAvailability
gpgcheck=0

LVS四种模式简介及DR模式的配置

yum repolist

LVS四种模式简介及DR模式的配置

yum install ldirectord-3.9.5-3.1.x86_64.rpm -y
rpm -ql ldirectord  #查看配置文件

LVS四种模式简介及DR模式的配置

cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
cd /etc/ha.d/
ls

LVS四种模式简介及DR模式的配置

vim ldirectord.cf
 24 # Sample for an http virtual service
 25 virtual=172.25.2.100:80    #vip虚拟ip
 26         real=172.25.2.3:80 gate  #rs  ip
 27         real=172.25.2.4:80 gate  #rs ip
 29         fallback=127.0.0.1:80 gate  #如果两个rs都坏了,启用调度器
 30         service=http
 31         scheduler=rr
 32         #persistent=600
 33         #netmask=255.255.255.255
 34         protocol=tcp
 35         checktype=negotiate
 36         checkport=80
 37         request="index.html"
 38         #receive="Test Page"    #这两行注释掉
 39         #virtualhost=www.x.y.z  #这两行注释掉

LVS四种模式简介及DR模式的配置

vim /etc/httpd/conf/httpd.conf
#Listen 12.34.56.78:80
Listen 80 #修改端口为80

/etc/init.d/httpd restart
cd /var/www/html/

ls
rm -fr *
vim index.html

<h1>网站维护中......</h1>

LVS四种模式简介及DR模式的配置

/etc/init.d/ldirectord start  #开启这个
ipvsadm -ln
#自动生成ipvsadm列表

LVS四种模式简介及DR模式的配置

 

/etc/init.d/httpd stop

关闭server3的httpd后,真机测试:

LVS四种模式简介及DR模式的配置

关闭server3和server4的httpd后,再次测试:

LVS四种模式简介及DR模式的配置

 

五.Keepalived高可用服务

Keepalived主要通过VRRP协议(虚拟路由器冗余协议)实现高可用。VRRP出现的目的

1.主备

编译三部曲
./configure -> make -> make install

server2:

/etc/init.d/ldirectord stop  #关闭ldirectord

chkconfig ldirectord off

LVS四种模式简介及DR模式的配置

cd /mnt
tar zxf keepalived-2.0.6.tar.gz

LVS四种模式简介及DR模式的配置
cd keepalived-2.0.6

yum install -y openssl-devel   mailx ##安装依赖包和邮件
./configure --with-init=SYSV --prefix=/usr/local/keepalived
yum install gcc -y  #安装gcc否则编译不了

LVS四种模式简介及DR模式的配置
make  #编译keepalived源码
make install  #安装

LVS四种模式简介及DR模式的配置

创建软连接

ln -s /usr/local/keepalived/sbin/keepalived /sbin/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived /etc/

LVS四种模式简介及DR模式的配置

赋予脚本可执行权限

chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived

LVS四种模式简介及DR模式的配置

cd /usr/local/
scp -r keepalived/ server5:/usr/local/   #给server5传过去

LVS四种模式简介及DR模式的配置

server5:

yum install openssh-clients mailx -y  #安装scp
 cd /usr/local/keepalived/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

LVS四种模式简介及DR模式的配置

server2里面:

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {            #全局配置标识
   notification_email {
       [email protected]       #接收警报的 mail 地址,可以添加多个,每行一个
   }
   notification_email_from [email protected]       #设置邮件的发送地址
   smtp_server 127.0.0.1              #设置 smtp server 地址
   smtp_connect_timeout 30        
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict           #注释掉,不然iptables显示DROP ALL
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 2
    priority 100
    advert_int 1         #检查间隔,默认1s

    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    172.25.254.100
    }
}

virtual_server 172.25.254.2 80 {
    delay_loop 6      #service polling 的delay时间
    lb_algo rr            #lvs 调度算法
    lb_kind DR         #lvs  是用 DR 模式
    #persistence_timeout 50   #注释掉,不然会有时延
    protocol TCP

    real_server 172.25.254.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.254.4 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

#剩下的全部删掉

ip addr del 172.25.254.100/24 dev eth0
/etc/init.d/keepalived start
scp keepalived.conf server5:/etc/keepalived/   #把配置文件传给server5

LVS四种模式简介及DR模式的配置

 

server5:

cd /etc/yum.repos.d/
vim rhel-source.repo

[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.254.68/rhel6.5/LoadBalancer
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.254.68/rhel6.5/HighAvailability
gpgcheck=0

LVS四种模式简介及DR模式的配置

yum install -y ipvsadm
/etc/init.d/keepalived start

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
       [email protected]
   }
   notification_email_from [email protected]
   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 BACKUP     
#状态BACKUP
    interface eth0
    virtual_router_id 2   
#主、备机的 virtual_router_id 必须相同,取值 1-254
    priority 50     #比MASTER小,主机的优先级,主机优先级一定要大于备机
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    172.25.254.100
    }
}

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

    real_server 172.25.254.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.254.4 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

测试:

停止 master 上的 keepalived 服务,看 BACKUP是否接管。

/etc/init.d/keepalived stop

LVS四种模式简介及DR模式的配置

for i in {1..10};do curl 172.25.254.100;done

LVS四种模式简介及DR模式的配置

发现原本在MASTER上的VIP已经转到了BACKUP上

LVS四种模式简介及DR模式的配置

 

关闭RS 上的 http 服务,Keepalived 监控模块是否能及时发现

关闭server3上的http服务

/etc/init.d/httpd stop

LVS四种模式简介及DR模式的配置

server2和server5上的都接受到了邮件

mail

LVS四种模式简介及DR模式的配置

 

2.双组

server3:

yum install vsftpd -y
/etc/init.d/vsftpd start
cd /var/ftp/
touch server3
ip addr add 172.25.254.200/32 dev eth0
vim /etc/sysconfig/arptables

[0:0] -A IN -d 172.25.2.100 -j DROP
[0:0] -A IN -d 172.25.2.200 -j DROP
[0:0] -A OUT -s 172.25.2.100 -j mangle --mangle-ip-s 172.25.2.3
[0:0] -A OUT -s 172.25.2.200 -j mangle --mangle-ip-s 172.25.2.3

LVS四种模式简介及DR模式的配置

/etc/init.d/arptables_jf restart
arptables -L

LVS四种模式简介及DR模式的配置

server4:

yum install vsftpd -y
/etc/init.d/vsftpd start
cd /var/ftp/
touch server4
ip addr add 172.25.254.200/32 dev eth0
vim /etc/sysconfig/arptables

[0:0] -A IN -d 172.25.254.100 -j DROP
[0:0] -A IN -d 172.25.254.200 -j DROP
[0:0] -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.4
[0:0] -A OUT -s 172.25.254.200 -j mangle --mangle-ip-s 172.25.254.4

LVS四种模式简介及DR模式的配置

/etc/init.d/arptables_jf restart
arptables -L

LVS四种模式简介及DR模式的配置

server2: 

ftp端口21 server2作为lftp的备份,http的主
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
       [email protected]
   }
   notification_email_from [email protected]
   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 2
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100
        172.25.254.200
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 102
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100
        172.25.254.200
    }
}

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

    real_server 172.25.254.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
     real_server 172.25.254.4 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}
virtual_server 172.25.254.200 21 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 172.25.254.3 21 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
     real_server 172.25.254.4 21 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

/etc/init.d/keepalived restart

ipvsadm -ln

LVS四种模式简介及DR模式的配置

server5:

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
       [email protected]
   }
   notification_email_from [email protected]
   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_2 {
    state BACKUP
    interface eth0
    virtual_router_id 2
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100
    172.25.254.200
    }
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 102
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100
        172.25.254.200
    }
}

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

    real_server 172.25.254.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
     real_server 172.25.254.4 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}
virtual_server 172.25.254.200 21 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 172.25.254.3 21 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
     real_server 172.25.254.4 21 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

/etc/init.d/keepalived restart

ipvsadm -ln

LVS四种模式简介及DR模式的配置
主机测试:
curl 172.25.254.100

[[email protected] ~]# lftp 172.25.254.200
[[email protected] ~]# lftp 172.25.254.200

LVS四种模式简介及DR模式的配置

LVS四种模式简介及DR模式的配置

[[email protected] ~]# curl 172.25.254.100
<h1>www.westos.org-server3</h1>
[[email protected] ~]# curl 172.25.254.100
<h1>bbs.westos.org-server4</h1>

LVS四种模式简介及DR模式的配置