高可用集群——keepalived

2024-04-19 16:04
文章标签 集群 可用 keepalived

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

心跳监测与漂移 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.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    

这篇关于高可用集群——keepalived的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/918007

相关文章

MySQL MHA集群详解(数据库高可用)

《MySQLMHA集群详解(数据库高可用)》MHA(MasterHighAvailability)是开源MySQL高可用管理工具,用于自动故障检测与转移,支持异步或半同步复制的MySQL主从架构,本... 目录mysql 高可用方案:MHA 详解与实战1. MHA 简介2. MHA 的组件组成(1)MHA

golang实现nacos获取配置和服务注册-支持集群详解

《golang实现nacos获取配置和服务注册-支持集群详解》文章介绍了如何在Go语言中使用Nacos获取配置和服务注册,支持集群初始化,客户端结构体中的IpAddresses可以配置多个地址,新客户... 目录golang nacos获取配置和服务注册-支持集群初始化客户端可选参数配置new一个客户端 支

MySQL集群高可用架构的两种使用小结

《MySQL集群高可用架构的两种使用小结》本文介绍了MySQL的两种高可用解决方案:组复制(MGR)和MasterHighAvailability(MHA),文中通过示例代码介绍的非常详细,对大家的学... 目录一、mysql高可用之组复制(MGR)1.1 组复制核心特性与优势1.2 组复制架构原理1.3

Docker + Redis 部署集群的实现步骤

《Docker+Redis部署集群的实现步骤》本文详细介绍了在三台服务器上部署高可用Redis集群的完整流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、环境准备1. 服务器规划(3 台服务器)2. 防火墙配置(三台服务器均执行)3. 安装 docke

springBoot (springCloud2025)集成redisCluster 集群的操作方法

《springBoot(springCloud2025)集成redisCluster集群的操作方法》文章介绍了如何使用SpringBoot集成RedisCluster集群,并详细说明了pom.xm... 目录pom.XMLapplication.yamlcluster配置类其他配置类连接池配置类Redis

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx