Keepalived+LVS高可用集群

2023-09-15 23:23:45

目录

一、keepalived介绍:

二、keepalived工具介绍:

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

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

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

三、Keepalived体系主要模块:

四、keepalived脑裂及解决办法:

  1、Keepalive脑裂:

  2.脑裂原因:

  3.脑裂应对策略:

五、keepalived+LVS 高可用部署示例:

 1.配置负载调度器(192.168.88.100):

  2.配置负载调度器(192.168.88.100):

  3.配置web服务器:


一、keepalived介绍:

    keepalived 软件起初是专为 LVS 负载均衡软件设计的,用来管理并监控 LVS集群中各个服务节点的状态,后来又加入了可以实现高可用的 VRRP 功能。因此,keepalived 除了能够管理 LVS集群外,还可以为其他服务(例如:Nginx、Haproxy、MySQL等)实现高可用。

二、keepalived工具介绍:

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

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

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

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

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

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

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

三、Keepalived体系主要模块:

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

  1. core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
  2. vrrp模块:是来实现VRRP协议的。
  3. check模块:负责健康检查,常见的方式有端口检查及URL检查。

四、keepalived脑裂及解决办法:

  1、Keepalive脑裂:

  主备调度器通过内网交换机连接,如果交换机挂了,则此时主调度器仍存活,但备份调度器收不到主调度器的VRRP信息,备调度器就会工作,两台调度器就会同时工作,出现脑裂现象。

  主备调度器同时工作,如果web是无状态应用,那么客户端无论从哪一个调度器进行访问,页面内容相同。但如果是有状态应用,则两台调度器同时工作,会导致客户端显示的页面资源不一致。

  2.脑裂原因:

  • 高可用服务器对之间心跳线链路发生故障,导致无法正常通信。如心跳线坏了(包括断了,老化)
  • 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)
  • 因心跳线间连接的设备故障(网卡及交换机)
  • 因仲裁的机器出问题(采用仲裁的方案)
  • 高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输
  • Keepalived配置里同一 VRRP实例如果 virtual_router_id两端参数配置不一致也会导致裂脑问题发生。
  • vrrp实例名字不一致、优先级一致。

  3.脑裂应对策略:

  • 主备调度器多连一条线,即使交换机挂了,这两个还可以通信。
  • 通过第三方监控软件,当发现两台调度器同时工作,则杀掉主调度器。
  • 自己写一个脚本,例如crontab和while死循环执行,当监控到备调度器工作了,就杀掉主调度器的keepalived服务。

五、keepalived+LVS 高可用部署示例:

  当主服务器宕机或服务出现问题时,备服务器抢占转发

 1.配置负载调度器(192.168.88.100):

1.#关闭防火墙
systemctl disable --now firewalld
setenforce 0

2.yum安装ipvsadm和keepalived
yum install ipvsadm keepalived.x86_64  -y


3.加载模块
modprobe ipvsadm
cat /proc/net/ip_vs   #查看ip_vs版本信息

4.调整 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    #刷新加载

5.编写keepalived配置文件:

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 123456
    }
    virtual_ipaddress {				#指定群集vip地址
        192.168.10.200
    }
}
 
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.10.200 80 {
    delay_loop 6					#健康检查的间隔时间(秒)
    lb_algo rr						#指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
    persistence_timeout 0			#连接保持时间(秒)  修改为0以便查看效果
    protocol TCP					#应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
    real_server 192.168.10.133 80 {
        weight 1					#节点的权重
--45行--删除,添加以下健康检查方式		
        TCP_CHECK {
			connect_port 80			#添加检查的目标端口
			connect_timeout 3		#添加连接超时(秒)
			nb_get_retry 3			#添加重试次数
			delay_before_retry 3	#添加重试间隔
		}
	}
 
	real_server 192.168.10.134 80 {		#添加第二个 Web节点的地址、端口
        weight 1
        TCP_CHECK {
			connect_port 80
			connect_timeout 3
			nb_get_retry 3
			delay_before_retry 3
		}
	}
##删除后面多余的配置##
}

6.启动服务:
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
systemctl restart keepalived

  2.配置负载调度器(192.168.88.100):

把keepalived.conf文件远程拷贝过来,更改备服务器参数

