keepalive+nginx高可用架构

目录

一.keepalive简要介绍

1.keepalive相关文件

2.keepalive配置组成

3.keepalive全局配置

4.配置虚拟路由器

5.抢占模式和非抢占模式

抢占模式(Preemptive Mode)

使用方法:

非抢占模式(Non-preemptive Mode)

使用方法:

二.配置真实服务器web1和web2

三.配置代理服务器


一.keepalive简要介绍

1.keepalive相关文件

  • 软件包名:keepalived

  • 主程序文件:/usr/sbin/keepalived

  • 主配置文件:/etc/keepalived/keepalived.conf

  • 配置文件示例:/usr/share/doc/keepalived/

  • Unit File:/lib/systemd/system/keepalived.service

  • Unit File的环境配置文件:

  • /etc/sysconfig/keepalived CentOS

2.keepalive配置组成

/etc/keepalived/keepalived.conf 配置组成

  • GLOBAL CONFIGURATION

Global definitions(全局配置):定义邮件配置,route_id,vrrp配置,组播地址 等

  • VRRP CONFIGURATION

VRRP instance(s):定义vrrp协议中的每个vrrp虚拟路由器的规则,基本信息

  • LVS CONFIGURATION(lvs调度服务器的规则设置)

Virtual server group(s)

Virtual server(s):LVS集群的VS和R

3.keepalive全局配置

#/etc/keepalived/keepalived.conf 
global_defs {
 notification_email {
 root@localhost
 #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
 root@localhost
  360601212@qq.com 
 }
 notification_email_from keepalived@localhost  
 #发邮件的地址
 smtp_server 127.0.0.1     
 #邮件服务器地址
 smtp_connect_timeout 30   
 #邮件服务器连接timeout
 router_id R1
 #每个keepalived主机唯一标识,建议使用当前主机名,但多节点重名不影响
 vrrp_skip_check_adv_addr  
 #对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查
vrrp_strict 
#严格遵守VRRP协议,启用此项后以下状况将无法启动服务:1.无VIP地址 2.配置了单播邻居 3.在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火墙规则,默认导致VIP无法访问,建议不加此项配置。
 vrrp_garp_interval 0 
 #gratuitous ARP messages 免费ARP报文发送延迟,0表示不延迟
 vrrp_gna_interval 0 
 #unsolicited NA messages (不请自来)消息发送延迟
 vrrp_mcast_group4 224.0.0.18 
 #指定组播IP地址范围:224.0.0.0到239.255.255.255,默认值:224.0.0.18 
 vrrp_iptables        
 #此项和vrrp_strict同时开启时,则不会添加防火墙规则,如果无配置vrrp_strict项,则无需启用此项配置
}

地址分类:

自定义组播,一般都有规划,不能瞎配
主和备要一样
A类:1-126
B   128-191
C   192-223
D   224-239
E   240-


#修改组播
默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量
注意:启用 vrrp_strict 时,不能启用单播
#在所有节点vrrp_instance语句块中设置对方主机的IP,建议设置为专用于对应心跳线网络的地址,而非使用业务网络

4.配置虚拟路由器

vrrp_instance <STRING> {
#<String>为vrrp的实例名,一般为业务名称
 配置参数
 ......
 }
#配置参数:
state MASTER|BACKUP
#当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP
interface IFACE_NAME 
#绑定为当前虚拟路由器使用的物理接口,如:eth0,bond0,br0,可以和VIP不在一个网卡
virtual_router_id VRID 
#每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一
priority 100 
#当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同

advert_int 1
#vrrp通告的时间间隔,默认1s


