LVS+Keepalived 高可用群集实战部署

LVS+Keepalived 高可用群集实战部署

  • 一、LVS+Keepalived 高可用群集
      • 1.LVS
      • 2、Keepalived工作原理和作用
      • 3、Keepalived体系主要模块及其作用
      • 4、Keepalived实现原理剖析
      • 5、VRRP (虚拟路由冗余协议)
  • LVS+Keepalived 高可用群集部署(抢占模式)
      • 1、配置负载调度器(192.168.24.70、192.168.24.77相同)
      • 2、部署NFS共享服务器(192.168.24.80)
      • 3、配置节点服务器
        • Web-Server1(192.168.24.100)
        • Web-Server2(192.168.24.110)
      • 4、配置keeplived(主、备DR服务器上都要设置)
    • 5、客户机访问
    • Nginx的Keepalived配置
  • keepalived脑裂的产生和解决方案
    • 面试问题

一、LVS+Keepalived 高可用群集

1.LVS

  • Linux虚拟服务器(Linux Virtual Server)

  • LVS 实际上相当于基于IP地址的虚拟化应用, 为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决方法

2、Keepalived工作原理和作用

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

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

  • 支持故障自动切换(Failover)

  • 支持节点健康状态检查(Health Checking)

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

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

Keepalived体系架构中主要有三个模块,分别是core(核心模块)、check(健康检查模块)、vrrp(故障转移模块)

  • core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
  • check模块:负责健康检查,常见的方式有端口检查及URL检查。(节点服务器的健康检查)
  • vrrp模块:是来实现VRRP协议的。(调度器之间的健康检查和主备切换)

健康检查学名 :探针
1)发送心跳消息:ping/pang
2)TCP端口检查:向一台主机的IP:PORT(端口)T发起TCP三次握手连接
3)HTTP URL检查:向一台主机的 http://IP:PORT/…URL路径发送HTTP GET请求方法,主机响应返回2xx 3xx 认为健康检查正常,如响应返回4xx 5xx则认为健康检查异常

4、Keepalived实现原理剖析

  • keepalived采用VRRP热备份协议实现Linux 服务器的多机热备功能
  • VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案。
  • 由多台路由器组成一个热备份组,通过共用的虚拟IP地址对外提供服务
  • 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
  • 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

5、VRRP (虚拟路由冗余协议)

  • 是针对路由器的一种备份解决方案
  • 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
  • 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
  • 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

在这里插入图片描述

LVS+Keepalived 高可用群集部署(抢占模式)

环境配置

主机IP地址工具
Director主192.168.24.70ipvsadm、keepalived
Director备192.168.24.77ipvsadm、keepalived
NFS-Server共享192.168.24.80rpcbind、nfs-utils
Web-Server节点1192.168.24.100rpcbind、nfs-utils、httpd
Web-Server节点2192.168.24.110rpcbind、nfs-utils、httpd

1、配置负载调度器(192.168.24.70、192.168.24.77相同)

systemctl stop firewalld.service
setenforce 0

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

vim /etc/sysctl.conf

net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens32.send_redirects = 0

sysctl -p

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

ipvsadm -C
ipvsadm -A -t 192.168.24.70:80 -s rr       #这里指定的虚拟IP为ens33网卡ip,重启keepliaved后会自动绑定虚拟网卡
ipvsadm -a -t 192.168.24.70:80 -r 192.168.24.100:80 -g
ipvsadm -a -t 192.168.24.70:80 -r 192.168.24.110:80 -g
ipvsadm

ipvsadm -l

2、部署NFS共享服务器(192.168.24.80)

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

yum -y install nfs-utils rpcbind

systemctl start rpcbind.service
systemctl start nfs.service

systemctl enable nfs.service
systemctl enable rpcbind.service

mkdir /csgo/wj1
mkdir /csgo/wj2

chmod 777 /opt/wj1 
chmod 777 /opt/wj2

vim /etc/exports
/opt/wj1 192.168.24.0/24(rw,sync)
/opt/wj2 192.168.24.0/24(rw,sync)

exportfs -rv

3、配置节点服务器

两台相同(192.168.24.100、192.168.24.110)

