lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡

目录

  • LAMP和LNMP
    • LAMP架构介绍
    • LAMP和LNMP的不同
  • LVS负载均衡技术
    • 什么是负载均衡
    • LVS简介
    • LVS的三种包转发策略
    • 实验步骤-DR模式
  • keepalived简介
    • 实验步骤
      • 健康检测
      • lvs冗余
  • LVS存在的问题与不足

LAMP和LNMP

LAMP架构介绍

lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第1张图片
lamp(lnmp)所代表的含义:
L:很显然L代表linux系统。
A:表示apache,在传统行业中,多数采用apache服务器。
N:Nginx是一个高性能的HTTP和反向代理服务器。
M:表示数据库,多数采用mysql或mariadb。
P:表示php、python、perl等等编程语言。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第2张图片

LAMP和LNMP的不同

lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第3张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第4张图片

  • apache+php 和 nginx+php的区别
    apache 一般是把php当做自己的一个模块来启动;而nginx则是把http请求变量转发给php进程,即php独立进程,这个进程叫php-fpm,与nginx通信(nginx直接处理静态请求,动态请求会转发给php-fpm)所以Apache所编译的php不能用于nginx。
  • 什么是fast-cgi
    fast-cgi是一个可伸缩的、高速的在http server和动态脚本语言间通信的接口。多数流行的http server都支持fast-cgi,包括apache、nginx等。同时,fast-cgi也被许多脚本语言支持,其中就有php。
  • 什么是php-fpm
    php-fpm是一个php fast-cgi管理器,是只用于php的,它其实是php源代码的一个补丁,旨在将fast-cgi进程管理整合进php包中。必须将它patch到你的php源代码中,在编译安装php后才可以使用。新版的php已经集成了php-fpm,在./configure的时候带 –enable-fpm参数即可开启php-fpm。

LVS负载均衡技术

LVS中文站点网址

什么是负载均衡

  • 负载均衡:将请求或数据均匀分摊到多个操作单元上执行。
  • 负载均衡的发展历程:最早的负载均衡技术是通过DNS来实现的,在DNS中为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。但是这种方法具有一个很大的缺点-延时性,当某台服务器有变动时,DNS生效需要较长的时间。另外DNS不管服务器的存活情况,它只负责解析。最后负载的调度策略比较简单,无法满足业务需求,因此就出现了负载均衡。
  • 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备有F5、Netscale等。
  • 注意:单独引入负载均衡,无法解决负载均衡器(LB)的单点问题,因此还要在负载均衡器间引入高可用。

LVS简介

  • LVS(Linux Virtual Server)即linux虚拟服务器,是一个虚拟的服务器系统,它是由我国的章文嵩博士成立的自由软件项目,根据iptables的实现来开发。
  • LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。
  • 当用户的请求发往虚拟服务器,LB根据设定的包转发策略和负载均衡调度算法将用户请求转发给RS。RS再将用户请求结果返回给用户。同请求包一样,应答包的返回方式也与包转发策略有关。
  • LVS相当于负载调度器,它位于整个集群对面最前端的服务器,负责接收用户请求并根据自己的调度算法将请求转发到后端真正为用户提供服务的服务器,而客户认为服务是来自一个IP地址;共享存储则为RS保持用户访问的数据的相同内容,提供数据的一致性,包括session的问题。lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第5张图片
  • LVS的组成: LVS由2部分程序组成,包括 ipvs 和 ipvsadm。
    (1)ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
    (2)ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)。
  • LVS相关术语:
    (1)DS:Director Server,指的是前端负载均衡器节点。
    (2)RS:Real Server,后端真实的工作服务器。
    (3)VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
    (4) DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
    (5)RIP:Real Server IP,后端服务器的IP地址。
    (6)CIP:Client IP,访问客户端的IP地址。

