高可用keepalived详解---干货满满(企业应用示例)

news2024/11/27 18:33:33

目录

一、master/master 的 Keepalived 双主架构

1.1  ka1部署

1.2 ka2部署 

1.3 重启测试 

二、实现ipvs高可用 (keepalived+lvs)

2.1 ipvs的相关配置

2.1.1 虚拟服务器配置架构

2.1.2 virtual server (虚拟服务器)的定义格式

2.1.3 虚拟服务器配置 

 2.1.4 应用层监测

2.1.5 TCP监测

2.2 lvs-----dr模式高可用

2.2.1 在rs1,rs2配置虚拟IP,并解决arp响应问题。

2.2.2 在ka1,ka2上面配置ipvsadm

2.2.3 在keepalived 添加配置dr 负载均衡策略

 2.2.4 重启测试

2.2.5 watch 监控检测

三、实现VRRP Script高可用性

3.1 VRRP Script 配置

3.1.1 定义脚本

3.1.2  调用脚本

 3. 2 利用vrrp脚本实现主从角色切换

3.2.1 写脚本

3.2.2 编辑配置文件

3.2.3 重启测试 

四、实现haproxy高可用 (keepalived+haproxy)

4.1 ka1,ka2安装部署haproxy

4.2 添加内核参数

4.3 重启haproxy测试

 4.4 脚本检测haproxy状态

4.4.1 写脚本

4.4.2 编辑配置文件

 4.4.3 重启测试


本章实验的环境和上一篇一样,不知道的可以看上一篇的环境配置哦。!!!!!

一、master/master Keepalived 双主架构

master/slave 的单主架构,同一时间只有一个 Keepalived对外提供服务,此主机繁忙,而另一台主机却很空闲,利用率低下,可以使用 master/master 的双主架构,解决此问题。
双主架构就是:

在两个或以上 VIP 分别运行在不同的 keepalived 服务器,以实现服务器并行提供 web访问的目的,提高服务器资源利用率。

1.1  ka1部署

在ka1上面在配置文件里面再添加VIP(172.25.254.200)的配置,注意此时ka1上面为backup。如下

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf 
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev ens33 label ens33:1
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
      172.25.254.20
    }
}

#添加这个
vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 200
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev ens33 label ens33:2
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
      172.25.254.20
    }
}

 

1.2 ka2部署 

在ka2上面在配置文件里面再添加VIP(172.25.254.200)的配置,注意此时ka1上面为MASTER。如下

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf 
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 100
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev ens33 label ens33:1
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
      172.25.254.10
    }
}
#添加下面这个
vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 200
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev ens33 label ens33:2
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
      172.25.254.10
    }
}

1.3 重启测试 

[root@ka1 ~]# systemctl restart keepalived.service

[root@ka2~]# systemctl restart keepalived.service

其vip2就出现在ka2上面

然后将ka2上的keepalived服务stop停止了,其两个VIP就都出现在ka1上面。

二、实现ipvs高可用 (keepalived+lvs)

通过在keepalived部署策略,能够实现负载均衡的高可用,高性能。

2.1 ipvs的相关配置

2.1.1 虚拟服务器配置架构

virtual_server IP port {
...
real_server {
...
}
real_server {
...
}
…
}

2.1.2 virtual server (虚拟服务器)的定义格式

virtual_server IP port # 定义虚拟主机 IP 地址及其端口
virtual_server fwmark int #ipvs 的防火墙打标,实现基于防火墙的负载均衡集群
virtual_server group string # 使用虚拟服务器组

2.1.3 虚拟服务器配置 

