高可用集群——keepalived

news2024/12/24 2:32:17

目录

1 高可用的概念

2 心跳监测与漂移 IP 地址

3 Keepalived服务介绍

4 Keepalived故障切换转移原理介绍

5 Keepalived 实现 Nginx 的高可用集群

5.1 项目背景

5.2 项目环境

5.3 项目部署

5.3.1 web01\web02配置:

5.3.2nginx负载均衡配置

5.3.3 主调度服务器

5.3.4 从调度服务器

5.3.5 项目测试

6 Keepalived+LVS 实现 Nginx 集群

6.1 实验介绍

6.2 实验组网介绍

6.3 实验步骤

步骤1在LVS1和LVS2虚拟机上安装keepalived和ipvs

步骤2修改LVS1的配置文件

步骤 3 修改 LVS2 的配置文件

步骤 4 测试


1 高可用的概念

        高可用集群( High Availability Cluster, HA 集群),其中高可用的含义是最大限度地可以使用。从集群的名字上可以看出,此类集群实现的功能是保障用户的应用程序持久、不间断地提供服务。当应用程序出现故障或者系统硬件、网络出现故障时,应用可以自动、快速从一个节点切换到另一个节点,从而保证应用持续、不间断地对外提供服务,这就是高可用集群实现的功能

心跳监测与漂移 IP 地址

1 、心跳监测
        为了能实现负载均衡、提供高可用服务和执行错误恢复,集群系统提供了心跳监测技术。心跳监测是通过心跳线实现的,可以做心跳线的设备有 RS232 串口线,也可以用独立的一块网卡来跑心跳,还可以共享磁盘阵列等。心跳线的数量应该为集群节点数减 I 。需要注意的是,如果通过网卡来做心跳,每个节点需要两块网卡。其中,一块作为私有网络直接连接到对方机器相应的网卡,用来监测对方心跳。另外一块连接到公共网络对外提供服务,同时心跳网卡和服务网卡的 IP地址尽量不要在一个网段内。心跳监控的效率直接影响故障切换时间的长短,集群系统正是通过心跳技术保持节点间内部通信的有效性 。
2 、漂移 IP 地址
        在集群系统中,除了每个服务节点自身的真实 IP 地址外,还存在一个漂移 1P 地址。为什么说是漂移 IP地址呢?因为这个 IP 地址并不固定。例如,在两个节点的双机热备中,正常状态下,这个漂移 1P 地址位于主节点上,当主节点出现故障后,漂移 IP 地址自动切换到备用节点。因此,为了保证服务的不间断性,在集群系统中,对外提供的服务 IP 地址一定要是这个漂移 IP 地址。虽然节点本身的 IP 地址也能对外提供服务,但是当此节点失效后,服务切换到了另一个节点,连接服务的 IP 地址仍然是故障节点的 IP地址,此时,服务就随之中断。

3 Keepalived服务介绍

    Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,后来有加入VRRP的功能,VRRPVirtual Router Redundancy protocol(虚拟路由器冗余协议)的缩写VRRP出现的目的就是为了解决静态路由器出现的单点故障问题,它能偶保证网络的不间断、稳定的运行。所有,keepalived一方面具有LVS cluster nodes healthchecks功能,另一方面也具有LVS directors faiover功能。

4 Keepalived故障切换转移原理介绍

        Keepalived dirctors之间的故障切换转移,是通过 VRRP 协议来实现的。在keepalived directors 正常工作时,主 Directors 节点会不断的向备节点广播心跳信息,用以告诉备节 点自己还活着,当主节点发生故障时,备节点就无法继续检测到主节点的心跳,进而调用自身的接管程序,接管主节点的IP 资源及服务。而当主节点恢复故障时,备节点会释放主节点故障时,备节点会释放主节点故障时自身接管的IP 资源及服务,恢复到原来的自身的备用角色。
        
        vrrp协议,英文名称: Virtual Router Redundancy Protocol ,中文名称:虚拟路由器冗余协议。 vrrp 出现就是为了解决静态路由的单点故障,vrrp 是通过一种竞选协议机制来将路由任务交给某台 vrrp 路由器。
MASTER BACKUP
        在一个VRRP 虚拟路由器中,有多台物理的 VRRP 路由器,但是这多台物理的机器并不同时工作,而是由一台称为MASTER 的负责路由工作,其他的都是 BACKUP MASTER 并非一成不变, VRRP 协议让每个VRRP 路由器参与竞选,最终获胜的就是 MASTER MASTER 有一些特权,比如拥有虚拟路由器的 IP 地址,我们的主机就是用这个IP 地址作为静态路由的。拥有特权的 MASTER 要负责转发发送给网关地址的包和响应ARP 请求。
        VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过 IP 多播( multicast )包(多播地址224.0.0.18 )形式发送的。虚拟路由器有 VRID (范围 0-255 )和一组 IP 地址组成,对外表现为一个周知的MAC 地址: 00-00-5E-00-01{VRID} 。所有,在一个虚拟路由器中,不管谁是 MASTER ,对外都是相同的MAC IP (称之为 VIP )。客户端主机并不需要因为 MASTER 的改变而修改自己的路由配置,对他们来说,这周主从的切换时透明的。
        在一个虚拟路由器中,只有作为MASTER VRRP 路由器会一直发送 VRRP 广告包( VRRP
Advertisement message ), BACKUP 不会抢占 MASTER ,除非它的优先级( priority )更高。当
MASTER 不可用时( BACKUP 收不到广告包),多台 BACKUP 中优先级最高的这台会被抢占为 MASTER
keepalived 主要特点如下所示。
        1) Keepalived LVS 的扩展项目,因此它们之间具备良好的兼容性。 这点应该是 Keepalived 部署比其他类似工具更简洁的原因,尤其是相对于Heartbeat 而言, Heartbeat 作为 HA 软件,其复杂的配置流程让许多人望而生畏。
        2)通过对服务器池对象的健康检查,实现对失效机器 / 服务的故障隔离。
        3)负载均衡器之间的失败切换,是通过 VRRPv2 Virtual Router Redundancy Protocol stack 实现的,VRRP 当初被设计出来就是为了解决静态路由器的单点故障问题。
        4)通过实际的线上项目,我们可以得知, iptables 的启用是不会影响 Keepalived 的运行的。 但为了更好 的性能,我们通常会将整套系统内所有主机的iptables 都停用。
        5) Keepalived 产生的 VIP 就是整个系统对外的 IP ,如果最外端的防火墙采用的是路由模式,那就映射此内网IP 为公网 IP

5 Keepalived 实现 Nginx 的高可用集群

5.1 项目背景

        keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软件。采用nginx+keepalived,它是一个高性能的服务器高可用或者热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实现Web服务器端的高可用。使用keepalived可以保证nginx的高可用,他能监控nginx的健康状态,当nginx出现宕机时自动主备切换。

5.2 项目环境

服务器名称IP用途
Nginx_Master192.168.186.100提供负载均衡
Nginx_Backup192.168.186.101提供负载均衡
LVS-DR-VIP192.168.186.102网站的VIP地址
Web1服务器192.168.186.103提供Web服务
Web2服务器192.168.186.104提供Web服务

5.3 项目部署

5.3.1 web01\web02配置:

提供httpd服务
#yum install httpd -y //安装httpd服务
[root@web1 ~]# echo "this is first web" > /var/www/html/index.html
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# systemctl enable httpd
[root@web2 ~]# echo "this is second web" > /var/www/html/index.html
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# systemctl enable httpd

5.3.2nginx负载均衡配置

两台nginx做同样配置

1、安装nginx
[root@Nginx_Backup ~]# yum install nginx -y
2、配置nginx反向代理
[root@Nginx_Master ~]# cd /etc/nginx/conf.d/
[root@Nginx_Master conf.d]# vim web.conf

upstream websrvs{
        server 192.168.186.103:80 weight=1;
        server 192.168.186.104:80 weight=1;
}