LVS的三种包转发策略

  • DR(Direct Routing)模式: LB收到请求包后,将请求包中目标MAC地址转换为某个选定RS的MAC地址后将包转发出去,RS收到请求包后,可直接将应答内容传给用户。此时要求LB和所有RS都必须在一个物理段内,且LB与RS群共享一个虚拟IP。
    lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第6张图片
  • NAT (Network Address Translation)模式: LB收到用户请求包后,LB将请求包中虚拟服务器的IP地址转换为某个选定RS的IP地址,转发给RS;RS将应答包发给LB,LB将应答包中RS的IP转为虚拟服务器的IP地址,回送给用户。
    lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第7张图片
    特点:
    (1)不需要LB和RS在同一VLAN中
    (2)NAT模式支持端口转换,起到安全保护的作用
    (3)由于不确定RS数据包会回来经过LB,所以要在RS上设定网关为LB地址(或做静态路由)。
  • IP隧道 (IP Tunneling)模式: LB收到用户请求包后,根据IP隧道协议封装该包,然后传给某个选定的RS;RS解出请求信息,直接将应答内容传给用户。此时要求RS和LB都要支持IP隧道协议。
    lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第8张图片
    特点:
    (1)不需要LB和RS在同一VLAN中
    (2)DR和RS使用公网地址,需要使用真实的ip地址,而不是虚拟ip。
    (3)隧道模式支持广域网连接
    (4)配置复杂,成本高。

实验步骤-DR模式

