Keepalived,基于 CentOS 7构建nginx的Keepalived 高可用群集。

2023-11-02

1. 简述 Keepalived 的主要功能、应用场合。

keepalived是什么?
Keepalived 软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。
所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。

keepalived 有三个重要的功能,分别是:

  • 管理LVS负载均衡软件
  • 实现LVS集群节点的健康检查
  • 作为系统网络服务的高可用性(failover)

使用原则:当我们在某些场景下不需要让页面重新加载时我们可以使用keepalive

举个栗子:

当我们从首页–>列表页–>商详页–>再返回,这时候列表页应该是需要keep-alive

从首页–>列表页–>商详页–>返回到列表页(需要缓存)–>返回到首页(需要缓存)–>再次进入列表页(不需要缓存),这时候可以按需来控制页面的keep-alive

2. 使用 Keepalived 实现双机热备时,主、备服务器的配置存在哪些区别?

Keepalived实现双机热备
  VRRP的热备方式,Keepalived可以用做服务器故障切换,常用于双机热备,在双机热备的方案中,故障切换主要针对虚拟IP地址的漂移来实现,因此能够适用于各种应用服务器(如:web、ftp、fail、还是ssh、dns等)

在同一个Keepalived热备组内,所有配置文件基本相同,包括虚拟路由器的ID号、认证信息、漂移地址、心跳频率等。不同之处在于路由器名称,热备状态、优先级
路由器名称(router_id):建议为每个参与热备的服务器指定不同的名称
热备状态(state):至少应有一台主服务器,将状态设为MASTER;可以有多台备用的服务器,将状态设为BACKUP
优先级(priority):数值越大则取得 VIP控制权的优先级越高,因此主服务器的优先级应设为最高;其他备用服务器的优先级可依次递减,但不要相同,以免在争夺VIP控制权时发生冲突

配置没有错误后启动,这时候主服务器仍然在线,VIP地址实际上仍然由主服务器控制,其他服务器处于备用状态,因此备用服务器中不会为ens33接口添加VIP地址

3. 构建 LVS+Keepalived 高可用群集时,如何缩短故障中断时间?

4. 基于 CentOS 7构建nginx的Keepalived 高可用群集。

源码安装nginx,并提供服务脚本

1. 环境准备

在这里插入图片描述

序号 IP地址 角色 服务
1 172.25.10.10 客户端 主要由于测试
2 172.25.10.100(VIP:172.25.10.200) Master keepalived+nginx
3 172.25.10.110(VIP:172.25.10.200) Backup keepalived+nginx
4 172.25.10.120 WEB1 nginx
5 172.25.10.130 WEB2 nginx

2. 安装依赖

  1. 安装vim命令,使用命令:
    yum install vim-enhanced -y

  2. 安装gcc,使用命令:
    yum install make cmake gcc gcc-c++ -y

  3. 安装依赖:
    yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel wget -y

3.安装nginx

可以参考前面的文章

源码安装nginx,并提供服务脚本

安装nginx所需的pere库pere,peri兼容正则表达式
yum install -y pcre-devel
安装openssl-devel-
yum install -y openssl-devel
检查并安装nginx基础依赖包pcre-devel、openssl-devel
rpm -qa | egrep 'pcre-devel|openssl-devel'

创建组和用户

groupadd -r -g 995 nginx
useradd -r -u 995 -g 995 -s /sbin/nologin -M nginx

下载nginx
wget http://nginx.org/download/nginx-1.18.0.tar.gz
解压
tar xf nginx-1.18.0.tar.gz -C /usr/local/src/

编译

cd /usr/local/src/nginx-1.18.0/
./configure --user=nginx --group=nginx \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_auth_request_module \
--with-http_gzip_static_module \
--with-http_gunzip_module \
--with-http_stub_status_module

编译和安装
make && make install

修改配置文件

vim /usr/lib/systemd/system/nginx.service

