LVS+Keepalived项目

文章目录

    • 前言
      • 1、LVS简介
        • (1)、特点
        • (2)、技术实现
        • (3)、优缺点
        • (4)、主要结构:
    • 实验一、ipvsadm虚拟服务器集群的搭建
      • 1、实验准备
      • 2、实验过程
        • (1)、配置一个虚拟服务器集群
        • (2)、添加VIP设置
        • (3)、真机测试访问
    • 实验二、ipvsadm结合Keepalived
      • 1、实验准备
      • 2、实验过程
        • (1)、ipvsadm+Keepalived实现健康检查
        • (2)、使用热备机实现高可用

前言

1、LVS简介

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

使用集群技术和Linux操作系统实现一个高性能、高可用的服务器。有很好的可伸缩性(Scalability),很好的可靠性(Reliability),很好的可管理性(Manageability)。

(1)、特点

可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。而IP负载均衡技术是在负载调度器的实现技术中效率最高的。

VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。

  • VS/NAT技术:通过网络地址转换(Network Address
    Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器

在分析VS/NAT的缺点和网络服务的非对称性的基础上提出了:

  • VS/TUN技术:通过IP隧道实现虚拟服务器的方法
  • VS/DR技术:通过直接路由实现虚拟服务器的方法
(2)、技术实现
  • 技术简介

LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

  • 集群采用三层结构

一般来说,LVS集群采用三层结构,其主要组成部分为:

  • 负载调度器(load balancer)它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。

  • 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。

  • 共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

  • 调度器

调度器是服务器集群系统的唯一入口点(Single Entry Point),它可以采用IP负载均衡技术、基于内容请求分发技术或者两者相结合。

(3)、优缺点
  • 优点

1、开源,免费
2、在网上能找到一些相关技术资源
3、具有软件负载均衡的一些优点

  • 缺点

1、最核心的就是没有可靠的支持服务,没有人对其结果负责;
2、功能比较简单,支持复杂应用的负载均衡能力较差,如算法较少等;
3、开启隧道方式需重编译内核;
4、配置复杂;
5、主要应用于LINUX,没有专门用于WINDOWS的版本,不过可以通过配置,使windows成为LVS集群中的real server(win2003、win2008中)。

LVS+Keepalived项目_第1张图片

(4)、主要结构:

1、工作在内核空间的IPVS模块,是LVS集群系统的核心软件;LVS的能力实际上都是由IVPS模块实现
2、工作在用户空间的ipvsadm管理工具;其作用是向用户提供一个命令接口,用于将配置的虚拟服务、真实服务等传给IPVS模块

IPVS主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务,这个虚拟IP一般称为LVS的VIP,即Virtual IP;访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求

实验一、ipvsadm虚拟服务器集群的搭建

1、实验准备

三台虚拟机

vm1:负载调度器IP 172.25.76.1
vm2:后端服务器IP 172.25.76.2 需要安装httpd服务
vm3:后端服务器IP 172.25.76.3 需要安装httpd服务
(在真机浏览器测试查看服务是否成功开启;编写发布文件内容,方便后续测试使用)

在vm1上:
安装ipvsadm工具

yum install -y ipvsadm
systemctl status ipvsadm

LVS+Keepalived项目_第2张图片
重启后服务正常
LVS+Keepalived项目_第3张图片
将http服务永久加入到火墙中去,另外重启火墙服务

firewall-cmd --permanent --add-service=http
firewall-cmd --reload

在这里插入图片描述
在vm1和vm2上安装HTTPD服务,测试在真机浏览器是否能够看到发布文件
LVS+Keepalived项目_第4张图片

2、实验过程

(1)、配置一个虚拟服务器集群

ipvsadm命令详解

参数 含义
-A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。
-D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
-C --clear 清除内核虚拟服务器表中的所有记录。
-R --restore 恢复虚拟服务器规则
-S --save 保存虚拟服务器规则,输出为-R 选项可读的格式
-a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器
-n --numeric 输出IP 地址和端口的数字形式
-L-l --list 显示内核虚拟服务器表
-s --scheduler scheduler 使用的调度算法,有这样几个选项rr/wrr/lc/wlc/lblc/lblcr/dh/sh/sed/nq
-e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
-d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
-r --real-server server-address 真实的服务器[Real-Server:port]
-t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务
-u --udp-service service-address 说明虚拟服务器提供的是udp 的服务
-g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)
ipvsadm -A -t 172.25.76.10:80 -s rr
#添加一台新的虚拟服务器:ip为172.25.76.10,端口为80,提供TCP服务,使用负载均衡的调度算法
ipvsadm -a -t 172.25.76.10:80 -r 172.25.76.2:80 -g
#在虚拟服务器172.25.76.10:80中添加一台新的真实服务器:IP为172.25.76.2,端口80,提供TCP服务,指定LVS的工作模式为直接路由模式(LVS的默认模型)
ipvsadm -a -t 172.25.76.10:80 -r 172.25.76.3:80 -g
#在虚拟服务器172.25.76.10:80中添加一台新的真实服务器:IP为172.25.76.3,端口80,提供TCP服务,指定LVS的工作模式为直接路由模式(LVS的默认模型)
ipvsadm -ln
#以IP 地址和端口的数字形式查看虚拟服务器表

LVS+Keepalived项目_第5张图片

ipvsadm-save -n > /etc/sysconfig/ipvsadm
#将策略添加到配置文件中
cat /etc/sysconfig/ipvsadm
#查看内容

LVS+Keepalived项目_第6张图片
lsmod == list modules即显示所有载入系统的模块
LVS+Keepalived项目_第7张图片

(2)、添加VIP设置

