Linux5.2 LVS+keepalived高可用群集

news2025/1/24 5:06:36

文章目录

  • 计算机系统
    • 5G云计算
      • 第三章 LINUX LVS+Keepalived群集
        • 一、Keepalived 概述
          • 1. Keepalived 作用
          • 2.Keepalived 实现原理剖析
          • 3.VRRP协议(虚拟路由冗余协议)
          • 4.Keepalived 主要模块及其作用
          • 5.健康检查方式(学名:探针)
          • 6.==脑裂的形成和解决==
        • 二、LVS+Keepalived 高可用集群部署
          • 1.LVS 部署,配置负载调度器(主、备相同)
          • 2.配置节点服务器(192.168.58.61、192.168.68.62)
          • 3.测试效果
        • 三、Nginx+Keepalived 高可用集群部署
          • 1.配置负载调度器(主、备相同)
          • 2.配置Nginx四层负载均衡
          • 3.测试效果
        • 四、常见问题
          • 1. Keepalived 通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP
          • 2. keepalived 的抢占与非抢占模式
        • 五、总结
          • 1. 一个合格的集群应该具有的特性

计算机系统

5G云计算

第三章 LINUX LVS+Keepalived群集

在这个高度信息化的 IT 时代,企业的生产系统、业务运营、销售和支持,以及日常管理等环节越来越依赖于计算机信息和服务,对高可用(HA)技术的应用需求不断提高,以便提供持续的、不间断的计算机系统或网络服务

一、Keepalived 概述

Keeplived是一款专为LVS和HA设计的健康检查工具。主要支持故障自动切换(Failover)和支持节点健康状态检查(Health Checking)。官方网站: http://www.keepalived.org

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题

1. Keepalived 作用

判断LVS负载调度器、节点服务器的可用性,当master主机出现故障及时切换到backup节点保证业务正常,当master故障主机恢复后将其重新加入群集并且业务重新切换回master节点

2.Keepalived 实现原理剖析

Keepalived是一个基于VRRP热备份协议来实现服务高可用方案,可用解决静态路由吹西安的单点故障问题。

在一个LVS服条集群中通常有主服条器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP(VIP),主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性

3.VRRP协议(虚拟路由冗余协议)

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

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

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

4.Keepalived 主要模块及其作用

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

模块说明
core模块为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析
vrrp模块是来实现VRRP协议的。(调度器之间的健康检查和主备切换)
check模块负责健康检查,常见的方式有端口检查及URL检查。(节点服务器的健康检查)
5.健康检查方式(学名:探针)
健康检查方式说明
发送心跳信息例如ping/pong命令等
TCP端口检查例如向一台主机的 IP:PROT 发送TCP三次握手连接
HTTP URL检查例如向一台主机的http://IP+PROT/…URL路径发送HTTP GET{}请求方法
主机响应返回2xx或者3xx为正常,若响应返回4xx或者5xx则认为健康检查异常
6.脑裂的形成和解决

1)什么是脑裂

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

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

2)脑裂发生时的现象及原因

Master主机一直发送心跳消息给backup主机,如果中间的链路突然断掉,backup主机将无法收到master主机发送过来的心跳消息(也就是vrrp报文),backup主机这时候会立即抢占master的工作,但其实这时候的master是正常工作的,此时就会出现脑裂的现象,即两台主机都为master状态,都有VIP且都正常工作

3)脑裂的解决方法

关闭两个都成为master主机中的一个,一般关闭原本就为master的主机

4)脑裂的预防方案

Ⅰ.使用shell脚本对这两个主机之间的连通性进行监测,如果发现有问题,就会立即关闭keepalived服务来防止脑裂的产生

Ⅱ.增加一条链路作为备用链路,即使主链路挂掉了,备用链路也会顶上来,master主机可以继续给backup主机发送心跳消息

Ⅲ.使用监控软件的方法,这边主要是采用的zabbix来监控的,主要就是创建监控项,创建触发器来测试关闭keepalived服务

###Shell脚本判断主机之间是否时链路断开
###主调度器
###判断主从调度器之间链路是否断连
ping -c 3 -i 0.5 -w 2 192.168.58.63 &> /dev/null 

if [ $? -ne 0 ];then
  ssh 192.168.58.61 ping -c 3 -i 0.5 -w 2 -I 192.168.58.61 192.168.58.64  &> /dev/null 
  if [ $? -eq 0 ];then
      systemctl stop keepalived
  fi
fi

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

主DR负载调度器:本地网卡 ens33:192.168.58.63/24
                      VIP虚拟网卡ens33:0:192.168.58.188/32
备DR负载调度器:本地网卡 ens33:192.168.58.64/24

Web节点服务器1:本地网卡 ens33:192.168.58.61/24
                               VIP虚拟回环网卡 lo:0:192.168.58.188/32
Web节点服务器2:本地网卡 ens33:192.168.68.62/24
                               VIP虚拟回环网卡 lo:0:192.168.58.188/32
tomcat多实例服务器:192.168.58.60/24
客户端:192.168.58.10/24
1.LVS 部署,配置负载调度器(主、备相同)
systemctl stop firewalld.service
setenforce 0

yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs

(1)配置keeplived(主、备DR 服务器上都要设置)
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必须为BACKUP,并加上配置 nopreempt
--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
    priority 100
    advert_int 1					#通告间隔秒数(心跳频率)
    authentication {				#定义认证信息,每个热备组保持一致
		auth_type PASS				#认证类型
--27行--修改,指定验证密码,主备服务器保持一致
        auth_pass 1111
    }
    virtual_ipaddress {				#指定群集vip地址
        192.168.58.188
    }
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.58.188 80 {
    delay_loop 6					#健康检查的间隔时间(秒)
    lb_algo rr						#指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
    persistence_timeout 0			#连接保持时间(秒)
    protocol TCP					#应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
    real_server 192.168.58.61 80 {
        weight 1					#节点的权重
--45行--删除,添加以下健康检查方式		
        TCP_CHECK {
			connect_port 80			#添加检查的目标端口
			connect_timeout 3		#添加连接超时(秒)
			nb_get_retry 3			#添加重试次数
			delay_before_retry 3	#添加重试间隔
		}
	}

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


systemctl start keepalived
ip addr						#查看虚拟网卡vip


(2)启动 ipvsadm 服务
--192.168.58.63---
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm

ipvsadm -ln
#如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived

--192.168.80.64---
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm

ipvsadm -ln

(3)调整 proc 响应参数,关闭Linux 内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

sysctl -p

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

2.配置节点服务器(192.168.58.61、192.168.68.62)
参考上一篇博客的七层nginx服务器轮询,动静分离
3.测试效果
在客户端访问 http://192.168.58.188/ 
再在主服务器关闭 keepalived 服务后再测试, systemctl stop keepalived

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

在这里插入图片描述

三、Nginx+Keepalived 高可用集群部署

1.配置负载调度器(主、备相同)
vim keepalived.conf
......
global_defs {
	smtp_server 127.0.0.1
	router_id Nginx_01
	#vrrp_strict
}

vrrp_script chk_nginx {
    ###指定监控脚本的路径
    script "/etc/keepalived/nginx_check.sh"
    ###检测的间隔时间
    interval 2
    ###权重
    weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 10
	#nopreempt		
    priority 100
    advert_int 1					
    authentication {				
		auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.58.188
    }
    track_script {                   ###加载追踪模块
        chk_nginx
    }
}

###检测nginx是否启动的脚本
#!/bin/bash
if ! killall -0 nginx  &> /dev/null
then
    systemctl stop keepalived
fi

###给脚本添加执行权限
chmod +x nginx_check.sh

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

2.配置Nginx四层负载均衡
参考之前博客的七层nginx服务器轮询,负载均衡
3.测试效果
在客户端访问 http://192.168.58.188/ 
再在主服务器关闭 nginx 服务后再测试,看keepalived服务是否同时关闭,VIP是否转移,再次启动keepalived服务,是否启动成功,再次启动nginx 服务后,启动keepalived服务,是否启动成功

在这里插入图片描述

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

在这里插入图片描述

四、常见问题

1. Keepalived 通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP

Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器。

然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务器。

优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址

2. keepalived 的抢占与非抢占模式

抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP。

非抢占式俩节点state必须为bakcup,且必须配置nopreempt

[root@localhost ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
	state BACKUP
	nopreempt
	interface ens32
	virtual router_id 51
	priority 100
	advert_int 1
	authentication{
		auth_type PASS
		auth_pass 1111
	}
	virtual ipaddress {
	192.168.58.188
	}
}

五、总结

1. 一个合格的集群应该具有的特性

负载均衡:LVSNginxHaproxy

给调度器/节点服务器健康检查:KeepalivedHeartbeat

故障转移

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/632470.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python怎么删库:谨慎使用

Python怎么删库:谨慎使用 Python是一种强大的编程语言,它被广泛用于各种项目中,不仅仅是数据科学和机器学习。但它也可以被用来执行危险的任务,比如删库。当你需要在Python中进行数据库操作时,一定要特别小心。在这篇…

Stable-Diffusion|文生图 拍立得纪实风格的Lora 图例(三)

上篇【Stable-Diffusion|入门怎么下载与使用civitai网站的模型(二)】介绍了如何使用c站进行文生图,尤其一些Lora可能随时会下架,所以及时测试,及时保存很关键,更新一些笔者目前尝试比较有意思的Lora。 本篇…

【python】【excel】在UI中加载EXCEL并修改

界面 代码 import tkinter as tk from tkinter import filedialog from pandastable import Table import pandas as pd import pyperclipclass ExcelEditor(tk.Frame):def __init__(self, parentNone):tk.Frame.__init__(self, parent)self.parent parentself.grid()self.cr…

chatgpt赋能python:如何在Python中添加空行?

如何在Python中添加空行? 如果你是一个有经验的Python工程师,在编写代码时你可能会遇到需要添加空行的情况。但是有几种方法可以实现这一点,你应该用哪种方法呢?在本文中,我们将探讨如何在Python中添加空行以及各种添…

TypeScript 5.1发布,新功能更新

文章目录 1:返回类型增加undefined2:getter可以设置和 setter 的不相关类型3:对 JSX 元素和 JSX 标签的异步支持4:支持命名空间属性名称 JSX5:typeRoots在模块更新6:JSX 标签的链接游标7:param …

Python中对文件的基本操作

文章目录 文件和目录路径文件的读取、写入、复制、删除、变更位置及修改名称解压缩zip格式的文件剪切板的应用使用python-docx处理Word文档使用openpyxl处理Excel文档示例:获取Excel文档中的数据生成Word文档 文件和目录路径 os库是Python内置的标准库,…

张天禹移动端学习

文章目录 相关概念(一)屏幕相关1. 屏幕大小2. 屏幕分辨率3. 屏幕密度 (二)像素相关1.物理像素2. css 像素3. 设备独立像素4.像素比5.像素之间的关系 (三)图片高清显示位图像素图片的高清显示(媒…

chatgpt赋能python:Python下如何给网页添加背景图片

Python下如何给网页添加背景图片 随着现代互联网的快速发展,人们对于网页设计的要求越来越高,其中非常重要的一项就是背景图。在Python编程中,我们也可以很容易的为网页添加背景图片。 HTML中的background属性 要给网页加上背景图&#xf…

chatgpt赋能python:Python加法表达式,快速简便的计算方式

Python加法表达式,快速简便的计算方式 介绍 Python是一种可读性强、简洁、易于学习的编程语言,同时也是一种高级编程语言,由于其简洁性和可读性,越来越多的程序员们选择Python作为他们的工作语言。在Python中,加法表…

C++技能 - 详解使用Lambda表达式【再也不怕看不懂别人的代码了,干货还是蛮多的】

系列文章目录 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 C技能系列 期待你的关注哦!!! 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream w…

C语言之函数初阶(2)

目录 1. 函数是什么 2. 库函数 3. 自定义函数 4. 函数参数 5. 函数调用 6. 函数的嵌套调用和链式访问 7. 函数的声明和定义 8. 函数递归 上一篇博客我们讲解了函数的前六个比较容易理解的部分,这一篇博客我们来讲解最后两个部分 在讲这篇博客之前&am…

Shell免交互操作

目录 一、Here Document 免交互 1.免交互定义 2.格式和使用方法 二、Expect 免交互 1.简介 2.格式和使用 (1)声明解释器 (2)spawn(跟踪) (3)expect(期望&#x…

SpringBoot整合minio服务(超详细)

一、使用docker部署minio 1、拉取镜像 docker pull minio/minio 2、创建目录 mkdir -p /home/minio/config mkdir -p /home/minio/data 3、创建Minio容器并运行 docker run -p 9000:9000 -p 9090:9090 \--nethost \--name minio \-d --restartalways \-e "MINIO_ACC…

基于OpenCV的自动报靶识别实验

基于OpenCV的自动报靶识别实验 问题方案实验结论 问题 户外胸环靶自动报靶问题,目前是通过声电等方式来识别,成本较高,本文尝试使用图像处理的方法来识别。 方案 前提:固定相机 确定靶子的四个顶点:目前使用人工手…

使用imp和exp命令对orcale进行导入和导出

docker 进行orcale 查看这篇文章 https://editor.csdn.net/md/?articleId131026846 1、进入orcale 1、进入orcale容器 docker exec -it oracle11g bash2、orcale连接sysdba用户 进入root su root密码:helowin切换到oracle用户 su oracle使用sqlplus登录test用户…

chatgpt赋能python:Python中如何删除字符串中某个字符

Python中如何删除字符串中某个字符 Python是一种功能强大的编程语言,许多开发人员喜欢使用它来编写应用程序。字符串是Python中的常见数据类型之一,可用于存储文本。有时,我们可能需要删除字符串中的某个字符。本文将介绍如何在Python中使用…

GDB的学习

目录: 什么是gdb?gdb的安装gdb的使用 gdb的一些骚操作watch命令的使用调试core文件 什么是gdb? gdb的全称是GNU debugger,看名字就知道 gdb 是用来对程序进行 debug 的,不管是学习还是工作中,用好gdb&…

redis五种数据类型具体时候的底层编码

redis随着值的类型不同,其在底层编码类型会不相同。目前现有的编码格式有 #define OBJ_ENCODING_RAW 0 /* Raw representation */ #define OBJ_ENCODING_INT 1 /* Encoded as integer */ #define OBJ_ENCODING_HT 2 /* Encoded as hash table */ #def…

RabbitMQ集群部署之普通模式

1.集群分类 在RabbitMQ的官方文档中,讲述了两种集群的配置方式: 普通模式:普通模式集群不进行数据同步,每个MQ都有自己的队列、数据信息(其它元数据信息如交换机等会同步)。例如我们有2个MQ:m…

chatgpt赋能python:Python怎么再加一个的SEO

Python怎么再加一个的SEO 作为一名有10年Python编程经验的工程师,我深知如何将Python项目优化为搜索引擎友好的代码。当谈到SEO时,构建优化的代码比任何其他技术都更加重要。在本文中,我将介绍一些Python中的关键SEO技巧,并强调如…