[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/After=network-online.target remote-fs.targe nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
测试:
systemctl enable --now nginx

启动完之后检查nginx是否已经正常启动
ps -ef | grep nginx
在这里插入图片描述

修改一下nginx的index页面 好区分不同虚拟机

echo "`hostname -I`,web test page" > /usr/local/nginx/html/index.html

验证:

在这里插入图片描述

4. 负载均衡服务器的搭建

在172.25.10.100和172.25.10.110上面安装nginx,实现负载均衡

在172.25.10.100上面配置

vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述
在这里插入图片描述
重启服务
systemctl restart nginx

进行检验(172.25.10.10)
在这里插入图片描述

172.25.10.110 同理,将web1改成web2即可;

在这里插入图片描述

在这里插入图片描述
重启服务
systemctl restart nginx
测试(172.25.10.10)

在这里插入图片描述

4. 安装Keeplived

安装依赖
yum install curl libnl3-devel net-snmp-devel libnfnetlink-devel -y
下载keepalived安装包
wget --no-check-certificate https://www.keepalived.org/software/keepalived-1.2.18.tar.gz
解压
tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
配置
cd /usr/local
cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived
编译安装
make && make install
配置开机服务
复制文件

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

创建软连接
ln -s /usr/local/sbin/keepalived /usr/sbin/
创建keepalived.service文件

vim /lib/systemd/system/keepalived.service

[Unit]
Description=Keepalived
After=syslog.target network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
PIDFile=/var/run/keepalived.pid
ExecStart=/usr/local/keepalived/sbin/keepalived -D
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

配置systemctl
systemctl daemon-reload重新加载

systemctl enable keepalived.service 设置开机自动启动

systemctl start keepalived.service启动

systemctl status keepalived.service查看状态

在这里插入图片描述

完成keepalived的安装

5. keepalived来实现nginx的高可用

修改下/etc/keepalived/keepalived.conf文件
172.25.10.100(主)
在这里插入图片描述

172.25.10.110(备)
在这里插入图片描述

两个虚拟机进行服务重启或者开启服务

systemctl restart keepalived

进行检查,VIP只在master中。
在这里插入图片描述
在这里插入图片描述
虚拟机访问VIP
在这里插入图片描述

6、Keepalived高可用的验证

1)模拟keepalived集群出现故障,master宕机,验证高可用是否生效
master(172.25.10.100)服务器关闭keepalived
systemctl stop keepalived
在这里插入图片描述
虚拟机5访问vip

在这里插入图片描述
BACKUP查看VIP
在这里插入图片描述

