Nginx+Keepalived高可用集群

Nginx+Keepalived高可用集群


服务器准备

服务器名IP软件包主从
n1RIP 192.168.99.111 VIP 192.168.99.200nginx keepaliveMASTER
n2RIP192.168.99.122 VIP 192.168.99.200nginx keepalived
h1RIP 192.168.99.133 VIP 192.168.99.200httpd
h2RIP 192.168.32.144 VIP 192.168.99.200httpd

安装部署

n1

#下载nginx、keepalived
#关闭防火墙yum install -y epel-release && yum install -y nginx keepalived
systemctl stop firewalld && setenforce 0
vim /etc/nginx/nginx.conf

添加负载均衡策略

#在http下建立
upstream httpd {
server 192.168.99.133:80 weight=1;
server 192.168.99.144:80 weight=1;
}
#在server下建立
location / {
proxy_pass http://httpd;
}#重启nginx
systemctl start nginx
keepalived配置

keepalived配置文件基础配置
此配置为主备模式,先理解主备后,在配置双主模式更简单。

配置文件位置:/etc/keepalived/keepalived.conf
打开也许会很懵,其实用不了太多模块,先备份原配置,然后删掉其他留下最基础的配置(配置全部参数说明参考本文最后)。

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf

基础三个模块,global_defs全局模块,vrrp_instance配置vip模块,vrrp_script 脚本模块,用来检测nginx服务。
注:vrrp_script定义脚本后,在vrrp_instance模块必须加上track_script 参数。我就入了这个坑,导致脚本不生效。

global_defs模块参数

notification_email : keepalived在发生诸如切换操作时需要发送email通知地址,后面的 smtp_server 相比也都知道是邮件服务器地址。也可以通过其它方式报警,毕竟邮件不是实时通知的。
router_id : 机器标识,通常可设为hostname。故障发生时,邮件通知会用到。
vrrp_instance模块参数

state : 指定instance(Initial)的初始状态, MASTER 或者BACKUP,不是唯一性的,跟后面的优先级priority参数有关。
interface : 实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的,(注意自己系统,我的默认是ens33,有的是eth0)
mcast_src_ip : 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
virtual_router_id : 这里设置VRID,这里非常重要,相同的VRID为一个组,他将决定多播的MAC地址
priority: 设置本节点的优先级,优先级高的为master(1-255)
advert_int : 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
authentication : 定义认证方式和密码,主从必须一样
virtual_ipaddress : 这里设置的就是VIP,也就是虚拟IP地址,他随着state的变化而增加删除,当state为master的时候就添加,当state为backup的时候删除,这里主要是有优先级来决定的,和state设置的值没有多大关系,这里可以设置多个IP地址
track_script: 引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
vrrp_script模块参数
告诉 keepalived 在什么情况下切换,所以尤为重要。可以有多个 vrrp_script

script : 自己写的检测脚本。也可以是一行命令如killall -0 nginx
interval 2: 每2s检测一次
weight -5 : 检测失败(脚本返回非0)则优先级 -5
fall 2: 检测连续 2 次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1 : 检测 1 次成功就算成功。但不修改优先级

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {router_id xczngnix1
}
vrrp_script chk_nginx {script "/etc/keepalived/ncheck.sh"interval 2weight -20
}
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51mcast_src_ip 192.168.99.111priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_nginx}virtual_ipaddress {192.168.99.200}
}

创建虚拟IP

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33:0"
#UUID="fd6ca2fc-2bc6-4fc4-8bc9-5d8b0a279aca"
DEVICE="ens33:0"
ONBOOT="yes"
IPADDR=192.168.99.200
NETMASK=255.255.255.255
systemctl restart network
ip a

nginx测试脚本

# 两台虚拟机都需要监控脚本
vim /etc/keepalived/ncheck.sh
#!/bin/bash
curl 127.0.0.1:80 &> /dev/null
if [ $? -ne 0 ]then systemctl stop keepalived
fi
chmod +x /etc/keepalived/ncheck.sh

n2操作与n1不同点

配置文件

