企业集群的应用 LVS+Keepalived 集群

发布时间 2023-07-07 02:27:56作者: m_zhuang

一、keepalived 概述

1. keepalived 服务的重要功能

(1)管理 LVS 负载均衡器软件

keepalived 可以通过读取自身的配置文件,实现通过更底层的接口直接管理 LVS 配置以及服务的启动、停止功能这会使 LVS应用跟更加简便

(2)支持故障自动切换(failover)

① 已知同时安装好 keepalived 并且启动服务

当启动的时候 master 主机获取的所有资源并且对用户提供服务(请求)当角色 backup的主机做为master热备

当master主机挂了出现故障时,backup主机将自动接管 master主机所有工作,包括VIP资源及相应资源服务。

② 当master 主机故障修复后,又会自动接管回它原来处理的工作,backup主机则同时释放master主机失效时接管接管的工作,此时此刻两台主机已恢复到最初的启动时各自得原始角色及工作状态

抢占模式:master 从故障恢复后,会将VIP从backup节点中抢占过来

非抢占模式:master 从故障恢复后不抢占backup,backup升级且master后的VIP

(3)实现 LVS 集中节点的健康检查(health checking)

keepalived.conf 文件配置 LVS的节点IP和相关参数来实现对LVS直接管理

如果几个节点服务器同时发生故障无法提供服务,keepalived 服务会自动就在那个失败节点服务器从 LVS正常转发列中清除出去,并将请求调度到别的正常节点服务器上,从而保证最终用户的访问不受要影响。当故障的节点服务器修复以后,keepalived服务又会自动把他们加入到正常转发列中,对外面客户提供服务

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

企业集群需要满足三个特点:

负载均衡

健康检查故障切换

LVS+ keepalived

完全可以买需求

2. keepalived 高可用故障切换转移原理

VRRP 通信原理

keepalived 高可用服务集群之间的故障切换转移,是通过VRRP(虚拟路由器冗余协议)来实现的在keepalived服务正常工作时

主(master)节点会不断地像备(Backup)节点发送(多播的方式)心跳消息,用意告诉备节点自己还活着,当主节点发生故障事,就无法发送心跳消息,备节点也就因此无法检测到来自主节点的心跳,于是调用自身的接管程序,接管主节点的IP资源及服务。而当主节点恢复时,备节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色

3. keepalived 体系主要模块及作用

三个模块分别是:core check vrrp

(1)core 模块

为keepalived的核心,负责主进程启动,维护全局配置文件加载和解析

(2)VRRP模块

来实现 VRRP协议

(3)check模块

负责健康检查

常见的检查方式比:如端口、URL

4. keepalived 服务的工作原理

在keepalive服务正常工作时,master节点会不断向backup节点发送(多播的方式)心跳信息,用意是告诉backup节点自己还在工作,当master节点发生故障时就无法发送心跳消息,backup节点就会无法检测到来自master节点的心跳,于是调用了自身的接管程序,接管主节点的ip资源和服务,当master节点回复时,backup节点又会释放master节点故障时自身接管的ip资源服务,恢复到原来的备用角色

二、部署 LVS+keepalived 高可用集群

架构图

先部署 LVS-DR 集群:点击查看

1. 部署主负载调度器

(1)更改主机名

# 进入主机 lvs-server 将主机名改为 lvs_01
hostnamectl set-hostname lvs_01

image-20230706163653742

(2)安装配置 keepalived 服务

# 安装 keepalived
yum -y install keepalived

# 配置 keepalived
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

vim /etc/keepalived/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热备实例参数
vrrp_instance VI_1 {				
# --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 192.168.10.188 80 {
    delay_loop 6					# 健康检查的间隔时间(秒)
    lb_algo rr						# 指定调度算法,轮询(rr)
# --39行--修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
    persistence_timeout 50			# 连接保持时间(秒)
    protocol TCP					# 应用服务采用的是 TCP协议
# --43行--修改,指定第一个Web节点的地址、端口
    real_server 192.168.10.16 80 {
        weight 1					# 节点的权重
# --45行--删除,添加以下健康检查方式		
        TCP_CHECK {
			connect_port 80			# 添加检查的目标端口
			connect_timeout 3		# 添加连接超时(秒)
			nb_get_retry 3			# 添加重试次数
			delay_before_retry 3	# 添加重试间隔
		}
	}

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

# 启动 keepalived 服务
systemctl start keepalived
systemctl enaled keepalived

image-20230706182209655

image-20230706183300104

image-20230706190816057

2. 部署备负载调度器

配置方法与主负载调度器一致,过程参考主负载服务

3. 检测

客户端浏览器访问负载调度器(每个一段时间刷新一下):192.168.23.100

image-20230706192635870

image-20230706192507072

将主负载调度器的keepalived服务关闭,再用客户端浏览器再次进行访问操作

systemctl stop keepalived

image-20230706193716609

image-20230706193738685