systemctl stop firewalld
setenforce 0

yum -y install httpd
systemctl start httpd

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

service network restart 或 systemctl restart network
ifup lo:0
ifconfig lo:0

vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

sysctl -p

Web-Server1(192.168.24.100)

showmount -e 192.168.24.80
mount.nfs 192.168.24.80:/csgo/wj1 /var/www/html
echo 'this is wj1 web!' > /var/www/html/index.html

Web-Server2(192.168.24.110)

mount.nfs 192.168.24.80:/csgo/wj2/var/www/html
echo 'this is wj2 web!' > /var/www/html/index.html

4、配置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_strict:严格遵守VRRP协议。下列情况将会阻止启动Keepalived:1. 没有VIP地址。2. 单播邻居。3. 在VRRP版本2中有IPv6地址。

#vrrp_strict						#加注释

}

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

###20行修改,指定热备状态,主为MASTER,备为BACKUP

state MASTER


###21行修改,指定承载vip地址的物理接口

interface ens32

###22行,主备都要一样 virtual_router_id (66)

###23行修改,指定优先级,数值越大优先级越高,主为100,备为99

priority 100
advert_int 1					#通告间隔秒数(心跳频率)
authentication {				#定义认证信息,每个热备组保持一致
auth_type PASS				    #认证类型

###27行修改,指定验证密码,主备服务器保持一致

auth_pass 1111
}

virtual_ipaddress {				#指定群集vip地址
192.168.24.188
}
}

###34行修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数

virtual_server 192.168.24.188 80 {
delay_loop 6					#健康检查的间隔时间(秒)
lb_algo rr						#指定调度算法,轮询(rr)

###37行修改,指定群集工作模式,直接路由(DR)

lb_kind DR
persistence_timeout 50			#连接保持时间(秒)
protocol TCP					#应用服务采用的是 TCP协议

###41行修改,指定第一个Web节点的地址、端口

real_server 192.168.24.100 80 {
weight 1						#节点的权重


###43行删除,添加以下健康检查方式

	    TCP_CHECK {
		connect_port 80			#添加检查的目标端口
		connect_timeout 3		#添加连接超时(秒)
		nb_get_retry 3			#添加重试次数
		delay_before_retry 4	#添加重试间隔
	}
}

real_server 192.168.24.100 80 {		#添加第二个 Web节点的地址、端口
    weight 1
    TCP_CHECK {
		connect_port 80
		connect_timeout 3
		nb_get_retry 3
		delay_before_retry 4
	}
}
}


###删除后面多余的配置

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

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

5、客户机访问

访问192.168.24.188,隔一段时间进行刷新,轮询显示

将主调度服务器keepalived服务关闭,再次验证

systemctl stop keepalived

非抢占模式需要在两个配置文件里面都修改为BACKUP
;然后必须配置nopreempt。

Nginx的Keepalived配置

先写一个脚本

在这里插入图片描述

修改第一台nginx的配置文件:

在这里插入图片描述

第二台nginx的配置文件:

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

keepalived脑裂的产生和解决方案

当两台高可用服务器在指定的时间内,无法互相检测到对方心跳而各自启动故障转移功能,取得了资源以及服务的所有权,而此时的两台高可用服务器对都还活着并作正常运行,这样就会导致同一个服务在两端同时启动而发生冲突的严重问题,最严重的就是两台主机同时占用一个VIP的地址(类似双端导入概念),当用户写入数据的时候可能会分别写入到两端,这样可能会导致服务器两端的数据不一致或造成数据的丢失,这种情况就称为裂脑

解决方案

  • 关闭主服务器的Keepalived

  • 启用磁盘锁。正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了“智能”锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了。

脑裂产生的原因

  • 主服务器和备服务器之间的通信链路断了;备服务器收不到主服务器发送过来的vrrp报文;那么备服务器会以为主服务器已经挂掉,将自己提升成主服务器去生成VIP地址;但是实际上主服务器还在运行;所以这种情况称为脑裂

脑裂的预防方案

  • 在主服务器和备服务器之间多加几条通信链路
  • 通过脚本去探测主和备之间的通信链路;如果链路断开就关闭主的Keepalivd,让备服务器的Keepalived去运行