server{
        location / {
                proxy_pass http://websrvs;
                index index.html;
        }
} 

5.3.3 主调度服务器

1、安装keepalived
[root@Nginx_Master conf.d]# yum install keepalived -y

2、开发检测nginx存活的shell脚本
[root@Nginx_Master conf.d]# vim /etc/keepalived/check_nginx.sh
#!/bin/bash
#代码一定注意空格,逻辑就是:如果nginx进程不存在则启动nginx,如果nginx无法启动则kill掉keepalived所有进程
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
        systemctl start nginx
        sleep 3
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ]
        then
                systemctl stop keepalived
        fi
fi

3、配置keepalived

 

 

5.3.4 从调度服务器

1、安装keepalived
[root@Nginx_Backup ~]# yum install keepalived -y

2、开发检测nginx存活的shell脚本
[root@Nginx_Backup ~]# vim /etc/keepalived/check_nginx.sh
#!/bin/bash
#代码一定注意空格,逻辑就是:如果nginx进程不存在则启动nginx,如果nginx无法启动则kill掉keepalived所有进程
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
        systemctl start nginx
        sleep 3
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ]
        then
                systemctl stop keepalived
        fi
fi
3、配置keepalived
state BACKUP //从服务器
priority 150 //优先级

 

 5.3.5 项目测试

启动主从调度的 nginx keepalived
[root@Nginx_Master ~]# systemctl restart nginx keepalived
[root@Nginx_Backup ~]# systemctl restart nginx keepalived

Master,Backup都正常,只有Master对外提供服务
[root@Nginx_Master ~]# systemctl restart nginx keepalived
[root@Nginx_Master ~]# ip a | grep "192.168.186.102"
    inet 192.168.186.102/32 scope global ens33

Master宕机,Backup接替Master对外提供服务

#模拟Master的keepalived服务器停止
[root@Nginx_Master ~]# systemctl stop keepalived 
#此时VIP在Backup上
[root@Nginx_Backup ~]# ip a | grep "192.168.186.102"
    inet 192.168.186.102/32 scope global ens33

Master恢复正常,Master继续提供服务,Backup停止服务  

#模拟Master的keepalived服务恢复正常
[root@Nginx_Master ~]# systemctl restart keepalived 
#此时VIP在Master上
[root@Nginx_Master ~]# ip a | grep "192.168.186.102"
    inet 192.168.186.102/32 scope global ens33

 Master上的nginx服务停止,尝试重新启动nginx

[root@Nginx_Master ~]# systemctl stop nginx
[root@Nginx_Master ~]# systemctl status nginx
	nginx启动正常,keepalived不做切换

6 Keepalived+LVS 实现 Nginx 集群

6.1 实验介绍

        本实验将使用 Keepalived 为 LVS 提供高可用配置,同时 LVS 为后端的 Nginx1 和 Nginx2 提供负载均衡,最终通过 Keepalived+LVS 实现 Nginx 集群。

6.2 实验组网介绍

        LVS1 和 LVS2 通过 keepalived 组成高可用集群,同时向后端的 Nginx1 和 Nginx2 提供负载均衡。

服务器名称IP
192.168.186.100LVS1
192.168.186.101Nginx1
192.168.186.102Nginx2
192.168.186.103LVS2
192.168.186.104Client

6.3 实验步骤

步骤1在LVS1和LVS2虚拟机上安装keepalived和ipvs

使用以下命令在LVS1和LVS2虚拟机上安装keepalived和ipvs

[root@LVS2 ~]# yum install -y keepalived ipvsadm

步骤2修改LVS1的配置文件

将LVS1的配置keepalived配置文件修改为以下内容:

[root@LVS1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
      router_id LVS1	# 设置lvs的id,在一个网络应该是唯一的
}

vrrp_instance Nginx {
    state MASTER	# 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens33	# 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
    mcast_src_ip 20.0.0.1
    virtual_router_id 51	# 虚拟路由编号,主从要一直
    priority 255	 # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1	# 检查间隔,默认为1s(vrrp组播周期秒数)
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    	192.168.186.20/24	 # 定义虚拟ip(VIP),可多设,每行一个
    }
}