virtual_server IP port { #VIP和PORT
delay_loop <INT> #检查后端服务器的时间间隔
lb_algo rr|wrr|lc|wlc|lblc|sh|dh #定义调度方法
lb_kind NAT|DR|TUN #集群的类型,注意要大写
persistence_timeout <INT> #持久连接时长
protocol TCP|UDP|SCTP #指定服务协议,一般为TCP
sorry_server <IPADDR> <PORT> #所有RS故障时,备用服务器地址
real_server <IPADDR> <PORT> { #RS的IP和PORT
weight <INT> #RS权重
notify_up <STRING>|<QUOTED-STRING> #RS上线通知脚本
notify_down <STRING>|<QUOTED-STRING> #RS下线通知脚本
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... } #定义当前主机健康状
态检测方法
}
}
#注意:括号必须分行写,两个括号写在同一行,如: }} 会出错

 2.1.4 应用层监测

应用层检测:HTTP_GET|SSL_GET
HTTP_GET|SSL_GET {
url {
path <URL_PATH> #定义要监控的URL
status_code <INT> #判断上述检测机制为健康状态的响应码,一般为 200
}
connect_timeout <INTEGER> #客户端请求的超时时长, 相当于haproxy的timeout server
nb_get_retry <INT> #重试次数
delay_before_retry <INT> #重试之前的延迟时长
connect_ip <IP ADDRESS> #向当前RS哪个IP地址发起健康状态检测请求
connect_port <PORT> #向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS> #向当前RS发出健康状态检测请求时使用的源地址
bind_port <PORT> #向当前RS发出健康状态检测请求时使用的源端口
}

2.1.5 TCP监测

传输层检测: TCP_CHECK
TCP_CHECK {
connect_ip <IP ADDRESS> #向当前RS的哪个IP地址发起健康状态检测请求
connect_port <PORT> #向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS> #发出健康状态检测请求时使用的源地址
bind_port <PORT> #发出健康状态检测请求时使用的源端口
connect_timeout <INTEGER> #客户端请求的超时时长
#等于haproxy的timeout server
}

2.2 lvs-----dr模式高可用

这里我们使用单主模式,也可以在双主模式下配置。下面就开始我们的部署了

2.2.1 在rs1,rs2配置虚拟IP,并解决arp响应问题。

添加虚拟ip

[root@rs1 ~]# ip a a 172.25.254.100/32 dev lo

[root@rs2 ~]# ip a a 172.25.254.100/32 dev lo

限制arp响应,这里我们写到配置文件中来进行永久限制,

[root@rs1 ~]# vim /etc/sysctl.d/arp.conf

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

[root@rs1 ~]# vim /etc/sysctl.d/arp.conf

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

 重启起作用:

[root@rs1 ~]# sysctl --system

[root@rs2 ~]# sysctl --system

2.2.2 在ka1,ka2上面配置ipvsadm

[root@ka1 ~]# yum install ipvsadm -y

[root@ka2~]# yum install ipvsadm -y

2.2.3 在keepalived 添加配置dr 负载均衡策略

ka1上配置:

修改配置文件 [root@ka1 ~]# vim /etc/keepalived/keepalived.conf

ka2上面的配置:

 修改配置文件 [root@ka2 ~]# vim /etc/keepalived/keepalived.conf

 2.2.4 重启测试

我们就可以在两台keepalived服务器上面查看到了策略,如下。

 我们再测试一下负载均衡轮询,如下也能够实现。

2.2.5 watch 监控检测

我们在ka1上面进行watch检测。

[root@ka1 ~]# watch -n 1 ipvsadm -Ln

刚开始的时候,其检测到ipvs策略110,120都有

然后关闭rs1的httpd服务,发现监控到没有了到110的策略。

然后再开启rs1的httpd服务,发现监控又有了110的策略。

以上就是keepalived能够实现动态检测故障,然后ka1故障,lvs自动切换至ka2.

