高可用集群——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.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    

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

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

相关文章

碳实践|手把手教你开展组织碳核算

一、背景介绍 政府间气候变化委员会 IPCC(Intergovernmental Panel on Climate Chang)是世界气象组织(WMO)及联合国环境规划署(UNEP)于1988年联合建立的政府间机构。 IPCC在1997年和2000年分别发布了《1996 年 IPCC 国家温室气体清单指南修订本》和《国家温室气体清单优良作法…

【氮化镓】栅极漏电对阈值电压和亚阈值摆幅影响建模

本文是一篇关于p-GaN门AlGaN/GaN高电子迁移率晶体管(HEMTs)的研究文章,发表于《应用物理杂志》(J. Appl. Phys.)2024年4月8日的期刊上。文章的标题为“Analysis and modeling of the influence of gate leakage curren…

什么是SRE?

什么是SRE? SRE,全称为Site Reliability Engineering,即网站可靠性工程,是一种职能角色,它融合了软件工程和系统管理的技能与实践,旨在通过软件和自动化的方式来提高系统的可靠性、稳定性和扩展性。以下是…

Zabbix自定义模板、邮件报警、自动发现与注册、proxy代理、SNMP监控

目录 自定义监控内容 1.明确需要执行的 linux 命令 2.创建 zabbix 的监控项配置文件,用于自定义 key 3.在服务端验证新建的监控项 在 Web 页面创建自定义监控项模板 1.创建模板 2.创建应用集(用于管理监控项的) 3.创建监控项 4.创建…

JEECG表格选中状态怎么去掉

