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 服务器120.0.0.101(VIP 20.0.0.10)
Web 服务器220.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服务器);

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

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

相关文章

基于STM32+OneNet设计的物联网智慧路灯

一、前言 近年来,构筑智慧城市、推动城镇发展被国家列入重要工作范畴。发布的《超级智慧城市报告》显示,全球已启动或在建的智慧城市有1000多个,中国在建500个,远超排名第二的欧洲(90个)。从在建智慧城市的…

Android oaid

官方GitHub地址 https://github.com/gzu-liyujiang/Android_CN_OAID 生成和用途介绍 https://www.jianshu.com/p/1c7ef27d6db4 图片来源于上述网站 其他关于id的介绍 https://www.cnblogs.com/chenKnowledgeConllection/p/17380960.html https://zhuanlan.zhihu.com/p/55…

微信小程序拉起支付报: 调用支付JSAPI缺少参数: total_fee

1. 调用支付JSAPI缺少参数: total_fee 2. 检查返回给前端调起支付的参数是否正确 一开始是params.put("package", prepay_id); 回来改回params.put("package", "prepay_id"prepay_id);

leetcode 415.字符串相加

⭐️ 题目描述 🌟 leetcode链接:https://leetcode.cn/problems/add-strings/description/ ps: 从两个字符串的末尾开始遍历,依次相加,若大于等于 10 则使用一个变量记录进位,遍历的时候若两个字符串其中一…

ASR(自动语音识别)任务中的LLM(大语言模型)

一、LLM大语言模型的特点 二、大语言模型在ASR任务中的应用 浅度融合 浅层融合指的是LLM本身并没有和音频信息进行直接计算。其仅对ASR模型输出的文本结果进行重打分或者质量评估。 深度融合 LLM与ASR模型进行深度结合,统一语音和文本的编码空间或者直接利用ASR…

OKCC在系统安全方面做了哪些措施?

语音通信行业,运营者普遍比较关心的问题是,运营风险如何控制?运营安全如何保证?OKCC呼叫中心又有那些风控措施来保证运营安全。 当前阶段,语音通信运营,最主要的风险主要包括以下几个方面: 一、…

无涯教程-Perl - wait函数

描述 该函数等待子进程终止,返回已故进程的进程ID。进程的退出状态包含在$?中。 语法 以下是此函数的简单语法- wait返回值 如果没有子进程,则此函数返回-1,否则将显示已故进程的进程ID Perl 中的 wait函数 - 无涯教程网无涯教程网提供描述该函数等待子进程终止,返回已故…

Three.js 实现模型材质局部辉光效果和解决辉光影响场景背景图显示的问题

1.Three.js 实现模型材质局部辉光效果 2.解决辉光效果影响场景背景图显示的问题 相关API的使用: 1. EffectComposer(渲染后处理的通用框架,用于将多个渲染通道(pass)组合在一起创建特定的视觉效果) 2. …

Java-运算符和控制语句(上)(基于c语言的补充)

算术运算符 关于求余 不管分子,分母是正还是负,对于分母,直接取正;对于分子若有负号,则先提取出来;剩下两个正的分子分母运算;最后,若刚才的分子有负号,对最后的结果添加…

Java版 招投标系统简介 招投标系统源码 java招投标系统 招投标系统功能设计tbms

​ 项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以…

scala中json4s 使用详解

预备知识 json4s的数据结构AST (Abstract Syntax Tree)。 sealed abstract class JValue case object JNothing extends JValue // zero for JValue case object JNull extends JValue case class JString(s: String) extends JValue case class JDouble(num: Double) extend…

数字化时代,数据仓库和商业智能BI系统演进的五个阶段

数字化在逐渐成熟的同时,社会上也对数字化的性质有了进一步认识。当下,数字化除了前边提到的将复杂的信息、知识转化为可以度量的数字、数据,在将其转化为二进制代码,引入计算机内部,建立数据模型,统一进行…

CAS 一些隐藏的知识,您了解吗

目录 ConcurrentHashMap 一定是线程安全的吗 CAS 机制的注意事项 使用java 并行流 ,您要留意了 ConcurrentHashMap 在JDK1.8中ConcurrentHashMap 内部使用的是数组加链表加红黑树的结构,通过CASvolatile或synchronized的方式来保证线程安全的,这些原理…

TikTok或将于8月底关闭半闭环、速卖通或将推出“半托管”模式

《出海周报》是运营坛为外贸企业主和外贸人独家打造的重要资讯栏目,聚焦企业出海、海外市场动态、海外监管政策等方面,以简捷的方式,提升读者获取资讯的效率。 接下来运营坛为大家带来第15期出海周报,快来看看这周国内外市场发生了…

C++--红黑树

1.什么是红黑树 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因…

【Unity细节】Unity中的层级LayerMask

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏:unity细节和bug 😶‍🌫️优质专栏 ⭐【…

Mybatis Plus中使用LambdaQueryWrapper进行分页以及模糊查询对比传统XML方式进行分页

传统的XML分页以及模糊查询操作 传统的XML方式只能使用limit以及offset进行分页&#xff0c;通过判断name和bindState是否为空&#xff0c;不为空则拼接条件。 List<SanitationCompanyStaff> getSanitationStaffInfo(Param("name") String name,Param("bi…

前端---需要了解浏览器相关知识--浏览器请求服务器资源---缓存

知识点1: 掘金1&#xff1a;浏览器缓存 掘金2 :浏览器缓存 一、浏览器缓存 请求&#xff08;静态资源 &#xff5c; 动态资源&#xff09; 一、缓存是什么&#xff1f; 如果没有缓存的机制 每次都要重新请求静态资源 1.从网络上的下载时间&#xff0c;肯定大于从硬盘里读的…

【S32K 进阶之旅】S32K 芯片的解锁

在使用 S32K1xx MCU 的过程中&#xff0c;因为某些不当操作导致芯片被锁、加密的情况偶有发生&#xff0c;在此总结一篇如何解锁芯片的文档&#xff0c;希望能够帮到有需要的人。 1. S32K 芯片被锁的现象及原因分析1&#xff09;在S32K 系列 MCU 开发和生产过程中&#xff…

常用系统命令

重定向 cat aa.txt > bbb.txt 将输出定向到bbb.txt cat aaa.txt >> bbb.txt 输出并追加查看进程 ps ps -ef 显示所有进程 例⼦&#xff1a;ps -ef | grep mysql |&#xff1a;管道符 kill pid 结束进程&#xff0c; 如 kill 3732&#xff1b;根据进程名结束进程可以先…