因为master宕机,Keepalived集群的backup服务器收不到来自master的心跳包,所以backup认为master死亡,backup会重新选举新的master
因为只有一台backup,所以vip会出现这台服务器

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keepalived,基于 CentOS 7构建nginx的Keepalived 高可用群集。 的相关文章

  • 出现错误 /usr/bin/env: 节点:权限被拒绝

    我已经在我的服务器 Centos 上完成了 ODOO v9 安装 一切都已安装成功 登录页面也可以正常工作 但登录后我收到一个包含以下错误的页面 usr bin env node Permission Denied 我尝试更改权限 但我的问
  • EC2 增加大小后无法调整卷大小

    我已按照调整 EC2 卷大小的步骤进行操作 停止实例 拍摄当前卷的快照 在同一区域中从上一个快照创建了一个更大大小的新卷 从实例中分离旧卷 将新卷附加到同一安装点的实例 旧卷是 5GB 我创建的卷是 100GB 现在 当我重新启动实例并运行
  • 如何将亚马逊颁发的免费证书配置到nginx.config

    我已经安装了nginx服务器在Amazon Linux 2环境 在创建弹性负载均衡器期间 我创建了 Amazon 的免费证书 现在 我想通过以下方式访问我的服务器https port 443 我该如何配置这个SSL证书在nginx conf
  • 在“git pull”我的 Django 项目后重新启动/重新加载 Gunicorn(通过 Upstart)的更好方法

    我正在寻找比sudo restart projectname每次我发出git pull origin master 它会下载我对 Django 项目的最新更改 这restart我相信该命令与 Upstart 有关 我用它来启动 停止我的 G
  • nginx 将虚拟目录重写为文件

    这应该很容易做到 但我的头撞在墙上了 如果我收到对 www mysite com mypath 的请求 我想提供 www mysite com myotherpath thisfile html 的内容 我如何使用 nginx 配置来做到这
  • Bash:更新文件中的变量

    我知道这是一个简单的答案 在找到答案之前我可能可以继续在谷歌上进行挖掘 但我的日程很紧 我希望能得到一个轻松的答复 我需要在安装时更新 ifcfg eth0 中的变量 换句话说 这就是需要发生的事情 以下变量需要更改 ONBOOT no B
  • 如何将多个域路由到多个节点应用程序?

    我习惯了典型的 Lamp Web 托管环境 您只需单击 cpanel 中的几个按钮 您的域就会被分区并映射到 htdocs 中的文件夹 我经常使用 Node js 但做同样的事情似乎并不那么简单 如果我有多个节点应用程序 并且我想将doma
  • kubernetes 集群中 django 应用程序的 Nginx 配置

    我在为部署在 kubernetes 中的 django 应用程序创建 nginx 配置文件时遇到困难 Nginx 和 app 是同一集群中的两个独立容器 据我了解 容器可以通过 127 0 0 1 XX 和主机名相互通信 我为此使用 min
  • 使用 FastCGI 运行 Lua 脚本

    我目前正在尝试找出使用 FastCGI 与 lighttpd 或 Nginx 一起运行 Lua 脚本的方法 我唯一能挖到的是WSAPI http keplerproject github com wsapi 开普勒计划的一部分 但我想知道是
  • kubernetes nginx ingress 无法将 HTTP 重定向到 HTTPS

    我有一个托管在 Google Cloud 平台中的网络应用程序 该应用程序位于负载均衡器后面 而负载均衡器本身位于入口后面 入口设置了 SSL 证书 并按预期接受 HTTPS 连接 但有一个问题 我无法让它将非 HTTPS 连接重定向到 H
  • Docker:Nginx 和 php5-fpm docker 不说话

    我想进行完全 Docker 化的 Drupal 安装 我的第一步是让容器与 Nginx 和 php5 fpm 一起运行 两者都基于 Debian 我在 CoreOS alpha 频道 使用 Digital Ocean 我的 Dockerfi
  • 如何正确链接 php-fpm 和 Nginx Docker 容器?

    我正在尝试链接 2 个单独的容器 nginx 最新 https registry hub docker com nginx php fpm https registry hub docker com php 问题是 php 脚本不起作用 也
  • Composer 已安装,但获取 /usr/bin/env: php: No such file or directory

    在 CentOS 7 上 我安装了 PHP 7 1 然后我安装了作曲家 cd tmp curl sS https getcomposer org installer php71 gt used php71 instead of php ph
  • nginx 和 uwsgi 非常大的文件上传(>3Gb)

    也许有人知道该怎么做 我正在尝试上传大于 3Gb 的文件 没问题 如果我使用以下配置上传高达 2Gb 的文件 Nginx client max body size 5g client body in file only clean clie
  • CentOS目录结构是树形的吗?

    CentOS 上有相当于树的东西吗 如果你的 Centos 系统上没有安装 tree 无论如何我通常建议服务器设置使用最小安装磁盘 你应该在命令行中输入以下内容 yum install tree y 如果没有安装 那是因为您没有正确的存储库
  • nginx位置正则表达式,匹配多次

    如何在 nginx 位置正则表达式中多次匹配 看来 x x 语法永远不起作用 例如 location abc w 1 3 从来不工作 您必须引用包含以下内容的位置 or 人物 location abc w 1 3 否则 nginx 将其解析
  • Docker 中的 NGINX 缓存 IP 地址并提供错误的 Content-Type

    Summary 我想让NGINX 不是NGINX Plus 通过使用变量从DNS名称重新解析IP地址proxy pass 如建议的这篇 Nginx 官方文章 在变量中设置域名 部分 https www nginx com blog dns
  • Openresty 中的并发模型是什么?

    我很难理解 openresty 或 nginx 的并发模型 我读了Lua变量作用域 http wiki nginx org HttpLuaModule Lua Variable Scope 它解释了变量的生命周期 但它没有说明对它们的并发访
  • 抑制 nginx 访问被拒绝错误日志

    我在 nginx 中设置了一些规则来拒绝 IP 访问 这很有效 但对于来自被拒绝 IP 的每个请求 都会记录以下开头的错误 error 7325 0 5761 access forbidden by rule client 有没有办法抑制这
  • NGinx $proxy_add_x_forwarded_for 和 real_ip_header

    我在 NGinx 下有一个 web 应用程序和另一个前端负载均衡器 如下所示 x x x x IP 地址 客户端 a a a a gt LB b b b b gt NGX c c c c gt WEBAPP d d d d 这是我的 NGi

