LVS-DR集群架构+keepalived

目录

keepalive简介

vrrp协议(虚拟路由冗余协议)

keepalive的工作流程

keepalived服务主要功能

1,管理LVS负载均衡软件

2,支持故障自动切换

 3、实现LVS集群中节点的健康检查

4、实现LVS负载调度器、节点服务器的高可用性

脑裂的形成和解决

1.什么是脑裂

2.预防脑裂的发生

部署LVS-DR+Keepalived集群


  • keepalive简介

介绍:Keepalived是Linux下一个轻量级别的高可用解决方案。中文名称:存活检测机制。起初针对LVS进行研发,专门用来监控集群系统中各个服务节点的状态。如果负载调度器出现故障,keepalive检测到以后将故障点直接从集群中剔除。

作用:支持故障自动切换、支持节点健康状态检查

原理:心跳检测

  • vrrp协议(虚拟路由冗余协议)

VRRP是一种容错协议,它通过把几台路由设备联合组成一台虚拟的路由设备,并通过一定的机制来保证当主机的下一跳设备出现故障时,可以及时将业务切换到其它设备,从而保持通讯的连续性和可靠性。

VRRP将局域网内的一组路由器划分在一起,称为一个备份组。备份组由一个Master路由器和多个Backup路由器组成,功能上相当于一台虚拟路由器。局域网内的主机只需要知道这个虚拟路由器的IP地址,并不需知道具体某台设备的IP地址,将网络内主机的缺省网关设置为该虚拟路由器的IP地址,主机就可以利用该虚拟网关与外部网络进行通信。

VRRP将该虚拟路由器动态关联到承担传输业务的物理路由器上,当该物理路由器出现故障时,再次选择新路由器来接替业务传输工作,整个过程对用户完全透明,实现了内部网络和外部网络不间断通信。

  • keepalive的工作流程

Initialize模式

设备启动时进入此状态,当收到接口Startup的消息,将转入Backup或Master状态(IP地址拥有者的接口优先级为255,直接转为Master)。在此状态时,不会对VRRP报文做任何处理。

Master模式

定期发送 VRRP 报文

以虚拟 MAC 地址响应对虚拟 IP 地址的 ARP 请求

转发目的标MAC 地址为虚拟 MAC 地址的 IP 报文

如果它是这个虚拟 IP 地址的拥有者,则接收目的 IP 地址为这个虚拟 IP 地址的 IP 报文。否则,丢弃这个 IP 报文

如果收到比自己优先级大的报文则转为 Backup 状态

如果收到优先级和自己相同的报文,并且发送端的 IP 地址比自己的 IP 地址大,则转为 Backup 状态

当接收到接口的 Shutdown 事件时,转为Initialize(初始状态)

Backup模式

接收 Master 发送的 VRRP 报文,判断 Master 的状态是否正常

对虚拟 IP 地址的 ARP 请求,不做响应

丢弃目的 MAC 地址为虚拟 MAC 地址的 IP 报文

丢弃目的 IP 地址为虚拟 IP 地址的IP报文

Backup 状态下如果收到比自己优先级小的报文时,丢弃报文,立即切换为 Master( 仅在抢占模式下生效 )

如果收到优先级和自己相同或者比自己高的报文,则重置定时器,不进一步比较 IP 地址

当接收到接口的 Shutdown 事件时,转为 Initialize

如果 MASTER_DOWN_INTERVAL 定时器超时,则切换为 Master

四.Keepalived 体系主要模块及其作用

core模块: 为keepalive的核心、负责主进程的启动,维护及全局配置文件的加载和解析

check模块: 负责健康检查,常见的方式有端口检查及URL检查

vrrp模块: 是来实现VRRP协议的

.keepalived服务主要功能

1,管理LVS负载均衡软件

Keepalive可以通过读取自身的配置文件,实现通过更底层的接口直接管理LVS的配置以及控制服务的启动、停止功能

2,支持故障自动切换

Keepalived可以实现任意两台主机之间,例如:Master和Backup主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是LVS负载均衡,Nginx反向代理这样的服务器。

Keepalived高可用功能实现的简单原理为,两台主机同时安装好Keepalived软件并启动服务,开始正常工作时,由角色为Master的主机获得所有资源并对用户提供服,角色为Backup的主机为Master主机的热备,当角色为Master的主机失效或出现故障时,角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务,当角色为Master的主机故障修复后,又会自动接管回他原来处理的工作,角色Bachup的主机则同时释放Master主机时它接管的工作,此时,两台主机将恢复到最初启动时各自的原始及工作状态。

 3、实现LVS集群中节点的健康检查

Keepalived可以通过在自身的Keepalived.conf文件里配置LVS的节点IP和相关参数实现对LVS的直接管理;除此之外,当LVS集群中的某一个甚至是几个节点服务器同时发生故障无法提供服务时,Keepalived服务会自动将失效的节点服务器从LVS的正常转发队列中清除出去,并将请求调度到别的正常节点服务器上,从而保证最终用户的访问不受影响;当故障的节点服务器被修复以后,Keepalived服务又会自动地把它们加入到正常转发队列中,对客户提供服务。

4、实现LVS负载调度器、节点服务器的高可用性

一般企业集群需要满足三个特点: 负载均衡、健康检查、故障切换 ,使用LVS+Keepalived完全可以满足需求

keeplived的检查方式

ping方式检查(不全面)