[root@ka1 ~]# systemctl stop keepalived.service
[root@ka2 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.254.100:80 wrr
-> 172.25.254.110:80 Route 1 0 0
-> 172.25.254.120:80

三、实现VRRP Script高可用性

keepalived 利用 VRRP Script 技术,可以调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先动态调整,从而实现其它应用的高可用性功能。

3.1 VRRP Script 配置

3.1.1 定义脚本

vrrp_script :自定义资源监控脚本, vrrp实例根据脚本返回值,公共定义,可被多个实例调用,定义在 vrrp 实例之外的独立配置块,一般放在 global_defs 设置块之后。
通常此脚本用于监控指定应用的状态。一旦发现应用的状态异常,则触发对 MASTER节点的权重减至 低于 SLAVE 节点,从而实现 VIP 切换到 SLAVE 节点.
vrrp_script <SCRIPT_NAME> {
script <STRING>|<QUOTED-STRING> #此脚本返回值为非0时,会触发下面OPTIONS执行
OPTIONS
}

3.1.2  调用脚本

track_script :调用 vrrp_script 定义的脚本去监控资源,定义在 VRRP实例之内,调用事先定义的vrrp_script
track_script {
SCRIPT_NAME_1
SCRIPT_NAME_2
}

 3. 2 利用vrrp脚本实现主从角色切换

3.2.1 写脚本

#这个脚本是对这个文件是否存在状态
[root@ka1 ~]# cat /etc/keepalived/test.sh
#!/bin/bash
[ ! -f /lee ]
#给执行权限
[root@ka1 ~]# chmod +x /etc/keepalived/test.sh
#开始是没有这个文件的状态为0
[root@ka1 ~]# echo $?
0

3.2.2 编辑配置文件

本次主要是在ka1上实现的,所以只要编辑ka1配置文件就行了。

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf 

3.2.3 重启测试 

主要是通过过创建删除文件/lee来检测VIP。

重启服务keepalived后。

[root@ka1 ~]# systemctl stop haproxy.service 

首先没有这个/lee文件  即 $?=0。那么我们的VIP就没有变化

然后创建文件/lee,文件存在就出问题,$?==1 ----非0,权重就会变化100-30=70,VIP就会转移其vip100就转移到 ka2上

四、实现haproxy高可用 (keepalived+haproxy)

在配置haproxy是需要将之前做的lvs-dr的配置都清理干净不然会有影响!!!!!

4.1 ka1,ka2安装部署haproxy

[root@ka1 ~]# yum install haproxy -y

[root@ka2 ~]# yum install haproxy -y

编辑haproxy配置文件。

#ka1上
[root@ka1 ~]# vim /etc/haproxy/haproxy.cfg 
#添加
listen webcluser
    bind 172.25.254.100:80
    mode http
    balance roundrobin
    server web1 172.25.254.110:80 check inter 3 fall 2 rise 5
    server web2 172.25.254.120:80 check inter 3 fall 2 rise 5

#ka2上
[root@ka1 ~]# vim /etc/haproxy/haproxy.cfg 
#添加
listen webcluser
    bind 172.25.254.100:80
    mode http
    balance roundrobin
    server web1 172.25.254.110:80 check inter 3 fall 2 rise 5
    server web2 172.25.254.120:80 check inter 3 fall 2 rise 5

 就是下面的。

4.2 添加内核参数

添加内核参数 -使得不管本地有没有VIP100都能监听:---两台都要做。

[root@ka1 ~]# vim /etc/sysctl.conf
#添加
net.ipv4.ip_nonlocal_bind = 1
#启用
[root@ka1 ~]# systemctl --system
[root@ka1 ~]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1

[root@ka2 ~]# vim /etc/sysctl.conf
#添加
net.ipv4.ip_nonlocal_bind = 1
#启用
[root@ka2 ~]# systemctl --system
[root@ka2 ~]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1

4.3 重启haproxy测试

[root@ka1 ~]# systemctl enable --now haproxy.service

[root@ka2 ~]# systemctl enable --now haproxy.service

haproxy的功能就先配置好了实现负载均衡

下面我们就开始进行keepalived部署动态检测实现高可用高性能。

 4.4 脚本检测haproxy状态

使用killall -0 haproxy来检测 ,其脚本也是和上面的差不多。

4.4.1 写脚本

#这个脚本是对这个haproxy进程状态进行检测
[root@ka1 ~]# cat /etc/keepalived/test.sh
#!/bin/bash
killall -0 haproxy
#给执行权限
[root@ka1 ~]# chmod +x /etc/keepalived/test.sh


[root@ka2 ~]# cat /etc/keepalived/test.sh
#!/bin/bash
killall -0 haproxy
#给执行权限
[root@ka2 ~]# chmod +x /etc/keepalived/test.sh

4.4.2 编辑配置文件

ka1上面:主要添加下面标红的

ka2上面:主要添加下面标红的

 

 4.4.3 重启测试

先关掉ka1一台上面的haproxy,就会出现vip转移。然后就会在ka2上面调用haproxy,这样就实现了即使一台调度器挂了,另一台也能及时响应成为haproxy服务器来使用。

再次开启之后,其VIP就回来了

以上就是我在学习keepalived阶段的全部内容啦。

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

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

相关文章

四十、大数据技术之Kafka3.x(3)

&#x1f33b;&#x1f33b; 目录 一、Kafka Broker1.1 Kafka Broker工作流程1.1.1 Zookeeper 存储的Kafka信息1.1.2 Kafka Broker 总体工作流程1.1.3 Broker 重要参数 1.2 生产经验——节点服役和退役1.2.1 服役新节点1.2.2 退役旧节点 1.3 Kafka 副本1.3.1 副本基本信息1.3.2…

线程知识及编程

线程定义 在Python中&#xff0c;想要实现多任务还可以使用多线程来完成。 为什么使用多线程&#xff1f; 进程是分配资源的最小单位 , 一旦创建一个进程就会分配一定的资源 , 就像跟两个人聊QQ就需要打开两个QQ软件一样是比较浪费资源的 . 线程是程序执行的最小单位 , 实际…

企业应该如何准备 EcoVadis 审核?

企业准备 EcoVadis 审核可以参考以下步骤&#xff1a; 注册&#xff1a;在网上注册并提供公司的相关信息&#xff0c;包括法律实体名称、国家和地区、企业规模和行业等。如果是受客户邀请参加评估&#xff0c;需按照邀请邮件中的链接进行注册&#xff0c;并确保客户能随时获知评…

【ML】强化学习(Reinforcement Learning)及其拆解

【ML】强化学习&#xff08;Reinforcement Learning&#xff09; 1. RL Outline 强化学习&#xff08;Reinforcement Learning&#xff09;概述1.1 RL的基本框架 2. RL 引入&#xff1a;从这个小游戏开始3. Policy Gradient 方法4. Actor-Critic 方法5. [奖励塑形&#xff08;R…

(第二十六天)

上午 1、web01与web02服务器搭建 ip:10.0.0.11 systemctl stop filewalld systemctl disable firewalld setenforce 0 vim /etc/selinux/config SELINUX disabled yum -y install nginx echo "web----------01" > /usr/share/nginx/html/index.h…

力扣热题100_二叉树_230_二叉搜索树中第K小的元素

文章目录 题目链接解题思路解题代码 题目链接 230. 二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a…

图论:欧拉路

欧拉路是什么 什么&#xff1f;你对这个名字感到很陌生&#xff1f;再看看是图论的内容&#xff0c;感觉是不是很难&#xff1f;其实一点也不难&#xff0c;这就是生活中的一笔画问题&#xff0c;也就是不重复的经过每一条边并可以访问所有的点&#xff0c;先看看这个图&#…

Python字符串格式化方法输出到控制台

python打印是这样的&#xff0c;我希望resource_id能够对齐输出&#xff1a; 3种格式化方法 %格式化 >>> pi3.141592653589793 >>> e2.718281828459045 >>> print("pi%.2f e%.3f" % (pi, e) ) pi3.14 e2.718“”.format()格式化 >…

操作系统(线程管理-通过条件变量实现消费者与生产者模型)

生产者与消费者模型 生产者&#xff1a;生产数据的线程&#xff0c;这类的线程负责从用户端、客户端接收数据&#xff0c;然后把数据Push到存储中介。 消费者&#xff1a;负责消耗数据的线程&#xff0c;对生产者线程生产的数据进行&#xff08;判断、筛选、使用、响应、存储&…

x264 编码器 SSIM 算法源码分析

SSIM SSIM(Structural Similarity Index)是一种用于衡量两幅图像之间视觉相似度的指标。它不仅考虑了图像的亮度、对比度和饱和度,还考虑了图像的结构信息。SSIM的值介于-1到1之间,值越接近1表示两幅图像越相似。 SSIM是基于以下三个方面来计算的: 亮度(Luminance):比…

【Hot100】LeetCode—560. 和为 K 的子数组

目录 1- 思路前缀和 2- 实现⭐560. 和为 K 的子数组——题解思路 3- ACM 实现 原题链接&#xff1a;560. 和为 K 的子数组 1- 思路 前缀和 ① 借助 HashMap 存储前缀和&#xff1a;Key 为对应的前缀和&#xff0c;Value 为对应的出现次数 hm 初始化放入 (0,1) 代表和为 0 的情…

linux--chrony时间同步以及局域网同步

文章目录 注意Chrony介绍Chrony 支持的系统与联系方式Chrony Git 仓库环境准备服务端确认是否安装chrony如果没有安装&#xff0c;那就执行以下命令进行安装配置文件/etc/chrony.conf命令参数讲解基本用法选项命令系统时钟命令时间源命令NTP 访问命令执行命令参考 客户端确认是…

Java中等题-乘积最大子数组(力扣)

给你一个整数数组 nums &#xff0c;请你找出数组中乘积最大的非空连续 子数组 &#xff08;该子数组中至少包含一个数字&#xff09;&#xff0c;并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 示例 1: 输入: nums [2,3,-2,4] 输出: 6 解释: 子数组 […

Telemark电源TT-6E-BEAM SOURCE操作手侧含电路图接线

Telemark电源TT-6E-BEAM SOURCE操作手侧含电路图接线

详解LVS-dr模式

什么是LVS-dr模式 图解 在LVS-DR模式下&#xff0c;负载均衡器&#xff08;也称为调度器&#xff09;接收来自客户端的请求&#xff0c;并根据预设的调度算法将请求转发给后端的真实服务器&#xff08;也称为RS&#xff09;。真实服务器处理完请求后&#xff0c;直接将响应返回…

Jetpack Compose实战教程(六)

Jetpack Compose实战教程&#xff08;六&#xff09; 第六章 没有了margin&#xff0c;如何区分外边距&#xff1f;内边距&#xff1f; 文章目录 Jetpack Compose实战教程&#xff08;六&#xff09;一、前言二、本章目标三、开始编码3.1 特殊情况下的margin3.2 使用padding设…

基于Springboot+netty 的IM聊天室弹幕

代码地址 仓库地址 聊天室 创建springboot项目 因为我的NettyServer 是8080 所以我把服务端口改为了8081 引入netty 依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.92.Final</versi…

Prometheus+Grafana保姆笔记(1)——Prometheus+Grafana的安装

Prometheus Grafana 的组合在微服务项目中可以完成许多DevOps任务&#xff0c;它们共同提供了强大的监控和可视化功能。 我们陆续介绍Prometheus Grafana 的相关用法。 首先介绍PrometheusGrafana的安装。 安装 Prometheus Prometheus 是GO写的&#xff0c;并不依赖于 Ja…

【深度学习】注意力机制(Transformer)

注意力机制 1.基础概念 1.1 查询、键和值 在人类的注意力方式中&#xff0c;有自主性的与非自主性的注意力提示两种解释方式。所谓自主性注意力提示&#xff0c;就是人本身主动想要关注到的某样东西&#xff1b;非自主性提示则是基于环境中物体的突出性和易见性&#xff0c;…

8.13面试题目

美团商业分析实习生 一、8个球有一个重一点&#xff0c;最少称几次找出 2次 8个球中有一个重一点&#xff0c;最少称2次能找出来。 具体称重步骤如下&#xff1a; 第一次称重&#xff1a;将8个球分成三组&#xff0c;分别为3个球、3个球和2个球。将两组各3个球放在天平的两端…