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 2
    weight -20
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    mcast_src_ip 192.168.99.111
    priority 100

    advert_int 1
    authentication {
        auth_type PASS
        auth_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 2
    weight -20
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    mcast_src_ip 192.168.99.122
    priority 95

    advert_int 1
    authentication {
        auth_type PASS
        auth_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
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

三.Ubuntu安装MySql数据库

三.Ubuntu安装MySql数据库 1.首先进入Console,登录Ubuntu系统后,更新源,命令:apt update,如图所示。 安装MySQL命令:apt install mysql-server 执行期间按回车,进行下一步,执行过程如图所示: 选择yes或no,此步选择yes 安装完成。 2.提高MySQL安全性,该命令…

2024-简单点-MediaCrawler解构

MediaCrawler var.pyrecv_sms.pyasync_db.pydb.pymain.pybase/base_crawler.pyconfig/baseconfig.pyconfig/db_config.py有待更新 var.py from asyncio.tasks import Task from contextvars import ContextVar from typing import Listimport aiomysqlfrom async_db import As…

【脚本】使用脚本备份docker中部署的mysql数据库

v1版本明文密码方式: #!/bin/bash# 定义 MySQL 容器名称和数据库信息 container_name"mysql_container" db_user"root" db_password"your_password"# 定义要备份的数据库列表 databases("database1" "database2"…

交换机组网最常见的8大故障及解决方式

有朋友多次提到网络故障,其中在交换机组网时常见的故障比较多,为了便于大家排除这些故障,在此介绍一些常见的典型故障案例及处理思路。 故障1:交换机刚加电时网络无法通信 【故障现象】 交换机刚刚开启的时候无法连接至其他网络…

摸鱼大数据——Linux搭建大数据环境(安装zooKeeper和zookeeper shell命令)五

安装zookeeper软件 1.上传软件 使用CRT等客户端远程上传 zookeeper-3.4.6.tar.gz 文件到/export/software目录下 2.解压软件 [rootnode1 ~]# cd /export/software/ [rootnode1 software]# tar -xzvf zookeeper-3.4.6.tar.gz -C /export/server/ [rootnode1 software]# cd /ex…

用友GRP-U8 userInfoWeb SQL注入致RCE漏洞复现 (XVE-2024-10539)

0x01 产品简介 用友GRP-U8R10行政事业内控管理软件是用友公司专注于国家电子政务事业,基于云计算技术所推出的新一代产品,是我国行政事业财务领域最专业的政府财务管理软件。 0x02 漏洞概述 用友GRP-U8R10行政事业内控管理软件 userInfoWeb接口处存在SQL注入漏洞,未授权的…

自由职业是种怎样的体验?普通人如何成为一名自由职业者?

自由职业在哪都能办公自由职业在哪都要办公。 放弃幻想,没有不辛苦的工作,5年经验后端开发程序员,已经从事自由职业1年半,今天就来客观分享一下自由职业的利与弊。 时间自由,减少中间商赚差价 自由职业最让人羡慕的就…

电机完美控制的感觉如何【应用案例】

当电机控制技术成为人体的一部分时,对控制系统的组件尺寸和可靠性要求将极大提高。得益于集成式FOC控制系统组件,第一款具有两个活动关节的义肢得以在短时间内完成—— 赶上在苏黎世举办的全球半机械人奥运会(Cybathlon)。 失去肢体显然会对一个人的生活…

GPT4o速测:约0.5秒延迟的多模态能力

文章目录 1. 测评2. IntroReference 没有剪辑,约0.5秒延迟的多模态能力。 1. 测评 推理速度异常快,比之前快了大概两三倍,对产品端来说是个很好的事情,想用gpt4级别性能终于可以少讨论几句时延影响用户体验了模型指令遵从能力变强…

GPT3.5、GPT4、GPT4o的性能对比

理论总结 随着版本的升级,模型在参数数量、语言理解能力、生成文本质量、多模态能力、推理能力等方面均有显著提升。GPT-4.0作为最新改进版,提供了最先进的功能和性能。 实际对比 1.1.GPT3.5 1.2.GPT4 1.3.GPT4o 在语义理解上,无差别。 下面测试下代码能力。 测试问题 我…

电脑的录屏功能在哪?一篇文章教你快速定位

“电脑录屏功能在哪里呀?因为需要录制一些教学视频,急需用到电脑的录屏功能。我已经在电脑上翻箱倒柜地找了好几个小时,可还是没有找到。时间紧迫,这个任务对我来说非常重要,我现在感到非常焦虑,希望大家帮…

YOLOv8独家改进:逐元素乘法(star operation)二次创新 | 微软新作StarNet:超强轻量级Backbone CVPR 2024

💡💡💡创新点:star operation(元素乘法)在无需加宽网络下,将输入映射到高维非线性特征空间的能力,逐元素乘法(star operation)在性能上始终优于求和,基于star operation块做二次创新 💡💡💡如何跟YOLOv8结合:替代YOLOv8的C2f,结构图如下 收录 YOLOv8…

压力给到 Google,OpenAI 发布 GPT-4o 来了

北京时间5月14日凌晨1点,OpenAI 开启了今年的第一次直播,根据官方消息,这次旨在演示 ChatGPT 和 GPT-4 的升级内容。在早些时候 Sam Altman 在 X 上已经明确,「我们一直在努力开发一些我们认为人们会喜欢的新东西,对我…

炫富神器,简单无脑粘贴复制,闷声发财,当天见收益,无上限封顶

项目主打简单、暴力、易操作、可复制,单人可做、不靠关系走门路、不重投资、可复制放大! 今天给大家带来的这个项目,有点暴力,请先做好心理准备!谨慎观看!! 这个项目原理是利用软件生成炫富视频…

数据结构——队列(链表实现)

一、队列的特点 先进先出 二、队列的代码 typedef int QDataType;// 链式结构:表示队列 typedef struct QListNode {struct QListNode* next;QDataType data; }QNode;// 队列的结构 typedef struct Queue {QNode* front; //指向队列的第一个结点QNode* rear;//指…

基于uniapp+vue3+ts开发微信小程序项目实战

🚀 作者 :“二当家-小D” 🚀 博主简介:⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人,8年开发架构经验,精通java,擅长分布式高并发架构,自动化压力测试,微服务容器化k…

香港电讯高效网络,助力新消费品牌抓住拓展香港市场新风口

自今年初香港与内地全面恢复通关,两地同胞跨境消费热潮持续升温。港人“北上”消费掀起风潮的同时,香港市场也成为内地新消费品牌拓展的热门目标。从糕点、茶饮、连锁餐饮到服饰,越来越多内地品牌进驻香港。新消费品牌要想在香港开设门店&…

气膜建筑会漏气吗—轻空间

气膜建筑作为一种创新的建筑形式,其主要结构依靠充气系统提供源源不断的风力,以维持内部气压,从而支撑起整个膜体,抵御外部的风雪荷载。然而,气膜建筑能否保持完全的密封性,是否会漏气,是许多用…

python批量生成验证码,python生成验证码

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.总结 一.前言 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Human

国标GB28181协议EasyCVR视频汇聚平台获取设备录像仅展示部分片段的原因排查

国标GB28181协议EasyCVR安防平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,平台支持7*24小时实时高清视频监控,能同时播放多路监控视频流&#xf…