如何健康检查调度器和节点服务器?

  • LVS基于内核,系统在调度器就在
  • TCP端口检查节点服务器和HTTP GET状态请求

面试问题

1)Keepalived通过过什么判断哪台主机为主服务器?

  • Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器。
    然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务器。

2)keepalived的抢占模式与非抢占模式:

  • 抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP
  • 非抢占模式配置俩节点state必须为bakcup,且必须配置nopreempt。
    注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了。

3)怎么生成VIP

  • 主服务器(Mster)通过IP命令生成VIP地址

4)怎么故障切换?

  • 主服务器器会定时的向备服务器发送vrrp报文;当备服务器在超时时间内接收不到主服务器发送来的vrrp报文的时候,会抢占master,然后生成 VIP地址

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[nlp] OPT与GPT-2的差异

Meta AI 开源1750亿参数大模型- OPT,FlagAI一键调用! - 知乎简介Meta AI 开源 OPT系列模型,其中最大模型1750 亿参数(需申请访问权限)媲美 GPT-3。OPT系列模型包括了多组不同参数规模的模型权重,如图: OPT开源了一系列大模型,但是实际调用这些模型有很高的技术门槛。为…

PortSwigger web缓存中毒(Cache Poisoning)

一、什么web缓存中毒? Web缓存中毒(Web Cache Poisoning)是一种攻击技术,攻击者通过操纵Web应用程序的缓存系统,将恶意或欺骗性内容注入到合法的缓存中,以欺骗用户或绕过安全控制。 Web缓存中毒的原理是利用…

scala

面向对象 Scala 的面向对象思想和Java 的面向对象思想和概念是一致的。 Scala 中语法和 Java 不同,补充了更多的功能。 6.1类和对象详解 6.1.1组成结构 构造函数: 在创建对象的时候给属性赋值 成员变量: 成员方法(函数) 局部变量 代码块 6.1.2构造器 每个…

【宝塔建站】Ubuntu下使用宝塔面板一键搭建Z-Blog个人博客

文章目录 1.前言2.网站搭建2.1. 网页下载和安装2.2.网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测试5.结语 1.前言 Ubuntu系统作…

【深度学习】pytorch pth模型转为onnx模型后出现冗余节点“identity”,onnx模型的冗余节点“identity”

情況描述 onnx模型的冗余节点“identity”如下图。 解决方式 首先,确保您已经安装了onnx-simplifier库: pip install onnx-simplifier然后,您可以按照以下方式使用onnx-simplifier库: import onnx from onnxsim import simp…

STM32F407软件模拟I2C实现MPU6050通讯(CUBEIDE)

STM32F407软件模拟I2C实现MPU6050通讯(CUBEIDE) 文章目录 STM32F407软件模拟I2C实现MPU6050通讯(CUBEIDE)模拟I2C读写的实现mpu6050_iic.cmpu6050_iic.h代码分析 复位,读取温度,角度等函数封装mpu6050.cmpu…

QT学习07:五种按钮控件

文章首发于我的个人博客:欢迎大佬们来逛逛 文章目录 抽象类:QAbstractButtonQPushButtonQToolButtonQCommandLinkButtonQRadioButtonQCheckBoxQButtonGroup 抽象类:QAbstractButton 是所有按钮类的祖先。 QAbstractButton的信号&#xff1a…

深入理解CSS字符转义行为

深入理解CSS字符转义行为 深入理解CSS字符转义行为 前言为什么要转义&#xff1f;CSS 转义什么是合法css的表达式 左半部分右半部分 练习参考链接 前言 在日常的开发中&#xff0c;我们经常写css。比如常见的按钮: <button class"btn"></button>&am…

【MySQL】 IS NOT NULL 和 != NULL 的区别?

背景 最近在开发小伙伴的需求&#xff0c;遇到了一个数据库统计的问题&#xff0c; is not null 结果正确 &#xff01;null 结果就不对&#xff0c;然后就激发了获取真理的想法&#xff0c;那必须的查查 咋回事嘞&#xff1f; 开整 在用MySQL的过程中&#xff0c;你是否存…