vm1这个负载均衡器中添加

ip addr add 172.25.76.10/24 dev eth0
#给eth0设备添加ip为172.25.76.10/24的VIP

LVS+Keepalived项目_第8张图片
在vm2和vm3上同样加上该VIP
LVS+Keepalived项目_第9张图片
LVS+Keepalived项目_第10张图片

(3)、真机测试访问

在真机测试访问VIP172.25.76.100,发现是负载均衡的。说明之前的配置全部生效。
LVS+Keepalived项目_第11张图片
但在这种情况下,客户端访问VIP时可能会得到后端真实主机的MAC地址,会很不安全

ip addr show eth0
arp -an | grep 172.25.76.10
arp -d 172.25.76.10
ping -c1 172.25.76.10

LVS+Keepalived项目_第12张图片
LVS+Keepalived项目_第13张图片
LVS+Keepalived项目_第14张图片
发现在删除之前的访问记录后再次访问会得到后端真实主机vm2的MAC地址
LVS+Keepalived项目_第15张图片
解决办法:
修改arp策略,使得客户端在访问VIP时得到的一直是虚拟主机的MAC地址即可

yum isntall -y arptables
#安装arp策略管理工具

arptables:用于过滤arp包;基本思路和iptables一样,不过,arptables处理arp协议有关的包,这些包在iptables中并不会处理;arptables可用于灵活的arp管理,如果善于运用的话,不失为一个优秀的arp防火墙,既能防止别的机器对自己进行arp欺骗,又能防止本机病毒或错误程序向其他机器发起arp攻击

arptables -A INPUT -d 172.25.76.10 -j DROP
#进来的ARP,如果目的地IP是VIP的,丢弃
arptables -A OUTPUT -s 172.25.76.10 -j mangle --mangle-ip-s 172.25.76.2
#发出去的ARP包,如果源IP是VIP的,更改成realserver的IP

LVS+Keepalived项目_第16张图片
保存并查看配置文件内容
LVS+Keepalived项目_第17张图片
修改策略后继续测试
LVS+Keepalived项目_第18张图片
发现删除现有的访问记录后再次访问到的是虚拟主机的MAC地址,策略修改生效
LVS+Keepalived项目_第19张图片

实验二、ipvsadm结合Keepalived

1、实验准备

四台虚拟机:

vm1主机为主负载调度器,配置keepalived服务,IP=172.25.76.1

vm2主机为后端服务器,配置httpd服务,IP=172.25.76.2

vm3主机为后端服务器,配置httpd服务,IP=172.25.76.3

vm4主机为备份负载调度器,配置keepalived服务,IP=172.25.176.4

2、实验过程

(1)、ipvsadm+Keepalived实现健康检查

手动搭建LVS模式中,某台后端服务器宕机后,客户端会出现访问失败的情况,例如:

将一个后端服务器vm3宕机
LVS+Keepalived项目_第20张图片
测试在客户端访问,发现只有负载到vm2时才能访问成功,到vm3时会显示访问失败
LVS+Keepalived项目_第21张图片

解决办法:
使用Keepalived可以使得在一个后端服务器宕机后,客户端访问不会出现访问失败的问题

使用keepalived搭建LVS前删除VIP、清空LVS集群以便后续查看效果

ip addr del 172.25.76.10/24 dev eth0
#删除之前添加的VIP
ipvsadm -C
#清空LVS集群

在这里插入图片描述
查看ip addr
LVS+Keepalived项目_第22张图片
在vm1正虚拟服务器中安装keepalized服务并修改配置文件/etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
   #修改1
     root@localhost
   }
   #修改2
   notification_email_from keepalived@localhost
   #修3
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #修改4
   #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_ipaddress {
    #修改5
        172.25.76.10
    }
}
	#修改6
virtual_server 172.25.76.10 80 {
    delay_loop 3
    lb_algo rr
    #修改7
    lb_kind DR
    #修改8
    #persistence_timeout 50
    protocol TCP
	
	#修改9
    real_server 172.25.76.2 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.76.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

启动keepalived服务后,调度器主机自动获取keepalived配置文件中的VIP和LVS集群
LVS+Keepalived项目_第23张图片
给vm2和vm3也分别添加VIP
LVS+Keepalived项目_第24张图片
LVS+Keepalived项目_第25张图片
真机客户端访问VIP,此时时负载均衡的
LVS+Keepalived项目_第26张图片
关掉vm3的httpd服务
在这里插入图片描述
再次客户端访问VIP,发现可以正常访问
LVS+Keepalived项目_第27张图片
当重启vm3主机的httpd服务后,客户端访问又会恢复为负载均衡效果

以上配置的单点keepalived主机,在此主机故障后,客户端将再也无法访问,直至此主机故障被修复

解决办法:
配置vm4为其热备主机,实现其高可用性

(2)、使用热备机实现高可用

热备主机vm4的keepalived配置文件与keepalived服务master主机配置文件只有以下区别,为提到的配置全部相同

vrrp_instance VI_1 {
	#修改1
    state BACKUP
    interface eth0
    #修改2
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

配置完成后,启动热备机vm4的keepalived服务,down掉master端vm1的keepalived服务,查看效果
LVS+Keepalived项目_第28张图片
客户端访问为正常的负载均衡,获取到的是热备主机vm4的MAC地址
LVS+Keepalived项目_第29张图片
LVS+Keepalived项目_第30张图片
当master端vm1重启keepalived服务后,VIP会自动回退至master端
LVS+Keepalived项目_第31张图片
LVS+Keepalived项目_第32张图片
至此,高可用实现

你可能感兴趣的:(LNMP架构,服务器,负载均衡)