随机推荐

  • STM32CubeMX----基本定时器(TIM6、TIM7)

    基本定时器TIM6 TIM7 的相关参数 Activated 激活TIM6 把前面的方框选中局表示激活了TIM6 One Pulse Mode STM32F103定时器的One Pulse Mode是一种特殊的计数模式 它只产生一个脉冲输出
  • win10 安装mysql-5.7.23-winx64

    下载MYSQL 官网下载MYSQL5 7 23版本 链接地址https www mysql com downloads 下载流程图如下 2 安装 直接解压到D盘 解压后的目录结构为 注不需要手动新建data和my ini文件 这两个是通过命
  • 关于element-ui表格table设置header-cell-class-name样式不起作用的原因分析

    在编写表格的时候想给表头添加样式 使用 header cell class name怎么都添加不上样式 检查元素发现连class都没添加上 查了很多资料有人说element之前版本不支持这属性 但我使用的并不是之前的版本啊 有人说是添加sc
  • 柚城后台管理系统--Vue+ElementUi+MySQL+NodeJs

    柚城后台管理系统 介绍 该项目是基于前后端分离的开发模式 基于Vue技术栈的SPA单页面项目 后端主要操作数据库并向前端暴露一些API接口 前端主要负责绘制页面同时 利用ajax调用后端提供的接口 具体实现功能有 用户管理 权限管理 商品管
  • Aviator表达式

    1 正则表达式 匹配 Map
  • 如何在Unity中使用AR Foundation和ARCore创建一个项目并编译到Android 11手机设备中

    最近又开始学如何使用Unity进行AR开发 因为Unity开发的AR Foundation在各种设备 例如Android iOS HoloLens 的原生AR SDK 例如ARCore ARKit Windows 10 SDK 上进行了封装
  • Flutter Overlay、OverlayState、OverlayEntry 叠加 Toast Demo

    叠加组件 可以悬浮在其他组件上边 我们通常使用他开发Toast PopupWindow弹窗等 虽然可以直接创建Overlay 但最常见的是在WidgetsApp或MaterialApp中使用导航器创建的叠加层 使用方法 获取实例 Overl
  • ajax用iframe,使用ajax Post请求更新iframe内容

    我正在制作Rich文本编辑器 我有一个textarea和一个iframe 我想更新一个iframe内容点击某个按钮 其中ajax post请求传递给它textareas值 这是我的HTML代码 这是js view function func
  • 微服务容器化实践——微服务引入的问题和解决方案

    文章目录 什么是微服务 微服务的不足 微服务的好处 微服务架构引入的问题及解决方案 单体架构与微服务架构的对比 什么是微服务 使用一套小服务来开发单个应用的方式 每个服务运行在独立的进程里 一般采用轻量级的通讯机制互联 并且它们可以通过自动
  • 数据库:存放变长记录的Page类代码实现

    原文链接 https littlefish33 cn DataBase SimplePage 设计思路 代码实现 Page类的初始化结构 插入记录的一种情况 删除记录 插入记录的另一种情况 排序 总结 设计思路 文章实现的思路大致参考教材D
  • vue项目关闭提交代码时的代码校验(整理)

    赋链接一份 其他博主文章 记录 vue项目关闭提交代码时的代码校验 vue vue项目一般会有一个提交代码时的校验 一般提交需要git commit m no verify 才能跳过校验 不想每次提交都输入 no verify可以进行如下配
  • C++operator()(重载小括号运算符)

    在C 语言中有时候需要重载运算符 今天我们主要介绍它主要应用的场合 仿函数 先考虑一个简单的例子 假设有一个vector 你的任务是统计长度小于5的string的个数 如果使用count if函数的话 你的代码可能长成这样 bool Len
  • CESM2 实验笔记

    文章目录 一 关于重启 运行方式 重启文件 初始文件 1 重新启动 RESTART 1 1 关于重启文件 2 RUN TYPE 初始化运行方式 startup branch hybrid 3 branch 或者 hybrid运行的示例 4
  • SQL注入漏洞(绕过篇)

    在学习完了SQL注入的原理 SQL注入的类型后那么可以说SQL注入已经大致了解了 但事实是现实中开发人员不可能让你这么简单就攻击到数据库 他们一般会对已输入或可输入的数据做一定限制 这篇文章我主要对SQL注入中代码或者waf过滤的绕过做一次
  • 网络安全设备之防火墙技术详解

    一 防火墙概述 1 网络防火墙简介 无论是大中型企业网络 还是小型家庭办公网络 对网络安全方面的要求一直保持上升趋势 微软公司的官方网站尚且难逃黑客的魔爪 普通的中小网络更是难以抵抗了 解决网络安全问题最常用的防护手段就是安装网络防火墙 对
  • 2023最新CISP模拟考试题库及答案(一)

    1 在橙皮书的概念中 信任是存在于以下哪一项中的 A 操作系统 B 网络 C 数据库 D 应用程序系统 答案 A 备注 标准和法规 TCSEC 2 下述攻击手段中不属于DOS攻击的是 A Smurf攻击 B Land攻击 C Teardro
  • 593. Valid Square

    Given the coordinates of four points in 2D space return whether the four points could construct a square The coordinate
  • 【DL】第 4 章 : 什么是神经网络:概述、应用和优势

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • jupyter notebook导入上级目录的文件

    在jupyter中 使用 os path realpath 可以得到当前文件的路径 import sys import os os chdir os path dirname os path realpath sys path insert
  • Keepalived,基于 CentOS 7构建nginx的Keepalived 高可用群集。

    目录 1 简述 Keepalived 的主要功能 应用场合 2 使用 Keepalived 实现双机热备时 主 备服务器的配置存在哪些区别 3 构建 LVS Keepalived 高可用群集时 如何缩短故障中断时间 4 基于 CentOS