大学物理(上)-期末知识点结合习题复习(4)——质点运动学-动能定理 力做功 保守力与非保守力 势能 机械能守恒定律 完全弹性碰撞

目录 1.力做功 恒力作用下的功 变力的功 2.动能定理 3.保守力与非保守力 4.势能 引力的功与弹力的功 引力势能与弹性势能 5.保守力做功与势能的关系 6.机械能守恒定律 7.完全弹性碰撞 题1 题目描述 题解 题2 题目描述 题解 1.力做功 物体在力作用下移动做功…

AWS CodeWhisperer 简单介绍

一、何为AWS CodeWhisperer Amazon CodeWhisperer能够理解以自然语言&#xff08;英语&#xff09;编写的注释&#xff0c;并能实时生成多条代码建议&#xff0c; 以此提高开发人员生产力。 二、主要功能 Amazon CodeWhisperer 的主要功能&#xff0c;包括代码生成、引用追踪…

36.SpringBoot实用篇—运维

目录 一、实用篇—运维。 &#xff08;1&#xff09;程序打包与运行&#xff08;Windows版&#xff09;。 &#xff08;2&#xff09;spring-boot-maven-plugin插件作用。 &#xff08;3&#xff09;程序打包与运行&#xff08;Linux版&#xff09;。 &#xff08;4&#…

chatgpt赋能python:Python中如何处理多个输入

Python中如何处理多个输入 在编写Python程序时&#xff0c;我们经常需要从用户那里获取多个输入来执行某些操作。本文将介绍Python中的各种方法来处理多个输入。 从终端获取多个输入 Python中最简单的方式是从终端获取多个输入。下面是一个基本的例子&#xff1a; input_st…

SpringSecurity实现前后端分离登录token认证详解

目录 1. SpringSecurity概述 1.1 权限框架 1.1.1 Apache Shiro 1.1.2 SpringSecurity 1.1.3 权限框架的选择 1.2 授权和认证 1.3 SpringSecurity的功能 2.SpringSecurity 实战 2.1 引入SpringSecurity 2.2 认证 2.2.1 登录校验流程 2.2.2 SpringSecurity完整流程 2.2.…

Splashtop 与 Pax8 合作为 MSP 提供简化的远程支持解决方案

2023年4月27日 科罗拉多州丹佛 Pax8 是一个行业领先的云商务市场&#xff0c;该公司今天宣布将通过 Pax8 市场在全球推出其全新运营供应商 Splashtop。Splashtop 的远程访问、支持以及端点监控和管理解决方案极具成本效益&#xff0c;而且功能强大&#xff0c;可以助力托管服务…

002、体系结构之TiDB Server

TiDB Server 1、TiDB总览1.1、TiDB Server架构1.2、TiDB Server 主要功能&#xff1a; 2、SQL语句处理语句的解析和编译SQL层协议层上下文解析层逻辑优化器物理优化器本地执行器分布式执行器 3、如何将表的数据转成kv形式4、在线DDL相关模块5、GC机制与相关模块6、TiDB Server …

你真的会写软件测试简历吗?为什么面试约不到,测试老鸟的建议...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 写好一份简历的三…

Frida技术—逆向开发的屠龙刀

简介 Frida是一种基于JavaScript的动态分析工具&#xff0c;可以用于逆向开发、应用程序的安全测试、反欺诈技术等领域。Frida主要用于在已安装的应用程序上运行自己的JavaScript代码&#xff0c;从而进行动态分析、调试、修改等操作&#xff0c;能够绕过应用程序的安全措施&a…

mac下部署和访问 Kubernetes 仪表板(Dashboard)

简介 Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中&#xff0c;也可以对容器应用排错&#xff0c;还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览信息&#xff0c;也可以创建或者修改 Kub…

QT--配置Opencv

提示&#xff1a;本文为学习记录&#xff0c;若有疑问&#xff0c;请及时联系作者。 文章目录 前言一、下载已编译的opencv1..解压2..path路径 二、使用步骤1..pro文件2..h文件 总结 前言 只做第一个我&#xff0c;不做第二个谁。 一、下载已编译的opencv 适用于mingw编译器…
最新文章