高可用集群——keepalived

目录

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

2 心跳监测与漂移 IP 地址

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

3 Keepalived服务介绍

    Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,后来有加入VRRP的功能,VRRP是Virtual 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.confupstream 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 -y2、开发检测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 ];thensystemctl start nginxsleep 3if [ `ps -C nginx --no-header |wc -l` -eq 0 ]thensystemctl stop keepalivedfi
fi3、配置keepalived

 

 

5.3.4 从调度服务器

1、安装keepalived
[root@Nginx_Backup ~]# yum install keepalived -y2、开发检测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 ];thensystemctl start nginxsleep 3if [ `ps -C nginx --no-header |wc -l` -eq 0 ]thensystemctl stop keepalivedfi
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 keepalivedMaster,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 nginxnginx启动正常,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 keepalivedglobal_defs {router_id LVS1	# 设置lvs的id,在一个网络应该是唯一的
}vrrp_instance Nginx {state MASTER	# 指定keepalived的角色,MASTER为主,BACKUP为备interface ens33	# 当前进行vrrp通讯的网络接口卡(当前centos的网卡)mcast_src_ip 20.0.0.1virtual_router_id 51	# 虚拟路由编号,主从要一直priority 255	 # 优先级,数值越大,获取处理请求的优先级越高advert_int 1	# 检查间隔,默认为1s(vrrp组播周期秒数)authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.186.20/24	 # 定义虚拟ip(VIP),可多设,每行一个}
}virtual_server 192.168.186.20 80 {delay_loop 6	 # 设置健康检查时间,单位为秒lb_algo rr	# 设置负载调度的算法为rrlb_kind DR	 # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式persistence_timeout 50	 # 同一IP 50秒内的请求都发到同个real serverprotocol TCPreal_server 192.168.186.101 80 {	# 指定real server1的ip地址weight 1	# 配置节点权值,数值越大权重越高TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 192.168.186.102 80 {weight 2TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}

步骤 3 修改 LVS2 的配置文件

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

[root@LVS2 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalivedglobal_defs {router_id LVS2
}vrrp_instance VI_1 {state BACKUPinterface ens33mcasr_src_ip 20.0.0.2virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.186.20/24}
}virtual_server 192.168.186.20 80 {delay_loop 6lb_algo rrlb_kind DRpersistence_timeout 50protocol TCPreal_server 192.168.186.101 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 192.168.186.102 80 {weight 2TCP_CHECK {connect_timeout 3retry 3delay_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.tpcf.cn/bicheng/619.html

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

相关文章

伪选择器和伪元素选择器

常用伪类 用来添加一些选择器的特殊效果 a:hover:鼠标滑过链接 a:link:未访问链接 a:visited:以访问链接 a:active:已选中链接 :nth-child(n):选择所有冒号前元素的父元素的第二个子元素 常用伪元素 用来添加一些选择器的特殊效…

[lesson43]继承的概念和意义

继承的概念和意义 类之间的组合关系 组合关系的特点 将其他类的对象作为当前类的成员使用当前类的对象与成员对象的生命期相同成员对象在用法上与普通对象完全一致 惊艳的继承 面相对象中的继承指类之间的父子关系 子类拥有父类的所有属性和行为子类就是一种特殊的父类子类…

【C语言】每日一题,快速提升(7)!

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 题目:X图形 示例: 输入: 5 //几行数输出: …

【LeetCode热题100】【图论】课程表

题目链接:207. 课程表 - 力扣(LeetCode) 先修课程,判断课程能不能修完,这是一个判断拓扑有序的问题,看看会不会成环 先建立有向图,记录每个顶点的入度,把入度为0的入队列 入度为0…

日志情况分析

日志是用来记录信息的,更多是方便于查看各种出错信息。时间、日志等级、日志内容、文件名称已经行号都会显示出来!日志等级是什么?就是当出问题时,根据问题成都列出等级 Info:常规消息 Debug:t调试信息 Waring:报警信息…

单臂路由实验

单臂路由是一种在单个物理接口上配置多个逻辑接口,以实现不同VLAN间通信的技术。它通过在路由器接口上划分子接口,每个子接口对应一个VLAN网段,从而实现了VLAN间的互联互通。单臂路由能够重新封装MAC地址,转换VLAN标签&#xff0c…

基于51单片机的简单风扇控制设计—调速、摇头

基于51单片机的风扇控制设计 (仿真+程序+原理图+设计报告) 功能介绍 具体功能: 1.步进电机模拟风速、摇头 2.按键可以控制风速、摇头; 3.数码管显示风速档位; 4.LED作摇头提示灯…

<个人笔记>基础算法模板题

1.基础算法 &#xff08;1&#xff09;一维前缀和 #include<iostream>using namespace std;const int N 1e510;int p[N],res[N]; int n,Q,l,r;int main() {cin >> n >> Q;for(int i 1;i<n;i){cin >> p[i];res[i] res[i - 1] p[i];}while(Q--)…

项目篇 | 图书管理系统 | 管理员模块 | 首页

项目篇 | 图书管理系统 | 管理员模块 | 首页 概述 首页的功能非常简单,仅为展示四个核心数据,没有交互逻辑。 函数简介 // admin.h void homepage(); // 首页homepage:功能页,首页,实现核心数据的展示首页 // 首页 void homepage() {book_management_listen

百度AI大会发布的APP Builder和Agent Builder有什么区别

百度在AI大会发布了三款AI工具&#xff0c;包括智能体开发工具AgentBuilder、AI原生应用开发工具AppBuilder、各种尺寸的模型定制工具ModelBuilder 有很多人就问&#xff0c;APP Builder和Agent Builder有什么不一样&#xff0c;怎么那么多builder? 你们就这么理解&#xff…

Java基础之冒泡排序、二分查找、封装

Java基础 1.冒泡排序 public static void main(String[] args) {/*TODO 定义数组的 冒泡排序*/int[] intAr {3, 2, 1, 5, 6, 4, 2, 1, 8};bubbleSort(intAr);System.out.println(getArrStr(intAr)); }public static int[] bubbleSort(int[] intArr) {/*冒泡排序&#xff1a;…

什么是Java中的异常处理机制?

Java中的异常处理机制是一种用于处理运行时错误的强大系统&#xff0c;它允许程序在遇到意外情况时能够优雅地恢复。异常处理是Java语言的一个重要特性&#xff0c;它提供了一种结构化的方法来处理错误条件&#xff0c;而不是让程序崩溃或产生不可预期的行为。 **异常的基本概…

云安全与网络安全:有什么区别?

云计算已经存在了一段时间&#xff0c;但某些术语的正确含义仍然存在混乱。一个例子是区分云安全与网络安全。 首先&#xff0c;让我们看一下网络安全一词 &#xff0c;以了解它的含义。然后&#xff0c;我们将将该术语与云安全进行比较&#xff0c;以了解两者在几个关键领域的…

nginx-ingress详解

一、ingress概述 1、概述 Kubernetes是一个拥有强大故障恢复功能的集群&#xff0c;当pod挂掉时&#xff0c;集群会重新创建一个pod出来&#xff0c;但是pod的IP也会随之发生变化&#xff0c;为了应对这种情况&#xff0c;引入了service&#xff0c;通过service的标签匹配&am…

Java项目引入log4j2

log4j2 单独使用 引入依赖 <dependencies><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.14.0</version></dependency><dependency><groupId>o…

了解 Python 底层的解释器 CPython 和 Python 的对象模型

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、CPython CPython 是 Python 编程语言的官方和最广泛使用的实现。它是用 C 语言编写的&#xff0c;因此得名 “CPython”。作为 Python 生态系统的核心&#xff0c;了解 CPython 的工作原理、主要特…

前端 - 基础 表单标签 - label 标签

# label 标签 其实不属于 表单标签名单经常和 表单标签 搭配使用。 # <label> 标签 为 input 元素 定义 标注&#xff08; 标签 &#xff09; 使用场景 # 其实说白&#xff0c;<label> 标签就是为了方便用户体验的,举例说明 就是说&#xff0c;如上示&am…

如何理解数据库事务

事务的概念起源于数据库系统的设计和实现。在计算机科学领域中&#xff0c;数据库系统被广泛用于存储和管理大量的数据&#xff0c;而事务的概念则是为了解决多用户并发访问数据库时可能出现的一系列问题。 事务的概念最早由 IBM 的科学家 Edgar F. Codd 在 1970 年提出。Codd…

如何在响应头中防治xss

在HTTP响应头中设置一些特定的安全策略可以帮助防止XSS&#xff08;跨站脚本&#xff09;攻击。以下是一些常用的HTTP响应头和它们的作用&#xff1a; Content-Security-Policy&#xff1a;这个响应头可以限制浏览器只加载和执行来自特定来源的脚本。例如&#xff0c;你可以设置…

力扣爆刷第123天之回溯五连刷

力扣爆刷第123天之回溯五连刷 文章目录 力扣爆刷第123天之回溯五连刷一、77. 组合二、216. 组合总和 III三、17. 电话号码的字母组合四、39. 组合总和五、40. 组合总和 II 一、77. 组合 题目链接&#xff1a;https://leetcode.cn/problems/combinations/description/ 思路&…