! Configuration File for keepalived
global_defs {router_id xczngnix2
}
vrrp_script chk_nginx {script "/etc/keepalived/ncheck.sh"interval 2weight -20
}
vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51mcast_src_ip 192.168.99.122priority 95advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_nginx}virtual_ipaddress {192.168.99.200}
}

两台httpd服务器

yum -y install httpd
systemctl stop firewalld && setenforce 0

创建虚拟IP

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33:0"
#UUID="fd6ca2fc-2bc6-4fc4-8bc9-5d8b0a279aca"
DEVICE="ens33:0"
ONBOOT="yes"
IPADDR=192.168.99.200
NETMASK=255.255.255.255
systemctl restart network
ip a

web1

echo 'web1' > /var/www/html/index.html

web2

echo 'web2' > /var/www/html/index.html
systemctl start httpd

浏览器测试

ip a查看两台虚拟机ip信息,发现只有111有VIP
在这里插入图片描述

192.168.99.200
在这里插入图片描述
手动关闭111的nginx,再查看keepalived状态为关闭,ip a查看VIP漂移到122上
在这里插入图片描述
按顺序开启111的nginx和keepalived,在宿主机访问VIP的nginx结果为web1,ip a发现VIP漂移回111
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

playwright 自动化框架python教程(七)

使用with语句管理资源生命周期后,还需要page.close()和context.close()吗? 当使用 with 语句管理 Playwright 的资源生命周期时,通常情况下不需要再显式调用 page.close() 和 context.close()。这是因为 with 语句会在其代码块执行完毕后自动…

从入门到精通:.gitlab-ci.yml文件的完整指南

欢迎来到我的博客,代码的世界里,每一行都是一个故事 从入门到精通:.gitlab-ci.yml文件的完整指南 前言.gitlab-ci.yml文件概述stagesimagesbefore_script和after_scripttagsonly和exceptonly关键字except关键字 artifacts使用方式产物路径其他…

写一个类ChatGPT应用,前后端数据交互有哪几种

❝ 对世界的态度,本质都是对自己的态度 ❞ 大家好,我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder 前言 最近,公司有一个AI项目,要做一个文档问答的AI产品。前端部分呢,还是「友好借鉴」Cha…

结项评审报告

项目名称,《结项评审报告》 项目名称项目编号本文件标识符Company-Project-PCM-REVIEW项目承担部门项目经理立项时间开发完成时间结项评审时间 目 录 0. 基本信息 3 1. 项目资产检查与处理 4 2. 项目综合评估 4 2.1 项目完成情况评估 4 2.2 项目质量评估 4 …

C++后端领域聚焦——存储系统和分布式系统

编程语言和脚本 C/C: 作为核心技能,需要深入理解并熟练使用 C/C 进行开发。Shell: 掌握常用的 Shell 脚本,有助于自动化日常任务和环境配置。Python: 常用于脚本编写、自动化测试、数据处理等,提高开发效率。 计算机基础 数据结构和算法: …

【小程序】怎么优化小程序的性能

优化小程序的性能是提高用户体验和确保应用顺畅运行的关键。以下是一些优化小程序性能的方法: 1. 代码优化2. 图片优化3. 网络请求优化4. 页面渲染优化5. 分包加载6. 使用性能分析工具7. 后端优化8. 用户体验优化 1. 代码优化 精简代码:删除不必要的代码…

16.ABA问题

文章目录 ABA问题1.什么是ABA问题?2.ABA问题解决方案2.1.使用AtomicStampedReference解决ABA问题2.2.使用AtomicMarkableReference解决ABA问题 ABA问题 因为CAS操作的原子性能高,在JUC中广泛被应用,但是如果使用的不合理,CAS操作就…

算法 - hash表 - 2244. 完成所有任务需要的最少轮数 思路题解