基于脚本检查(周期检查master服务器的服务是否停止,停止之后使用停止keeplived,进行漂移,并邮件告警

.脑裂的形成和解决

1.什么是脑裂

脑裂(split-brain):指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。

对于无状态服务的HA,无所谓脑裂不脑裂;但对有状态服务(比如MySQL)的HA,必须要严格防止脑裂。

2.预防脑裂的发生

1.添加冗余心跳线,如双线条线等;

2.启动“智能”磁盘锁,只有正在提供服务的MASTER节点才能锁住或者解锁共享磁盘,当MASTER节点出现了短暂的网络堵塞等情况时会自动加锁,BACKUP节点也无法接管资源,只有当MASTER出现故障无法提供服务时才会自动解锁共享磁盘,并交由BACKUP节点接管

3.设置仲裁机制,例如出现检测不到心跳线的情况时,MASTER节点和BACKUP节点都去ping一下网关IP,如果ping不通则主动释放资源或者放弃抢占资源;

4.通过脚本来监控和监测节点是否处于正常工作状态,如果MASTER节点出现了异常,并在脚本设定的期限内无法恢复正常,则杀死当前MASTER的服务进程,将资源交由BACKUP节点来接管

.部署LVS-DR+Keepalived集群

本篇博客根数上篇

LVS-DR集群架构_懂点计算机的小白的博客-CSDN博客

在此基础上再添加一台LVS服务器做从负载均衡调度器

  1. 关闭防火墙,核心防护,下载ipvsadm,keepalived

systemctl stop firewalld

setenforce 0

systemctl disable firewalld

yum -y install keepalived ipvsadm

modprobe ip_vs  加载模块信息

cat /proc/net/ip_vs   查看ipvs 版本信息

ipvsadm-save > /etc/sysconfig/ipvsadm   创建一个ipvsadm的一个配置文件

systemctl start ipvsadm

  1. 添加虚拟子接口

cd /etc/sysconfig/network-scripts/

cp ifcfg-ens33  ifcfg-ens33:0

3.调整proc响应参数

vim /etc/sysctl.conf #编辑内核proc参数

net.ipv4.ip_forward = 0

net.ipv4.conf.all.send_redirects = 0 

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.ens33.send_redirects = 0

4.添加策略

ipvsadm -C

ipvsadm -A -t 192.168.239.100:80 -s rr

ipvsadm -a -t 192.168.239.100:80 -r 192.168.239.130:80 -g

ipvsadm -a -t 192.168.239.100:80 -r 192.168.239.131:80 -g

ipvsadm

5.切回lvs主

进入keepalived.conf文件并且删除原来的文件添加:

global_defs {             #定义全局参数

      router_id lvs_01          #热备组内的设备名称不能一致

}

vrrp_instance vi_1 {       #定义VRRP热备实例参数

      state MASTER         #指定热备状态,主为master,备为backup

      interface ens33      #指定承载vip地址的物理接口

      virtual_router_id 51 #指定虚拟路由器的ID号,每个热备组保持一致

      priority 110                 #指定优先级,数值越大越优先

      advert_int 1

      authentication {

           auth_type PASS

           auth_pass 6666

 }

virtual_ipaddress {        #指定集群VIP地址

      192.168.239.100

}

}

#指定虚拟服务器地址vip,端口,定义虚拟服务器和web服务器池参数

virtual_server 192.168.239.100 80 {

      lb_algo rr                #指定调度算法,轮询(rr)

      lb_kind DR                                #指定集群工作模式,直接路由DR

      persistence_timeout 6             #健康检查的间隔时间

      protocol TCP                              #应用服务采用的是TCP协议

#指定第一个web节点的地址,端口

real_server 192.168.239.131 80 {

      weight 1                                  #节点权重

      TCP_CHECK {

          connect_port 80               #添加检查的目标端口

          connect_timeout 3             #添加连接超时

          nb_get_retry 3                #添加重试次数

          delay_before_retry 3  #添加重试间隔

   }

}

#指定第二个web节点的地址,端口

real_server 192.168.239.130 80 {

      weight 1

      TCP_CHECK {

          connect_port 80

          connect_timeout 3

          nb_get_retry 3

          delay_before_retry 3

   }

}

}

6.切回lvs从

global_defs {             #定义全局参数

      router_id lvs_02          #热备组内的设备名称不能一致

}

vrrp_instance vi_1 {       #定义VRRP热备实例参数

      state BACKUP        #指定热备状态,主为master,备为backup

      interface ens33      #指定承载vip地址的物理接口

      virtual_router_id 51 #指定虚拟路由器的ID号,每个热备组保持一致

      priority 100               #指定优先级,数值越大越优先

      advert_int 1

      authentication {

           auth_type PASS

           auth_pass 6666

 }

virtual_ipaddress {        #指定集群VIP地址

      192.168.239.100

}

}

#指定虚拟服务器地址vip,端口,定义虚拟服务器和web服务器池参数

virtual_server 192.168.239.100 80 {

      lb_algo rr                #指定调度算法,轮询(rr)

      lb_kind DR                                #指定集群工作模式,直接路由DR

      persistence_timeout 6             #健康检查的间隔时间

      protocol TCP                              #应用服务采用的是TCP协议

#指定第一个web节点的地址,端口

real_server 192.168.239.131 80 {

      weight 1                                  #节点权重

      TCP_CHECK {

          connect_port 80               #添加检查的目标端口

          connect_timeout 3             #添加连接超时

          nb_get_retry 3                #添加重试次数

          delay_before_retry 3  #添加重试间隔

   }

}

#指定第二个web节点的地址,端口

real_server 192.168.239.130 80 {

      weight 1

      TCP_CHECK {

          connect_port 80

          connect_timeout 3

          nb_get_retry 3

          delay_before_retry 3

   }

}

}

6.实验验证

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值