本节以DR模式展开学习
1.再克隆两台虚拟机computer3(192.168.1.12)和computer4(192.168.1.13),然后分别给两台虚拟机安装httpd,这两台虚拟机作后端,之前的computer1和computer2作LB。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第9张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第10张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第11张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第12张图片
设置index.html,为了以示区别这里computer3和computer4的index.html不同(在实际中,这两个后端的页面是相同的)。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第13张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第14张图片
2.在computer1中安装ipvsadm这个工具,它用来控制lvs内核。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第15张图片
3.配置规则(前提条件一:调度器和真实主机必须在一个VLAN中;条件二:调度器和真实主机拥有相同的VIP;条件三:真实主机上需要配置noarp
在computer1中进行
-A:添加一个虚拟服务器
-a:在一个虚拟服务器中添加一个真实服务器
-t:说明虚拟服务器提供的是tcp服务
-s:指定使用的调度算法 rr:一个最均衡的调度算法
-r:指定真实的服务器
-g:指定lvs的工作模式为直接路由模式(lvs的默认模式)
-l:显示虚拟服务器表
-n:输出数字形式的ip地址和端口
注意:真实服务器的端口要和虚拟服务器端口保持一致,dr模式不支持端口转发。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第16张图片
在computer1上添加虚拟地址192.168.1.200
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第17张图片
在computer3和computer4上也加入192.168.1.200这个地址,否则会出错。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第18张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第19张图片
在另一台主机上测试,发现返回的一直是computer3中的测试页。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第20张图片
-a:显示本机的arp缓冲区内容 -n:使用数字方式显示
查看这台主机绑定的mac地址,发现这个mac地址是computer3的mac地址。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第21张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第22张图片
删除现有绑定的mac地址后重新访问,发现直接访问computer3,并没有经过调度器。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第23张图片
在computer3和computer4上安装arptables(也可以修改内核参数,不过不够直观)一般不用管这个服务,它是内核功能,用于保存策略。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第24张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第25张图片
-d:指定目标地址 -s:指定源地址 mangle:英文含义损毁 arptables-save:保存arp表
第一步的目的是隐藏computer3和computer4内部的192.168.1.200这个ip地址(即进来的时候不能直接访问200)客户端不直接访问vip;第二步是转换192.168.1.200为192.168.1.12或13(出去的时候转化200为真实的ip地址)192.168.1.12或13以自己的身份发送资源给客户端。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第26张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第27张图片
重新在192.168.1.1主机上清arp缓存,发现轮询成功!并且arp缓存显示为computer1的mac地址
在这里插入图片描述
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第28张图片

keepalived简介

keepalived即为高可用或热备,它是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第29张图片
补充:
VRRP协议(虚拟路由冗余协议)是keepalived实现的基础,可以认为是实现路由器高可用的协议。多台提供相同功能的路由器组成一个路由器组,这个组里有一个master和多个backup,master上面有一个对外提供服务的vip,master会发组播,当backup收不到VRRP包时就认为master宕掉了,这时候就需要根据VRRP的优先级来选举一个backup当master,这样的话就可以保证路由器的高可用了。

实验步骤

1.在computer1和computer2上安装keepalived
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第30张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第31张图片
2.清空computer1之前配置的ipvsadm(为了避免keepalived受到干扰)并删除其上的vip,让集群自己管理。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第32张图片
3.编辑keepalived的配置文件
如果输入mail没反应的话记得安装mailx
notification_email_from:发送通知邮件时邮件源地址
smtp_server:发送email时使用的smtp服务器地址(这里使用本机地址)
smtp_connect_timeout:smtp连接超时时间
vrrp_strict:严格执行vrrp协议规范(这里将其注释掉)
master一直发包,backup一直收包,这里注意master的优先级一定要高于backup。
interface:这里将eth0改为ens33
advert_int:发包的频率即心跳频率,keepalived的心跳是通过vrrp协议实现的,两个节点的设置必须一样。
virtual_ipaddress:虚拟ip
delay_loop:对RS的健康检查频率,这里每隔6s检查一次。
lb_algo:lvs调度算法(rr权重为1,若要改变权重则使用wrr)
lb_kind:lvs集群模式(必须大写)
persistence_timeout:在这段时间内持续连接RS(注释掉,否则在50s内一直拿到相同RS的资源)
将SSL_GET改为TCP_CHECK,并删掉底下一部分内容。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第33张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第34张图片

把virtual_server底下的内容全部删除,复制一份real_server。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第35张图片
将keepalived.conf传给computer2
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第36张图片
在computer2中修改master为backup;priority为50(数字越大优先级越高)其他不变。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第37张图片
4.在master端和backup端启动keepalived,查看日志。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第38张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第39张图片
出现vip
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第40张图片
注意:在这里一定要记得给computer3和computer4加上vip地址,否则curl vip时会报“Connection timed out”的错!!!
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第41张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第42张图片
5.测试
这里本应在一个与实验不相干的虚拟机上测试,由于我的电脑只能同时开4台虚拟机,这里就用computer2测试了。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第43张图片

健康检测

1.将computer3的httpd停掉
在这里插入图片描述
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第44张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第45张图片
可以在computer1中查看当前邮件(file查看一共有多少封邮件)
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第46张图片
发现computer3down掉了
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第47张图片
2.把computer4的httpd停掉
在这里插入图片描述
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第48张图片
此时无法访问vip
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第49张图片
在computer1中查看最新邮件,发现computer4down掉了。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第50张图片
补充:如果在computer1中也开启了httpd服务,是不会影响的,如果发现了vip会直接交给lvs处理。

lvs冗余

1.将computer1的keepalived服务down掉
在这里插入图片描述
2.发现不影响服务,此时vip在computer2上。并且我们不需要手工处理arp,它会自动修改mac地址为computer2的mac地址。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第51张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第52张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第53张图片
3.再将computer1上的keepalived开启,发现vip回来了。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第54张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第55张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第56张图片
补充1:keepalived不具有服务级别的功能,不能监管vip。
(1)将vip从computer1摘除
发现服务不能正常进行。
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第57张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第58张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第59张图片
(2)将vip重新加到computer1上
发现服务恢复正常
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第60张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第61张图片
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第62张图片
补充2:如果虚拟机的网卡命名不是按第一块网卡(eth0)、第二块网卡(eth1)…命名的话,进行下图操作。
(1)在rehl7中编辑/boot/grub2/grub2.cfg文件
在rehl8中编辑/boot/grub2/grubenv文件
lnmp 一之LNMP简介和LVS+Keepalived实现高可用的ip负载均衡_第63张图片

(2)重启电脑
发现网卡重新命名

LVS存在的问题与不足

  • 在大规模网络中应用不足:各种转发模式,网络拓扑复杂,运维成本高。
  • 和商用LB设备相比:缺少TCP标志位DDOS攻击防御
  • 主备部署方式不足:性能无法线性扩展,即便实现了冗余,可依然是单点工作,始终只是一个调度器在工作 。

你可能感兴趣的:(linux企业学习,运维,linux)