virtual_server 192.168.186.20 80 {
    delay_loop 6	 # 设置健康检查时间,单位为秒
    lb_algo rr	# 设置负载调度的算法为rr
    lb_kind DR	 # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式
    persistence_timeout 50	 # 同一IP 50秒内的请求都发到同个real server
    protocol TCP

    real_server 192.168.186.101 80 {	# 指定real server1的ip地址
	 weight 1	# 配置节点权值,数值越大权重越高
	 TCP_CHECK {
	 connect_timeout 3
	 retry 3
	 delay_before_retry 3
 	}
 }

    real_server 192.168.186.102 80 {
         weight 2
         TCP_CHECK {
         connect_timeout 3
         retry 3
         delay_before_retry 3
        }
 }
}

步骤 3 修改 LVS2 的配置文件

将 LVS2 的配置 keepalived 配置文件修改为以下内容:

[root@LVS2 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   router_id LVS2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    mcasr_src_ip 20.0.0.2
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    	192.168.186.20/24
    }
}

virtual_server 192.168.186.20 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
   
   real_server 192.168.186.101 80 {
 	weight 1
 	TCP_CHECK {
	 connect_timeout 3
	 retry 3
	 delay_before_retry 3
 	}
 }

   real_server 192.168.186.102 80 {
        weight 2
        TCP_CHECK {
         connect_timeout 3
         retry 3
         delay_before_retry 3
        }
}

步骤 4 测试

配置完成两台 LVS 服务器后,,具体如下:

[root@LVS1 ~]# systemctl restart keepalived.service
[root@LVS2 ~]# systemctl status keepalived.service 
[root@LVS1 ~]# systemctl restart keepalived
[root@LVS1 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.186.20:80 rr
  -> 192.168.186.101:80           Route   1      0          0         
  -> 192.168.186.102:80           Route   2      0          0    

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

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

相关文章

全开源小狐狸Ai系统 小狐狸ai付费创作系统 ChatGPT智能机器人2.7.6免授权版

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 测试环境:Linux系统CentOS7.6、宝塔、PHP7.4、MySQL5.6,根目录public,伪静态thinkPHP,开启ssl证书 具有文章改写、广告营销文案、编程…

商务品牌解决方案企业网站模板 Bootstrap5

目录 一.前言 二.展示 三.下载链接 一.前言 这个网站包含以下内容: 导航栏:主页(Home)、关于(About)、服务(Services)、博客(Blog)等页面链接。主页部分…

基于Java+SpringBoot+Vue前后端分离仓库管理系统

基于JavaSpringBootVue前后端分离仓库管理系统 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统 &#…

【机器学习】《机器学习建模基础》笔记

文章目录 单元0 前言单元1 数学建模与机器学习学习目标(一)什么是模型(二)数学模型的分类(三)数学建模的一般步骤(四)机器学习的概念 【我选择这本书的理由】 这本书比较简单&#x…

Java八股文4

Linux篇 1.free命令-查看内存状态 free命令用于显示内存状态,它可以提供关于系统内存使用情况的详细信息。这个命令会显示出内存的使用情况,包括实体内存、虚拟的交换文件内存、共享内存区段,以及系统核心使用的缓冲区等。 其中,参…

无源光网络(PON)技术的革命:PON模块的全面解析

PON(Passive Optical Network,无源光网络)模块是一种高性能的光模块,用于PON系统中,符合ITU-T G.984.2标准和多源协议(MSA)。它通过不同的波长在OLT(光线路终端)和ONT&am…

《中学科技》是什么级别的刊物?如何投稿?

《中学科技》是什么级别的刊物?如何投稿? 《中学科技》创刊于1976年,由上海世纪出版(集团)有限公司主管,上海科技教育出版社有限公司主办的省级学术期刊,《中学科技》以传播科技知识、启迪智慧…

2024-9.python文件操作

文件操作 引言 到目前为止,我们做的一切操作,都是在内存里进行的,这样会有什么问题吗?如果一旦断电或发生意外关机了,那么你辛勤的工作成果将瞬间消失。是不是感觉事还挺大的呢?现在你是否感觉你的编程技…

集合-CollectionListSet

Collection体系的特点、使用场景总结 如果希望元素可以重复,又有索引,索引查询要快? 用ArrayList集合, 基于数组的。(用的最多) 如果希望元素可以重复,又有索引,增删首尾操作快? 用LinkedList集合, 基于链表的。 如果希望增…

64B/66B编码 自定义PHY层设计

一、前言 之前的一篇文章讲解了64B/66B的基本原理,本篇在基于64B/66B GT Transceiver的基础之上设计自定义PHY。基本框图如下。 二、GT Mdule GT Module就按照4个GT CHannel共享一个GT COMMON进行设置,如下图。要将例子工程中的GT COMMON取出&#xff…

win10 鼠标箭头自己乱动解决方案

我这里只说我碰到的然后我的解决方案,不一定对其他问题有效; 1. 首先拔掉鼠标线查看鼠标箭头是否仍然在乱动,如果是则非鼠标问题,如果不再乱动则是鼠标的问题;验证非鼠标问题; 2. 因为鼠标乱动跟鼠标无关…

Transformer杀疯了!王炸成果荣登Nature,实现无限上下文长度

继DeepMind的新设计MoD大幅提升了 Transformer 效率后,谷歌又双叒开始爆改了! 与之前荣登Nature子刊的life2vec不同,谷歌的新成果Infini-attention机制(无限注意力)将压缩内存引入到传统的注意机制中,并在…

python--4函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归、递归练习

学习目标: 函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归、 递归练习 学习内容: 函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归、 递归练习 …

CSS中position属性总结

CSS中position属性的总结 如果我的文章看不懂,不要犹豫,请直接看阮一峰大佬写的文章 https://www.ruanyifeng.com/blog/2019/11/css-position.html 1 干嘛用的 用来定位HTML元素位置的,通过top、bottom、right、left定位元素 分别有这些值&a…

3D模型格式转换工具HOOPS Exchange:3D CAD数据的快速导入与导出

在当今的工程设计领域中,快速且可靠地处理3D CAD数据是至关重要的。HOOPS Exchange SDK通过提供一组C软件库,为开发团队提供了实现这一目标的有效工具。 什么是HOOPS Exchange? HOOPS Exchange是一组C软件库,旨在为开发团队提供…

DNS服务器的管理与配置

目录 一、相关知识 域名空间 DNS服务器分类 域名解析过程 资源记录 二、安装DNS服务 安装bind软件包 DNS服务的启动与停止 配置主要名称服务器 主配置文件 从例子学起: (1)建立主配置文件named.conf (2)…

OpenHarmony网络协议通信c-ares [交叉编译]异步解析器库

简介 c-ares是异步解析器库,适用于需要无阻塞地执行 DNS 查询或需要并行执行多个 DNS 查询的应用程序。 下载安装 直接在OpenHarmony-SIG仓中搜索c-ares并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 将下载的c-ares库代码存在以下路径:…

上位机图像处理和嵌入式模块部署(树莓派4b实现固件主流程)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 软件开发一般有软件需求、架构设计和详细设计、软件测试这四个部分。软件需求和软件测试都比较好理解,前者是说要实现哪些功能&#xf…

【SpringBoot+VUE+ELEMENT 】前后端分离的管理系统的实现——基础功能(记录向)

一个前后端分离的实现。后端使用SpringBoot,前端使用Vue,后端标准的四层结构,前端是用的Element。 一、环境准备 1.安装node.js Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。 成功后cmd中运行 node -v npm -v 出现 对应的版本…

活动 | 华院计算与数学家一起走进世界轨道交通之都-中国株洲

4月17日,由株洲市人民政府主办、株洲高新区管委会承办,华院计算技术(上海)股份有限公司(以下简称“华院计算”)协办的“制造名城、院士同行,数学家走进株洲”活动在湖南株洲举行。 来自中国数学…