authentication { 
#认证机制
 auth_type AH|PASS   
 #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
 auth_pass <PASSWORD> 
 #预共享密钥,仅前8位有效,同一个虚拟路由器的多个keepalived节点必须一样
}
include    /etc/keealived/conf.d/*.conf
virtual_ipaddress { 
#虚拟IP,生产环境可能指定上百个IP地址
 <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
 192.168.200.100 
 #指定VIP,不指定网卡,默认为,注意:不指定/prefix,默认为/32
 192.168.200.101/24 dev eth1   
 #指定VIP的网卡,建议和interface指令指定的岗卡不在一个网卡
 192.168.200.102/24 dev eth2 label eth2:1 
 #指定VIP的网卡label 
}
track_interface { 
#配置监控网络接口,一旦出现故障,则转为FAULT状态实现地址转移
 eth0
 eth1
 …
}

[root@localhost keepalived]#tcpdump -i ens33 -nn host 224.0.0.18
#启动服务可以抓包查看 

5.抢占模式和非抢占模式

抢占模式(Preemptive Mode)
使用方法:
  • 在抢占式调度中,一个高优先级任务可以打断当前正在运行的低优先级任务,以确保高优先级任务得到及时处理。
  • 操作系统如 Linux 和 Windows 都支持抢占式调度。

在编写多线程应用时,可以通过线程优先级的设置体现抢占式调度。

import threading 
import time
def high_priority_task(): 
while True: 
print("High priority task running") 
time.sleep(0.5) 
def low_priority_task(): 
while True: 
print("Low priority task running") 
time.sleep(1) 
high_thread = threading.Thread(target=high_priority_task) 
low_thread = threading.Thread(target=low_priority_task)# 设置不同的线程优先级(注意:Python 的 threading 模块不直接支持优先级设置,这是示例) # 一些操作系统或高级库可能支持设置线程优先级 
high_thread.setDaemon(True) 
low_thread.setDaemon(True) 
high_thread.start() 
low_thread.start() 
# 模拟主线程执行 
time.sleep(10)
非抢占模式(Non-preemptive Mode)
使用方法:
  • 在非抢占式调度中,任务一旦开始执行,就会一直运行直到完成或者主动放弃 CPU,由调度器明确进行任务切换。
  • 非抢占式调度较为简单,但可能导致高优先级任务无法及时处理。

可以通过使用协程或者明显的任务切换点模拟非抢占式调度。

import asyncio

async def task1():

while True:

print("Task 1 running")

await asyncio.sleep(1) # 显式让出控制权

async def task2():

while True:

print("Task 2 running")

await asyncio.sleep(1) # 显式让出控制权

async def main():

await asyncio.gather(task1(), task2())

# 运行事件循环

asyncio.run(main())

 keepalive+nginx架构

二.配置真实服务器web1和web2

1.关闭防火墙,并在真实服务器下载http服务

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install  httpd  -y

2.分别在web1和web2上制作网页,并开启http服务

web1
[root@localhost ~]# cd /var/www/html
[root@localhost html]# ls
[root@localhost html]# echo  zxy13 >  /var/www/html/index.html
[root@localhost html]# systemctl  start  httpdweb2
[root@localhost ~]# cd /var/www/html
[root@localhost html]# ls
[root@localhost html]# echo  zxy14 >  /var/www/html/index.html
[root@localhost html]# systemctl  start  httpd

web1

web2

三.配置代理服务器

代理服务器:主192.168.240.11

                      备192.168.240.12

1.关闭防火墙,并安装epel源和nginx

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum  install epel-release.noarch  -y
[root@localhost ~]# yum  install nginx  -y

2.编辑nginx配置文件

在192.168.240.11上

配置文件http语句块下加入组和server语句块下加入location匹配实现负载均衡

3.将192.168.240.11代理服务器上/etc/nginx/nginx.conf文件远程拷贝到192.168.240.12的/etc/nginx/nginx.conf

4.安装下载keepalive服务,编辑配置文件

在192.168.240.11上 vim /etc/keepalived/keepalived.conf

! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1      # 修改邮箱地址smtp_connect_timeout 30  router_id LVS01            # 修改名称vrrp_skip_check_adv_addr  #vrrp_strict              #关闭严格模式vrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script check_down {script  "/etc/keepalived/ng.sh"   interval 1weight -30fall  3rise 2timeout 2
}vrrp_script check_down {script  "/etc/keepalived/ng.sh"   #指明脚本的位置   interval 1            #每隔1s 执行一次检测weight -30             #如果 脚本执行失败自动减少优先级30fall  3                # 3次不成功才标注为失败 rise 2                 #nginx  重新起来后检测两次成功 才真的成功  timeout 2               #超时时间  2s 
}vrrp_instance VI_1 {state MASTERinterface ens33    #修改网卡的名称virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.240.188  #修改ip}track_script {check_down}}

5.在192.168.240.13(由于12机上环境不干净换机做)上 vim /etc/keepalived/keepalived.conf

router_id LVS02  #修改为LVS02vrrp_skip_check_adv_addr#vrrp_strict  #注释关闭严格模式vrrp_garp_interval 0vrrp_gna_interval 0
}
vrrp_script check_down {script  "/etc/keepalived/ng.sh"interval 1weight -30fall  3rise 2timeout 2
}
vrrp_instance VI_1 {state BACKUP  #修改为备interface ens33  #网卡virtual_router_id 51priority 80  #优先级advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.240.188 #地址}track_script {check_down}
}

6.在客户机上测试

(1)curl  虚拟地址192.168.240.188

tcpdump客户机上抓包主服务器在发送报文

(2)关闭主服务器nginx使用ip  a  查看   192.168.240.188 已经不在主服务器上

tcpdump客户机上抓包备服务器在发送报文

使用  ip  a  命令查看备服务器192.168.240.13 ,192.168.240.188在备服务器上

启动主服务器

ip  a  查看主服务器,192.168.240.188 在主服务器上被主服务器抢占

tcpdump   -i ens33 host 224.0.0.18 -nn  在客户机查看

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

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

相关文章

vue3-openlayers 轨迹回放(历史轨迹)(ol-animation-path实现)

本篇介绍一下使用vue3-openlayers轨迹回放&#xff08;历史轨迹&#xff09;&#xff08;ol-animation-path实现&#xff09; 1 需求 轨迹回放&#xff08;历史轨迹&#xff09;实时轨迹 2 分析 轨迹回放&#xff08;历史轨迹&#xff09;&#xff0c;一般是一次性拿到所有…

LabVIEW在核磁共振实验室的应用

​核磁共振&#xff08;NMR&#xff09;实验室在进行复杂的核磁共振实验时&#xff0c;需要一个高效、灵活且易于操作的实验控制和数据采集系统。传统的NMR实验系统往往使用专门的硬件和软件&#xff0c;存在系统封闭、扩展性差、维护成本高等问题。为了解决这些问题&#xff0…

fastadmin框架修改前端时间戳格式的时区

一、上传文件 将 moment-timezone-with-data.js 和 moment-timezone-with-data.min.js 文件上传到项目的 \public\assets\libs\moment\ 文件夹中。 二、配置中引入文件 在 \public\assets\js\require-backend.js 文件中增加所引入文件的配置: moment-timezone-with-data: …

计算机方向国际学术会议推荐

*华中师范大学伍伦贡联合研究院与南京大学联合主办 第三届人工智能、物联网和云计算技术国际会议&#xff08;AIoTC 2024&#xff09; 大会官网&#xff1a;www.icaiotc.net 时间地点&#xff1a;2024年9月13-15日&#xff0c;中国武汉 收录检索&#xff1a;EI Compendex&a…

分类预测 | Matlab实现GA-XGBoost遗传算法优化XGBoost的多特征分类预测

分类预测 | Matlab实现GA-XGBoost遗传算法优化XGBoost的多特征分类预测 目录 分类预测 | Matlab实现GA-XGBoost遗传算法优化XGBoost的多特征分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现GA-XGBoost遗传算法优化XGBoost的多特征分类预测&#xff0c;…

发动机燃烧仿真|CMCL填补CFD与0维/1维均质反应模型方法间的空白

发动机的研制涉及空气动力、燃烧传热、自动控制等多方面的问题。相比基于物理样机试验的传统涉及方法&#xff0c;数值模拟仿真设计方法大大地节约了研发成本、缩短了研发周期。 对于发动机一维概念设计&#xff0c;CMCL燃烧仿真解决方案可以帮助用户快速准确实现点火、熄火、…

什么是AI绘画?全网最细stable diffusion工作原理讲解!

前言 &#xff08;这篇文章是给那些打算接触AI绘画和还不太了解的人写的&#xff09;什么是AI绘画&#xff1f;什么配置才能AI绘画&#xff1f;要怎样部署文件、输入咒语&#xff1f;你是否有着这样的疑问&#xff0c;在这个系列我会写一下我近一个多月的学习成果&#xff0c;…

hypernetwork在SD中是怎么工作的

大家在stable diffusion webUI中可能看到过hypernetwork这个词&#xff0c;那么hypernetwork到底是做什么用的呢&#xff1f; 简单点说&#xff0c;hypernetwork模型是用于修改样式的小型神经网络。 什么是 Stable Diffusion 中的hypernetwork&#xff1f; Hypernetwork 是由…

JavaWeb系列十二: 服务器端渲染技术(JSP) 上

跟着韩老师学java 1. JSP基本介绍1.1 JSP快速入门1.2 JSP(Java Server Pages)运行原理1.3 page指令介绍1.4 JSP脚本1.4.1 声明脚本1.4.2 表达式脚本1.4.3 java代码脚本 1.5 jsp注释1.6 jsp内置对象1.7 JSP四大域对象1.7.1 域对象实例1.7.2 注意事项 1.8 JSP请求转发标签1.9 作业…

MYSQL 将某个字段赋值当前时间

如 我们需要将use_time 赋值为当前时间&#xff1a; 准备三条数据 &#xff1a; 执行sql &#xff0c;2种当前时间赋值函数&#xff0c;1种关键字赋值 &#xff1a; update test_info SET use_timeNOW() WHERE id 1; update test_info SET use_timeCURRENT_TIMESTAMP() …

基于飞腾腾云S2500的ATS部署及调优指南(反向代理篇)

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

场外期权一级交易商都有哪些?和二级交易商有什么区别?

今天带你了解场外期权一级交易商都有哪些&#xff1f;和二级交易商有什么区别&#xff1f;目前&#xff0c;个人投资者无法直接进行场外个股期权投资&#xff0c;而是需要通过专业机构进行询价交易下单。 场外期权业务一级交易商分别为&#xff0c;广发证券、国泰君安、华泰证…

Java学习笔记(一)Java内容介绍、程序举例、DOS命令、Java跨平台特性的本质、课后练习

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍Java内容介绍、程序举例、DOS命令、Java跨平台特性的本质还有几道课后练习详细介绍以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言 …

中小学校共用电脑通过安当SLA产品配置实现开机控制

中小学校公用电脑实现电脑开机控制的必要性主要体现在以下几个方面&#xff1a; 1. 增强安全性&#xff1a; 公用电脑由于使用频繁&#xff0c;容易被未经授权的用户访问&#xff0c;可能存在数据泄露或恶意软件植入的风险。通过实现电脑开机控制&#xff0c;学校可以确保只有…

【jdk】jdk11 jdk17 jdk21的新特性

前言&#xff1a;按照博主的个人理解&#xff0c;一般来说 除了jdk8时代 说jdk8的新特性是特指jdk8这一个版本的特性&#xff0c;之后例如jdk11 jdk17新特性 都是泛特性 什么意思呢&#xff1f; 比如jdk11新特性&#xff0c;一般是指jdk9——jdk11 这一个泛版本的所有新特性&am…

加速度传感器采集时无效数据的产生及消除

1.现象 这是振动传感器的原始采样信号&#xff0c;它有一个明显的上升沿&#xff0c;这个上升沿&#xff0c;看时间轴标尺&#xff0c;大概持续了至少50ms&#xff0c;它是从哪里来的呢&#xff1f; 加速度传感器一般是由恒流源驱动的。而恒流源的原始电源输入是个经由电源模…

RabbitMQ使用交换机进行消息转发

使用交换机进行转发到队列 第一步&#xff1a;创建队列 第二步&#xff1a;创建交换机 第三步&#xff1a;交换机绑定队列 第四步&#xff1a;修改消息生产者发送业务 第五步&#xff1a;修改消息接收者业务代码 RabbitListener(queues "fanout.queue1")public vo…

linux服务器没外网源码安装glibc-2-28

linux服务器没外网源码安装glibc-2-28 所需源码包&#xff0c;其中gcc文件夹不需要&#xff0c;其它tar包都需要 tar.gz的解压方式 #tar -zxvf 包名 tar.xz的解压方式 #tar -xf 包名 全部解压完成后 安装顺序请按照下方顺序操作&#xff08;wget后面是下载地址&#xff…

码云建仓库

1.新建仓库 码云地址 打开 码云地址 &#xff0c;点击“”&#xff0c;新建仓库&#xff0c;添加仓库内容 &#xff0c;创建。 小提示&#xff1a;如果本地已有项目&#xff0c;就不要选初始化&#xff0c;设置模板&#xff0c;容易冲突。 2. 进入当前仓库页 小提示&#x…

决定马萨诸塞州版图的关键历史事件

决定马萨诸塞州版图的关键历史事件&#xff1a; 1. 早期探索与*民定居&#xff1a;17世纪初&#xff0c;英国清教徒为寻求宗教自由&#xff0c;乘坐“五月花号”到达新大陆&#xff0c;并于1620年在现在的普利茅斯建立了第一个永久性英国*民地。随后&#xff0c;更多的英国*民…