LVS+Keepalived群集实验

导读:本篇文章讲解 LVS+Keepalived群集实验,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、keepalived介绍

  • keeplived 软件起初是专门为LVS 负载均衡 软件设置的,用来管理并监控LVS集群中各个服务节点的状态,后来加入了可以实现高可用的VRRP 功能。因此,keepalived除了能管理LVS 集群以外,还可以为其它服务(如:Nginx、Haproxy、Mysql等)实现高可用。
  • keepalived 软件主要是通过 VRRP 协议 实现高可用的功能。VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的速写,VRRP出现的目的就是为了解决静态路由单点故障的问题,它能保证当个别节点出现问题时,整个网络可以不间断的运行。

1、Keepalived是什么?

Keepalived是一款专为LVS 和HA 设计的一款健康检查工具。

  • 支持故障自动切换、支持节点健康状态检查。

2、Keepalived工作原理

  • Keepalive是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
  • 在一个LVS服务集群中,通常有 主服务器(MASTER) 和备服务器(BACKUP) 两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证高可用性。
  • 在Keepalive服务之间,只有作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,备监听不到主发送的广播包后,就会启动相关服务器接管资源,保证业务的连续性,接管速度最快可以小于1秒。

3、Keepalived 体系主要模块及其作用

Keepalive体系架构中主要有三个模块,分别是core、check和vrrp

  • 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、什么是脑裂

当MASTER节点出现网络堵塞等现象时,BACKUP节点因无法及时检测到MASTER节点的heartbeat而认为MASTER节点已经挂掉了,就抢来了MASTER节点的VIP,并接管了MASTER节点的资源。而MASTER节点认为自己还是正常的,这就出现了同一个服务集群中,同一个VIP地址同时飘在两个节点上的现象,即产生了两个MASTER节点,正常情况下是一个节点对外提供服务,现在也变成了两个节点能同时被用户访问到,对于一个集群同时存在两个MASTER状态的现象,我们称之为脑裂。

2、出现脑裂的原因

通常,脑裂现象的出现是由以下几种情况引起的:

①高可用集群服务器队列之间的心跳线链路发生了故障,如心跳线的断裂、老化等导致各节点之间无法正常通信;

②集群服务器队列之间的IP配置发生了冲突;

③网卡或交换机等负责连接心跳线的设备发生了故障;

④高可用服务器上未禁止iptables防火墙规则的生成,导致心跳消息无法传输;

⑤在同一个VRRP实例中,各节点上的virtual_router_id设置的参数不同;

⑥开启了抢占模式,但是未设置抢占延时。

3、预防脑裂的发生

为了减少或避免HA集群中出现脑裂现象,我们可以采取以下措施:

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

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

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

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

四、部署LVS-DR+Keepalived群集

1、实验准备

需要5台系统,一台做负载调度器主设备,一台做负载调度器备设备,两台做web服务器的节点,一台windows客户端,这边主要验证主备之间切换,NFS服务器暂时不配。

主DR服务器:ens33(20.0.0.55) 、ens33:0(20.0.0.100)

备DR服务器:ens33(20.0.0.56) 、 ens33:0(20.0.0.100)

web1服务器:ens33(20.0.0.57) 、 lo:0(20.0.0.100)

web2服务器:ens33(20.0.0.58) 、 lo:0(20.0.0.100)

window客户端:20.0.0.60

2、配置主负载调度器(20.0.0.55)

2.1 修改主机名,关闭防火墙

在这里插入图片描述

2.2 安装ipvsadm并开启、keepalived

yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm

在这里插入图片描述

2.3 配置keepalived

cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak

vim keepalived.conf
global_defs {						#定义全局参数
--10行--修改,邮件服务指向本地
	smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
	router_id LVS_01
--14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
	#vrrp_strict
}