2244. 完成所有任务需要的最少轮数 文章目录 [2244. 完成所有任务需要的最少轮数](https://leetcode.cn/problems/minimum-rounds-to-complete-all-tasks/description/)说明题解思路hash表 Codehash表 说明 给你一个下标从 0 开始的整数数组 tasks ,其中 tasks[i] …

6 逻辑回归评分卡

6 逻辑回归评分卡 学习目标 掌握KS值的计算方法知道评分映射方法1 模型构建流程 1.1 实验设计 新的模型能上线一定要比原有方案有提升,需要通过实验证明 冷启动业务初期成长期波动期策略调整新增数据源人工审核人工审核新旧模型对比新旧模型对比避免迭代模型新旧模型对比规…

数据结构【顺序表】

文章目录 1.顺序表的概念线性表物理结构逻辑结构 2.顺序表的分类2.1静态顺序表2.2动态顺序表 3.顺序表接口的实现头文件(SQList.h)如下源文件初始化顺序表销毁顺序表插入扩容尾插头插 封装扩容函数删除尾删头删 查找元素在指定位置前插入数据情况一(指定的位置不是首元素)情况二…

[笔记]docker入门《四》之 dockerfile和docker-compose

文章目录 前言dockerfiledocker-compose总结 前言 dockerfile dockerfile主要是构建镜像. dockerfile的作用是从无到有的构建镜像。它包含安装运行所需的环境、程序代码等。这个创建过程就是使用 dockerfile 来完成的。 dockerfile的作用是从无到有的构建镜像。它包含安装运行…

JAVA面试库

1、基础 1.1、面向对象编程有哪些特性 1、抽象 抽象就是对同一个目标的共有的属性、特征、方法、功能、行为等进行抽取并归纳总结,它是一种将复杂现实简单化为模型的过程,它关注的是对象行为,而不用关注具体的实现细节。 在面向对象编程中…

中关村论坛 | 区块链与隐私计算论坛倒计时1天!

「区块链与隐私计算论坛」 倒计时1天! 地址:中关村国家自主创新示范区会议中心(新建宫门路2号)万春厅 时间:2024年4月27日,下午14:30-17:00 本次论坛围绕释放数据要素价值深入探讨如何将区块链与隐私计算…

【Docker学习】查询容器镜像的docker search

这个命令是使用Docker的必备技能。我们使用的各种官方镜像,一般都能通过这个命令找到。 命令: docker search 描述: 在Docker Hub上查找镜像。Docker Hub是为开发者和开源贡献者设计的容器镜像注册中心,它允许用户查找、使用和…

用python写了一个把iptv节目列表换成txt 适配diyp

这几天抓取了很多iptv,需要列表,列表太多麻烦,所以编写个小程序python转换一下 代码如下 # 读取原始文本文件 with open(iptv.txt, r, encodingutf-8) as file:lines file.readlines()# 定义存储频道信息的字典 channels {"央视频道&…

MySQL中order by排序时,数据存在null,排序在最前面

order by排序是最常用的功能,但是排序有时会遇到数据为空null的情况,这样排序就会乱了,这里以MySQL为例,记录我遇到的问题和解决思路。 sql 排序为 null 值问题: 排序时我们用 receive_date(一个统计的时间&#xff…

【js刷题:数据结构链表之设计链表】

设计链表 一、题目二、题解 一、题目 二、题解 // 定义节点类,每个节点都有一个值和一个指向下一个节点的引用 class LinkNode{constructor(val,next){ // 构造函数,接收节点值和下一个节点的引用this.valval // 节点的值this.nextnext // 指…

欣赏一个尚未关闭的python运行时bug

这是一个语言的运行时错误,在linux环境,跨语言使用共享内存时,会触发。它会在python程序退出时,自行销毁sharedMemory,即便此时还有其他的进程在使用——这会让C/Python跨进程调用几乎没有办法进行。 python程序运行完…

校园科普气象站的工作原理

TH-XQ3校园科普气象站是学校为了进行气象科普教育而设立的一种特殊设施。它不仅是一个能够实时监测和记录各种气象参数的气象站,更是一个促进学生对气象科学兴趣和理解的重要平台。 校园科普气象站通常包括一系列的气象观测设备和相关的科普设施。这些设备包括但不限…

Ubuntu20.04调试功能包的一些报错解决办法【更新中2024.05.14】

一、Could not find a package configuration file provided by “catkin_virtualenv” 解决办法: sudo apt install ros-noetic-catkin-virtualenv二、 ERROR: Could not find a version that satisfies the requirement pip-tools5.1.2 (from versions: none) …