LVS-DR+keepalived实现高可用负载群集
VRRP 通信原理:
VRRP就是虚拟路由冗余协议,它的出现就是为了解决静态路由的单点故障。
VRRP是通过一种竞选的一种协议机制,来将路由交给某台VRRP路由。
VRRP用IP多播的方式(多播地址224.0.0.18)来实现高可用的通信,工作时主节点发包,备节点接收包,当备节点接收不到主节点发的数据包时候,就启动接管主节点的资源,备节点可以有多个,通过优先级来进行竞选,但一般keepalived系统运维工作时一对。
VRRP使用加密协议加密数据,但keepalive官方目前还是推荐用明文的方式认证类型和密码。
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
Keepalived体系主要模块及其作用:
keepalived体系架构中主要有三个模块,分别是core、check和vrrp。
●core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
●vrrp模块:是来实现VRRP协议的。
●check模块:负责健康检查,常见的方式有端口检查及URL检查。
以下实验使用LVS-DR+keepalived的抢占模式实现高可用负载群集:
Web 服务器1:20.0.0.101(VIP 20.0.0.10)
Web 服务器2:20.0.0.102(VIP 20.0.0.10)NFS 共享存储器:20.0.0.103LVS+keepalived 主负载调度器:20.0.0.104(VIP 20.0.0.10)LVS+keepalived 备负载调度器:20.0.0.105(VIP 20.0.0.10)网关/路由器:20.0.0.2
客户端:192.168.116.50一、配置NFS共享存储
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0yum -y install nfs-utils rpcbind
mkdir /opt/nfs/server1 /opt/nfs/server2
chmod -R 777 /opt/nfsvim /etc/exports
/opt/nfs 20.0.0.0/24(rw,sync)
/opt/nfs/server1 20.0.0.0/24(rw,sync)
/opt/nfs/server2 20.0.0.0/24(rw,sync)systemctl restart rpcbind.service
systemctl restart nfs.service检查发布的共享策略
showmount -e
在共享目录中添加web测试页面:
mkdir /opt/nfs/server1 server2
echo this is web-01 ! >>/opt/nfs/server1/index.html
echo this is web-02 ! >>/opt/nfs/server2/index.html
检查一下是否写入成功:
cat /opt/nfs/server1/index.htmlcat
cat /opt/nfs/server2/index.html二.配置节点web服务(20.0.0.101 20.0.0.102两台的配置相同)
【安装 Nginx 服务】
1、安装依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make2、创建运行用户
useradd -M -s /sbin/nologin nginx3、编译安装
cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/cd nginx-1.22.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_modulemake -j 4 && make install4、优化路径
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/5、添加 Nginx 系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target[Unit]:这个部分定义了服务单元的元数据。
Description: 描述该服务单元的信息,描述为"nginx"。
After: 定义服务单元所依赖的其他单元,这里表示服务需要在网络加载完成之后启动。[Service]:这个部分定义了服务的运行配置。
Type: 指定服务的类型,这里是forking,表示服务是一个后台进程(通常是fork出子进程)。
PIDFile: 指定保存主进程ID的文件路径,Nginx将会把主进程ID写入这个文件,以便Systemd可以追踪和管理进程。
ExecStart: 指定启动服务的命令。这里是启动Nginx的命令/usr/local/nginx/sbin/nginx。
ExecReload: 指定重新加载配置的命令。当执行此命令时,Systemd将发送HUP信号给主进程,Nginx将重新加载配置文件。
ExecStop: 指定停止服务的命令。当执行此命令时,Systemd将发送QUIT信号给主进程,Nginx将优雅地停止服务。
PrivateTmp: 将此项设置为true,表示为服务提供独立的临时目录。[Install]:这个部分定义了服务的安装配置。
WantedBy: 指定服务所属的目标(target),这里是multi-user.target,表示服务在多用户模式下启动。chmod 777 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service查看nginx服务是否启动:netstat -antp | grep 80将网站根目录挂载到各自的共享目录
首先打开nfs服务:
systemctl restart rpcbind.service
systemctl restart nfs.servicemount 20.0.0.103:/opt/nfs/server1 /usr/local/nginx/html/
mount 20.0.0.103:/opt/nfs/server2 /usr/local/nginx/html/在web01 -02上查看是否共享成功cat /usr/local/nginx/html/index.html
cat /usr/local/nginx/html/index.html设置回环网卡,虚拟ip(web-01 web-02都要设置)cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=20.0.0.10
NETMASK=255.255.255.255
ONBOOT=yes~ ifup lo:0 配置回环网卡完成后
ifconfig 查看一下是否配置成功添加静态路由(将数据包封锁在回环网卡中)#临时配置
route add -host 20.0.0.10 dev lo:0#永久配置
vim /etc/rc.local
/sbin/route add -host 20.0.0.10 dev lo:0
chmod +x /etc/rc.d/rc.local调整内核的ARP响应参数(阻止更新VIP的MAC地址,防止发生冲突)vim /etc/sysctl.conf
#添加
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2#加载配置文件并查看
sysctl -p三、配置主备LVS+keepalived负载调度器(keepalived-01 ;keepalived-02)关闭防火墙下载keepalived和ipvsadm,并修改内核参数systemctl stop firewalld.service 。
systemctl disable firewalld.service
setenforce 0modprobe ip_vs
yum -y install ipvsadm keepalivedvim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0sysctl -p
修改主负载器配置文件:
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak #改配置文件前先备份
vim keepalived.confglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_01#vrrp_skip_check_adv_addr#vrrp_strict#vrrp_garp_interval 0#vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass abc123}virtual_ipaddress {20.0.0.10}
}virtual_server 20.0.0.10 80 {delay_loop 6lb_algo rrlb_kind DRpersistence_timeout 10protocol TCPreal_server 20.0.0.101 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3
}
}
real_server 20.0.0.102 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3
}
}
}
修改备负载器配置文件(与主配置一致,只需修改以下部分) :global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_02#vrrp_skip_check_adv_addr#vrrp_strict#vrrp_garp_interval 0#vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass abc123}virtual_ipaddress {20.0.0.10}
}virtual_server 20.0.0.10 80 {delay_loop 6lb_algo rrlb_kind DRpersistence_timeout 10protocol TCPreal_server 20.0.0.101 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3
}
}
real_server 20.0.0.102 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3
}
}
}
启动keepalived再启动ipvsadm(ipvsadm会自动加载keepslived中的配置:systemctl restart keepalived.service
ipvsadm-save > /etc/sysconfig/ipvsadm#启动ipvsadm (分别添加主备负载均衡器VIP 的分发策略)
systemctl restart ipvsadm.serviceipvsadm -C ##清空规则
ipvsadm -A -t 20.0.0.10:80 -s rr
ipvsadm -a -t 20.0.0.10:80 -r 20.0.0.101:80 -g
ipvsadm -a -t 20.0.0.10:80 -r 20.0.0.102:80 -g查看主负载和副负载均衡器:
ipvsadm -ln访问:20.0.0.10
可以将主负载器服务停止或关机(模拟宕机),继续访问 20.0.0.10查看主备切换是否正常
脑裂现象的解释和解决办法:
1.解释
在抢占模式中,MASTER需要定时发送报文通告BACKUP自己仍在运作,但是当MASTER还在运作,但其中的线路或交换机等出现故障导致BACKUP不能收到通告时,会认为MASTER已经失效,此时BACKUP抢占VIP会导致VIP同时存在,这就是脑裂现象。
2.解决方法
1.主备服务器之间使用双链路通信;
2. 通过脚本来实时监控主备的网络状态,然后再根据脚本逻辑采取措施(关掉主服务器的keepalived服务器);
3. 简单粗暴,直接重启服务器。
相关文章:
LVS-DR+keepalived实现高可用负载群集
VRRP 通信原理: VRRP就是虚拟路由冗余协议,它的出现就是为了解决静态路由的单点故障。 VRRP是通过一种竞选的一种协议机制,来将路由交给某台VRRP路由。 VRRP用IP多播的方式(多播地址224.0.0.18)来实现高可用的通信&…...
阿里云国际版注册教程
什么是阿里云国际版? 阿里云国际版是阿里云专为海外客户供给的服务器及核算资源,涵盖了云主机、弹性裸金属服务器、容器服务、数据库及安全和监控等一系列云核算解决方案。 与其他云核算服务供给商不同,阿里云国际版在安全性、稳定性、性能方…...
基于百度文心大模型创作的实践与谈论
文心概念 百度文心大模型源于产业、服务于产业,是产业级知识增强大模型。百度通过大模型与国产深度学习框架融合发展,打造了自主创新的AI底座,大幅降低了AI开发和应用的门槛,满足真实场景中的应用需求,真正发挥大模型…...
Java基础知识题(五)
系列文章目录 Java基础知识题(一) Java基础知识题(二) Java基础知识题(三) Java基础知识题(四) Java基础知识题(五) 文章目录 系列文章目录 前言 一 Java的数据连接——JDBC 1. 简述什么是JDBC?重点 2. JDBC PreparedStatement比Statement有什么优势&…...
攻防世界-fileinclude
原题 解题思路 题目已经告诉了,flag在flag.php中,先查看网页源代码(快捷键CTRLU)。 通过抓包修改,可以把lan变量赋值flag。在cookie处修改。新打开的网页没有cookie,直接添加“Cookie: languagephp://filte…...
流媒体服务器SRS的搭建及QT下RTMP推流客户端的编写
一、前言 目前市面上有很多开源的流媒体服务器解决方案,常见的有SRS、EasyDarwin、ZLMediaKit和Monibuca。这几种的对比如下: (本图来源:https://www.ngui.cc/zz/1781086.html?actiononClick) 二、SRS的介绍 SRS&am…...
Effective C++条款11——在operator=中处理“自我赋值”(构造/析构/赋值运算)
“自我赋值”发生在对象被赋值给自己时: class Widget {}; Widget w; // ... w w; // 赋值给自己 这看起来有点愚蠢,但它合法,所以不要认定客户绝不会那么做。此外赋值动作并不总是那么可被一眼辨识出来,例如: a[i] a[j]; …...
可视化绘图技巧100篇基础篇(八)-气泡图(一)
目录 前言 适用场景 图例 绘图工具及代码实现 EXCEL 1、单轴气泡图...
Elasticsearch查询之Disjunction Max Query
前言 Disjunction Max Query 又称最佳 best_fields 匹配策略,用来优化当查询关键词出现在多个字段中,以单个字段的最大评分作为文档的最终评分,从而使得匹配结果更加合理 写入数据 如下的两条例子数据: docId: 1 title: java …...
Lock wait timeout exceeded; try restarting transaction的错误
文章目录 一、异常发现二、异常定位1、锁表语句确认2、实际场景排查三、解决思路1、本次解决方式2、其他场景解决思路扩展1、【治标方法】innodb_lock_wait_timeout 锁定等待时间改大2、【治标方法】事务信息查询3、【治标方法】如果杀掉线程依然不能解决,可以查找执行线程耗时…...
ShardingSphere01-docker环境安装
使用docker安装数据库是一个非常好的选择,后续的读写分离、数据分片等功能的数据库都是由docker创建。 一、安装准备 1、前提条件 Docker可以运行在Windows、Mac、CentOS、Ubuntu等操作系统上 Docker支持以下的CentOS版本: CentOS 7 (64-bit)CentOS …...
Java代码审计13之URLDNS链
文章目录 1、简介urldns链2、hashmap与url类的分析2.1、Hashmap类readObject方法的跟进2.2、URL类hashcode方法的跟进2.3、InetAddress类的getByName方法 3、整个链路的分析3.1、整理上述的思路3.2、一些疑问的测试3.3、hashmap的put方法分析3.4、反射3.5、整个代码 4、补充说明…...
区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归时间序列区间预测
区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRBiGRU双向门控循环单元分位数回归时间序列…...
Python面向对象植物大战僵尸
先来一波效果图 来看看如何设计游戏架构 import sysimport pygameclass BaseSprite(pygame.sprite.Sprite):def __init__(self, name):super().__init__()self.image pygame.image.load(name)self.rect self.image.get_rect()class AnimateSprite(BaseSprite):def __init__(…...
大屏模板,增加自适应(包含websocket)
1、简单的Node服务端 const WebSocket require(ws);// 创建 WebSocket 服务器 const wss new WebSocket.Server({ port: 8888 });const getHeader (protocol) > {const protocolArr protocol.split(,)const headers {};for (let i 0; i < protocolArr.length; i …...
电商系统架构设计系列(九):如何规划和设计分库分表?
上篇文章中,我给你留了一个思考题:分库分表该如何设计? 今天这篇文章,我们来聊一下如何规划和设计分库分表,以及要考虑哪些问题。 引言 当要解决海量数据的问题,就必须要用到分布式的存储集群了ÿ…...
从Web 2.0到Web 3.0,互联网有哪些变革?
文章目录 Web 2.0时代:用户参与和社交互动Web 3.0时代:语义化和智能化影响和展望 🎉欢迎来到Java学习路线专栏~从Web 2.0到Web 3.0,互联网有哪些变革? ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页&#x…...
QT中资源文件resourcefile的使用,使用API完成页面布局
QT中资源文件resourcefile的使用 之前添加图标的方法使用资源文件的方法创建资源文件资源文件添加前缀资源文件添加资源使用资源文件中的资源 使用API完成布局使用QHBoxLayout完成水平布局使用QVBoxLayout完成垂直布局使用QGridLayout完成网格布局 在Qt中引入资源文件好处在于他…...
2337. 移动片段得到字符串
题目描述: 给你两个字符串 start 和 target ,长度均为 n 。每个字符串 仅 由字符 ‘L’、‘R’ 和 ‘_’ 组成,其中: 字符 ‘L’ 和 ‘R’ 表示片段,其中片段 ‘L’ 只有在其左侧直接存在一个 空位 时才能向 左 移动&a…...
Java并发编程第5讲——volatile关键字(万字详解)
volatile关键字大家并不陌生,尤其是在面试的时候,它被称为“轻量级的synchronized”。但是它并不容易完全被正确的理解,以至于很多程序员都不习惯去用它,处理并发问题的时候一律使用“万能”的sychronized来解决,然而如…...
6.小程序api分类
事件监听 以on开头,监听某个事件触发,例如:wx.WindowResize事件 同步 以Sync结尾的是同步,可以通过函数返回值直接获取,例如:wx.setStorageSync 异步 需要通过函数接收调用结果,例如&#…...
什么是PPS和TOD时序?授时防护设备是什么?
介绍 PPS和TOD PPS和TOD是两种用于精确时间同步的技术,它们在许多领域都有广泛的应用,总的来说,PPS和TOD被广泛应用于各种需要高度精确时间同步的领域,包括通信、测量、测试、系统集成和计算机网络等。 一、PPS PPS(…...
推荐一款好用的开源视频播放器(免费无广告)
mpv是一个自由开源的媒体播放器,它支持多种音频和视频格式,并且具有高度可定制性。mpv的设计理念是简洁、高效和功能强大。 软件特点: 1. 开源、跨平台。可以在Windows\Linux\MacOS\BSD等系统上使用,完全免费无广告。Windows版解压…...
STM32 CubeMX (第三步Freertos中断管理和软件定时)
STM32 CubeMX STM32 CubeMX (第三步Freertos中断管理和软件定时) STM32 CubeMX一、STM32 CubeMX设置时钟配置HAL时基选择TIM1(不要选择滴答定时器;滴答定时器留给OS系统做时基)使用STM32 CubeMX 库,配置Fre…...
Java虚拟机(JVM):堆溢出
一、概念 Java堆溢出(Java Heap Overflow)是指在Java程序中,当创建对象时,无法分配足够的内存空间来存储对象,导致堆内存溢出的情况。 Java堆是Java虚拟机中用于存储对象的一块内存区域。当程序创建对象时,…...
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
静态库编写: 编写.o文件gcc -c(小写) seqlist.c(需要和头文件、main.c文件在同一文件目录下) libs.a->去掉lib与.a剩下的为库的名称‘s’。 -ls是指库名为s。 -L库的路径。 makefile文件编写: CFLAGS-Wall -O2 -g -I ./inc/ LDFLAGS-L./lib/ -l…...
Php“牵手”淘宝商品详情页数据采集方法,淘宝API接口申请指南
淘宝天猫详情接口 API 是开放平台提供的一种 API 接口,它可以帮助开发者获取商品的详细信息,包括商品的标题、描述、图片等信息。在电商平台的开发中,详情接口API是非常常用的 API,因此本文将详细介绍详情接口 API 的使用。 一、…...
如何使用CSS实现一个全屏滚动效果(Fullpage Scroll)?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 实现全屏滚动效果的CSS和JavaScript示例⭐ HTML 结构⭐ CSS 样式 (styles.css)⭐ JavaScript 代码 (script.js)⭐ 实现说明⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦…...
Docker之Compose
目录 前言 1.1Docker Swarm与Docker Compose 1.1.1Docker Swarm 1.1.2Docker Compose 1.1.2.1 三层容器 编辑 二、YAML 2.1YAML概述 2.2注意事项 2.3Docker Compose 环境安装 2.3.1下载 三、Docker-Compose配置常用字段 四、Docker-compose常用命令 五、Docker…...
安装chromedriver 115,对应chrome版本115(经检验,116也可以使用)
目录 1. 查看Chrome浏览器的版本2. 找到对应的chromedriver3. 安装ChromeDriver 1. 查看Chrome浏览器的版本 点进这个网站查看:chrome://settings/help (真是的,上一秒还是115版本,更新后就是116版本了,好在chromedi…...
wordpress禁用react/郑州网站推广优化
一、首先说一下,Hadoop有三种运行模式。 第一个是独立(或本地)运行模式:无需运行任何守护进程,所有程序都在一个同一个JVM上执行。 第二个是伪分布模式:Hadoop守护进程运行在本地机器上,模拟一个小规模的集群。 第三个…...
有人上相亲网站做传销燕窝/站长聚集地
环境:DB:Oracle11.2.0.2OS:OEL Linux (OEL)5.6现象:更改hostnamenjdyw -> hotel07重启服务器后发现crs服务无法启动[oraclehotel07 diag]$ crs_stat -tCRS-0184: 无法与 CRS 守护程序通信。[oraclehotel07diag]$ crsctl start hasCLSU-00105: 操作系统…...
个人网站设计主题/网络营销推广有效方式
Description 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径。 三角形的行数…...
西安网站seo外包/成都计算机培训机构排名前十
本文转自:https://sobug.com/article/detail/11 SSRF概述 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它…...
温州市网站建设公司/域名ip查询
转 为了做宽客选择读一个PhD值得吗? 编者按语:接触不少想往quant方向走的童鞋,对于量化交易是很感兴趣也觉得未来大有可为,但是quant由于其行业性质其门槛具有一定的专业要求。现在很多投行、银行、公募、私募等招聘职位基本都要求硕士学历&…...
h56wcom什么网站/微信营销方案
ios::sync_with_stdio(false); cin.tie(0);C中,cin和cout要与stdio同步,中间会有一个缓冲,所以导致cin,cout语句输入输出缓慢,这时就可以用这个语句,取消cin,cout与stdio的同步,说白…...