vrrp_instance VI_1 {				#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
    state MASTER
--21行--修改,指定承载vip地址的物理接口
    interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	
    virtual_router_id 10
	#nopreempt		#如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
    priority 100
    advert_int 1					#通告间隔秒数(心跳频率)
    authentication {				#定义认证信息,每个热备组保持一致
		auth_type PASS				#认证类型
--27行--修改,指定验证密码,主备服务器保持一致
        auth_pass abc123
    }
    virtual_ipaddress {				#指定群集vip地址
        192.168.10.188
    }
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 20.0.0.100 80 {
    delay_loop 6					#健康检查的间隔时间(秒)
    lb_algo rr						#指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
    persistence_timeout 50			#连接保持时间(秒)
    protocol TCP					#应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
    real_server 20.0.0.57 80 {
        weight 1					#节点的权重
--45行--删除,添加以下健康检查方式		
        TCP_CHECK {
			connect_port 80			#添加检查的目标端口
			connect_timeout 3		#添加连接超时(秒)
			nb_get_retry 3			#添加重试次数
			delay_before_retry 3	#添加重试间隔
		}
	}

	real_server 20.0.0.58 80 {		#添加第二个 Web节点的地址、端口
        weight 1
        TCP_CHECK {
			connect_port 80
			connect_timeout 3
			nb_get_retry 3
			delay_before_retry 3
		}
	}
##删除后面多余的配置##
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4 配置虚拟子接口IP

vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=20.0.0.100
NETMASK=255.255.255.255

ipup ens33:0
systemctl start keepalived

在这里插入图片描述
在这里插入图片描述

2.5 调整proc 相应参数,关闭Linux内核的重定向参数响应

vim /etc/sysctl.conf
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

sysctl -p

在这里插入图片描述
在这里插入图片描述

2.6 配置ipvsadm策略

ipvsadm  -C 
ipvsadm  -A  -t  20.0.0.100:80 -s rr
ipvsadm  -a  -t  20.0.0.100:80 -r 20.0.0.57:80  -g
ipvsadm  -a  -t  20.0.0.100:80 -r 20.0.0.58:80  -g
ipvsadm -ln  #查看
ipvsadm -Lnc #监控连接数

在这里插入图片描述

3、配置备负载均衡器(20.0.0.56)

备负载均衡器配置与主负载均衡器配置类似,主要区别在于keepalived配置文件的区别

3.1 修改主机名,关闭防火墙

在这里插入图片描述

3.2 安装ipvsadm并开启,安装keepalived

在这里插入图片描述

3.3 配置keepalived(与主服务器的区别)

在这里插入图片描述
在这里插入图片描述

3.4 配置内核参数

在这里插入图片描述
在这里插入图片描述

3.5 配置ipvsadm策略

ipvsadm -C   #清除规则
ipvsadm -A -t 20.0.0.100:80 -s rr   #添加虚拟IP,分流模式为轮询
ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.57:80 -g
ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.58:80 -g
systemctl start keepalived    #重启keepalived

在这里插入图片描述
在这里插入图片描述

4、配置web节点服务器(20.0.0.57、20.0.0.58)

web服务器的节点,两台节点服务器的配置基本一样,唯一的区别就是再展示的页面不同。

4.1 修改名和关闭防火墙

web1

在这里插入图片描述

web2
在这里插入图片描述

下面操作一致,按web1为例

4.2 安装httpd服务,并启动

在这里插入图片描述

4.3 配置回环虚拟接口,并启动

在这里插入图片描述
在这里插入图片描述

4.4 添加转发本地路由

在这里插入图片描述

4.4 配置内核参数,拒接ARP请求

在这里插入图片描述
在这里插入图片描述

4.5 设置网页内容

Web1的配置
在这里插入图片描述

web2的配置

在这里插入图片描述

5、客户端访问

5.1 正常查看web服务器站点是否正常跳转

访问页面进行跳转

在这里插入图片描述

查看负载均衡器主服务器的虚拟IP地址

在这里插入图片描述

5.2 将主负载负载均衡器关闭keepalived服务器,验证漂移

将负载均衡器上面的keepalived关闭

在这里插入图片描述

访问页面

在这里插入图片描述

查看备负载均衡器上面的虚拟IP

在这里插入图片描述

查看主负载均衡器上的虚拟IP是否存在

在这里插入图片描述

5.3 将主负载均衡器上的keepalived服务器启动,查看飘移

将主负载均衡器上的keepalived启动

在这里插入图片描述

查看主负载均衡器上的虚拟IP是否飘移回来

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/75029.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!