scp keepalived.conf 192.168.88.102:`pwd`
 ## 在master主机使用scp  注意我这里是相对路径

     notification_email_from Alexandre.Cassen@firewall.loc
     10    smtp_server 127.0.0.1
     11    smtp_connect_timeout 30
     12    router_id LVS_02         #更改id
     13    vrrp_skip_check_adv_addr
     14    #vrrp_strict
     15    vrrp_garp_interval 0
     16    vrrp_gna_interval 0
     17 }
     18
     19 vrrp_instance VI_1 {
     20     state BACKUP           #备服务器为backup
     21     interface ens33
     22     virtual_router_id 51
     23     priority 90             #优先级90
     24     advert_int 1
     25     authentication {
     26         auth_type PASS
     27         auth_pass 1111
     28     }

 

  3.配置web服务器:

1. #关闭防火墙
systemctl stop firewalld
setenforce 0
 
2. #配置web服务器网页,自定

 
4. #配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.88.200
NETMASK=255.255.255.255
 
5. #重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0
 
6. #设置路由
route add -host 192.168.88.200 dev lo:0
route -n
 
7. #调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
 
8. #刷新proc参数
sysctl -p

两台配置一样。。。。。。。

想要快速测试调度结果,需要关闭web服务的长连接

4.测试:

更多推荐

中外人工智能专家共话大语言模型与 AI 创新

文章目录一、前言二、主要内容三、总结🍉CSDN叶庭云:https://yetingyun.blog.csdn.net/一、前言智源社区活动,中外人工智能专家共话大语言模型与AI创新。对谈书目:《大模型时代》,龙志勇、黄雯著,中译出版社2023年5月出版。《为什么伟大不能被计划》,[美]肯尼斯·斯坦利、[美]乔尔·雷曼

【CS324】LLM(大模型的能力、数据、架构、分布式训练、微调等)

note本文是斯坦福大学CS324课程的学习笔记,同时参考了一些LLM相关资料文章目录note一、引言二、大模型的能力1.从语言模型到任务模型2.任务评估三、大模型的有害性四、大模型的数据五、law问题六、模型架构篇1.tokenization2.模型架构(1)onlyencoder(2)onlydecoder(3)e

猫头虎博主第5️⃣期赠书活动:《Java官方编程手册(第12版·Java 17)套装上下册》

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🦄博客首页——🐅🐾猫头虎的博客🎐🐳《面试题大全专栏》🦕文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》🐾学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》🐅学会Gol

【Java 基础篇】自如应对文本数据:Java缓冲字符流详解

Java提供了许多用于读写文本文件的类,其中缓冲字符流(BufferedCharacterStream)是一种非常常用且高效的方式。本篇博客将详细介绍Java缓冲字符流的使用,包括什么是缓冲字符流、为什么需要它们、如何创建和使用缓冲字符流、以及一些常见的使用场景和注意事项。什么是缓冲字符流?在了解缓冲字符流之前,我们需

Java下部笔记

目录一.双列集合1.Map2.Map的遍历方式3.可变参数4.Collection中的默认方法5.不可变集合(map不会)二.Stream流1.获取stream流2.中间方法3.stream流的收集操作4.方法引用1.引用静态方法2.引用成员方法3.引用构造方法4.使用类名引用成员方法5.引用数组的构造方法三.异常四.

【Java 基础篇】优雅处理文本数据:Java字符流详解

当涉及字符流时,Java提供了一组类来处理字符数据的输入和输出。字符流比字节流更适合处理文本文件,因为它们可以正确处理字符编码,而不仅仅是字节。在本篇博客中,我们将详细介绍Java字符流的各个方面,包括基本的字符输入输出,字符编码,字符流的使用注意事项以及一些高级话题。1.什么是字符流?字符流是用于处理字符数据的Jav

Java中的异常基础知识

目录什么是异常?1.算术异常2.数组越界异常3.空指针异常4.输入不匹配异常Java异常体系异常的处理防御式编程:事后认错异常处理流程自定义异常什么是异常?在Java中,将程序执行过程中发生的不正常行为称为异常1.算术异常publicstaticvoidmain(String[]args){System.out.pri

数据结构Map-Set和哈希表

目录概念模型MapMap的常用方法对于Map的总结SetSet的常见方法关于Set的总结哈希表概念冲突概念哈希函数设计原则常见的哈希函数1.直接定制法(常用)2.除留余数法(常用)3.平方取中法4.折叠法5.随机数法6.数学分析法冲突避免-负载因子调节冲突-解决闭散列线性探测二次探测开散列/哈希桶三个例题理解Map和S

如何在JavaScript中实现链式调用(chaining)?

聚沙成塔·每天进步一点点⭐专栏简介⭐JavaScript中的链式调用⭐示例⭐写在最后⭐专栏简介前端入门之旅:探索Web开发的奇妙世界记得点击上方或者右侧链接订阅本专栏哦几何带你启航前端之旅欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发

Linux入门教程||Linux 文件与目录管理

我们知道Linux的目录结构为树状结构,最顶级的目录为根目录/。其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。在开始本教程前我们需要先知道什么是绝对路径与相对路径。绝对路径:路径的写法,由根目录/写起,例如:/usr/share/doc这个目录。相对路径:路径的写法,不是由/写起,例如由/usr/sh

华为云云耀云服务器L实例评测|服务器反挖矿防护指南

前言本文为华为云云耀云服务器L实例测评文章,测评内容是云耀云服务器L实例反挖矿防护指南系统配置:2核2G3MCentOS7.9之前的文章中『一文教你如何防御数据库恶意攻击』,我们讲到黑客如何通过攻击数据库来获取权限,以及我们需要如何处理防护云耀云服务器L实例接下来我们将要讲述另外一种黑客攻击的手段——挖矿,本文将从黑客

热文推荐