官网代码(在取消选中状态的时候不生效) rowSelection() {return {onChange: (selectedRowKeys, selectedRows) > {console.log(selectedRowKeys: ${selectedRowKeys}, selectedRows: , selectedRows);},getCheckboxProps: record > ({props: {disa…

【基础】gcc-动态库和静态库的创建和使用-命令

目录 1 动态库的建立使用2 动态库封装过程2.1 编译动态库2.2 使用动态库2.3 命令参数说明 3 静态库封装过程3.1 静态库的封装3.2 静态库的使用 1 动态库的建立使用 首先建立一个头文件,和三个.cpp文件,目的是要把这些文件链接成动态库: 其中…

C#创建背景色渐变窗体的方法:创建特殊窗体

目录 1.让背景渐变色的理论基础 2.让背景渐变色的方法 3.一个实施例 (1)Form1.Designer.cs (2)Form1.cs (3)渐变的蓝色背景 在窗体设计时,可以通过设置窗体的BackColor属性来改变窗口的背…

Golang | Leetcode Golang题解之第35题搜索插入位置

题目&#xff1a; 题解&#xff1a; func searchInsert(nums []int, target int) int {n : len(nums)left, right : 0, n - 1ans : nfor left < right {mid : (right - left) >> 1 leftif target < nums[mid] {ans midright mid - 1} else {left mid 1}}retu…

【mac】【python】新建项目虚拟环境后,使用命令pip出现错误:zsh: command not found: pip

【mac】【python】新建项目虚拟环境后&#xff0c;使用命令pip出现错误&#xff1a;zsh: command not found: pip 问题描述&#xff1a; 拉取或者创建新的python项目时&#xff0c;为项目添加了新的解释器&#xff0c;创建啦虚拟环境&#xff0c;但是执行pip命令的时候找不到命…

倾斜摄影修模软件模方(ModelFun)4.1.0下载及安装教程

文章目录 一、模方(ModelFun)4.1.0安装二、模方(ModelFun)4.1.0下载一、模方(ModelFun)4.1.0安装 订阅专栏后(获取专栏内所有文章阅读权限及软件安装包),从文末下载软件模方(ModelFun)4.1.0安装包,如下所示,并开始安装。 1.计算机需要进入测试模式 键盘WIN+R,打开运行窗…

重磅福利!参与现金红包抽奖活动,赶快行动吧!

文章目录 粉丝福利 粉丝福利 亲爱的朋友们&#xff0c;令人振奋的消息来啦&#xff01;本月&#xff0c;我们特地为大家准备了一份特别的粉丝福利&#xff01;只要您轻轻一点&#xff0c;关注我们的公众号&#xff0c;就有机会抽取现金红包&#xff0c;让您的生活多一份惊喜与喜…

游戏前摇后摇Q闪E闪QE闪QA等操作

备注&#xff1a;未经博主允许禁止转载 个人笔记&#xff08;整理不易&#xff0c;有帮助&#xff0c;收藏点赞评论&#xff0c;爱你们&#xff01;&#xff01;&#xff01;你的支持是我写作的动力&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_w…

jenkins修改全局安全配置之后登录错误

教训&#xff08;流泪&#xff09; 事情是这样的&#xff0c;第一次我需要用单点登录集成jenkins&#xff0c;jenkins可以通过插件的方式支持cas协议&#xff0c;我当时也不很懂&#xff0c;经过我学网上的一顿乱配置&#xff0c;jenkis上不去了&#xff0c;虽然这是公司本地环…

【Linux学习】初识shell命令以及运行原理

这里写目录标题 &#x1f680;shell命令以及运行原理 &#x1f680;shell命令以及运行原理 Linux严格意义上说的是一个操作系统&#xff08;如下图所示&#xff09;&#xff0c;我们称之为“核心&#xff08;kernel&#xff09;“ 。 Linux系统的shell作为操作系统的外壳&…

开源大模型Llama 3 横空出世,4000亿参数性能直逼GPT-4

开源大模型Llama 3王者归来!最大底牌4000亿参数,性能直逼GPT-4 扎克伯格:「有了 Llama 3,全世界就能拥有最智能的 AI。」 ChatGPT 拉开了大模型竞赛的序幕,Meta 似乎要后来居上了。 扎克伯格在 Facebook 上发帖:Big AI news today. 借助先进的 Llama 3 模型,Meta 的 A…

STL的stack和queue(三):基于适配器模式的反向迭代器

目录 前言 list的反向迭代器 list.h文件 ReverseIterator.h文件 test.cpp文件 前言 迭代器按性质分类&#xff1a; 单向&#xff1a;forward_list双向&#xff1a;list随机&#xff1a;vector / deque 迭代器按功能分类&#xff1a; 正向反向const list的反向迭代器…

【笔试强训】Day2 --- 牛牛的快递 + 最小花费爬楼梯 + 数组中两个字符串的最小距离

文章目录 1. 牛牛的快递2. 最小花费爬楼梯3. 数组中两个字符串的最小距离 1. 牛牛的快递 【链接】&#xff1a;牛牛的快递 解题思路&#xff1a;简单模拟题&#xff0c;主要是处理⼀下输⼊的问题。 #include <iostream> #include <cmath> using namespace std;…

我与C++的爱恋:日期计算器

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;我与C的爱恋 朋友们大家好啊&#xff0c;在我们学习了默认成员函数后&#xff0c;我们通过上述内容&#xff0c;来实现一个简易的日期计算器。 ​ ​ 头文件的声明 #pragma once #incl…

鸿蒙开发语言_ArkTS开发语言体验_TypeScript语言环境搭建_TS声明和数据类型---HarmonyOS4.0+鸿蒙NEXT工作笔记003

可以看到我们新建的这个项目,有个 @State message: String =Hello ArkTS 这个就是定义了一个变量,可以看到 message是变量名,String是变量类型. 然后我们可以看看它的结构可以看到 build() 下面有个Row,然后再下面有个Column方法,然后,里面就是具体的内容了,首先就是显示了一…

高速公路车型识别系统的新篇章:激光雷达解决方案的探索与应用

高速公路车型识别系统&#xff1a;激光雷达解决方案的探索与应用 随着智能交通领域的迅速发展&#xff0c;高速公路车型识别技术成为提高交通管理效率与安全性的关键一环。激光雷达作为一种高精度、高可靠性的传感器技术&#xff0c;在高速公路车型识别中展现出巨大的应用潜力…