当前位置: 首页 > news >正文

LVS keepalived实现高可用负载群集

目录

1 Keepalived及其工作原理

1.1 Keepalived体系主要模块及其作用:

2 LVS+Keepalived 高可用群集部署

2.1 配置负载调度器(主、备相同)

2.1.1 配置keeplived(主、备DR 服务器上都要设置)

2.1.2 启动 ipvsadm 服务

2.1.3 调整 proc 响应参数

2.2 配置节点服务器

2.3 测试验证

3 知识点


1 Keepalived及其工作原理

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。

在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP(VIP),主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

1.1 Keepalived体系主要模块及其作用:

keepalived体系架构中主要有三个模块,分别是core、check和vrrp。 ●core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。 ●vrrp模块:是来实现VRRP协议的。(调度器之间的健康检查和主备切换) ●check模块:负责健康检查,常见的方式有端口检查及URL检查。(节点服务器的健康检查)

2 LVS+Keepalived 高可用群集部署

服务器规划:

主DR 服务器:192.168.30.105

备DR 服务器:192.168.30.102

Web 服务器1:192.168.30.107

Web 服务器2:192.168.30.108

vip:192.168.30.188

客户端:192.168.30.115

2.1 配置负载调度器(主、备相同)

systemctl stop firewalld.service
setenforce 0yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs

2.1.1 配置keeplived(主、备DR 服务器上都要设置)

vim keepalived.conf
......
global_defs {						#定义全局参数
--10行--修改,邮件服务指向本地smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02router_id LVS_01
--14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接#vrrp_strict
}vrrp_instance VI_1 {				#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUPstate MASTER
--21行--修改,指定承载vip地址的物理接口interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	virtual_router_id 10#nopreempt		#如果设置非抢占模式,两个节点state必须为BACKUP,并加上配置 nopreempt
--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90priority 100advert_int 1					#通告间隔秒数(心跳频率)authentication {				#定义认证信息,每个热备组保持一致auth_type PASS				#认证类型
--27行--修改,指定验证密码,主备服务器保持一致auth_pass abc123}virtual_ipaddress {				#指定群集vip地址192.168.80.188}
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.80.188 80 {delay_loop 6					#健康检查的间隔时间(秒)lb_algo rr						#指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)lb_kind DRpersistence_timeout 0			#连接保持时间(秒)protocol TCP					#应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口real_server 192.168.80.12 80 {weight 1					#节点的权重
--45行--删除,添加以下健康检查方式		TCP_CHECK {connect_port 80			#添加检查的目标端口connect_timeout 3		#添加连接超时(秒)nb_get_retry 3			#添加重试次数delay_before_retry 3	#添加重试间隔}}real_server 192.168.80.13 80 {		#添加第二个 Web节点的地址、端口weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}##删除后面多余的配置##
}

systemctl start keepalived
ip addr						#查看虚拟网卡vip

2.1.2 启动 ipvsadm 服务

                                                        ---192.168.30.105---

ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadmipvsadm -ln
#如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived

                                                        ---192.168.30.105---

​​​​​​​

2.1.3 调整 proc 响应参数

关闭Linux 内核的重定向参数响应 v

vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0sysctl -p

2.2 配置节点服务器

systemctl stop firewalld
setenforce 0--192.168.30.107---
echo 'yuan shen !' > /apps/nginx/html/index.html--192.168.30.109---
echo 'this is benet web!' > /apps/nginx/html/index.htmlvim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.30.188
NETMASK=255.255.255.255service network restart 或 systemctl restart network
ifup lo:0
ifconfig lo:0
route add -host 192.168.30.188 dev lo:0vim /etc/sysctl.confnet.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 = 2sysctl -p

2.3 测试验证

在客户端访问 http://192.168.30.188/

再在主服务器关闭 keepalived 服务后再测试, systemctl stop keepalived

配备成功

3 知识点

Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP? 答案: Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器。 然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务器。 优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址。

keepalived的抢占与非抢占模式: 抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP 非抢占式俩节点state必须为bakcup,且必须配置nopreempt。 注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了。

http://www.lryc.cn/news/167498.html

相关文章:

  • HTTP RESTFul RPC
  • 短视频seo矩阵系统源码开发搭建--代用户发布视频能力
  • 真实的产品开发中,后端的设计规约可以写哪些
  • Pytorch 多卡并行(2)—— 使用 torchrun 进行容错处理
  • Java异常处理(详解)
  • 嵌入式-数据进制之间的转换
  • 腾讯mini项目-【指标监控服务重构】2023-08-20
  • 智能文本纠错API的应用与工作原理解析
  • 在springboot下将mybatis升级为mybatis-plus
  • Vuex详解:Vue.js的状态管理方案
  • 栈与队列经典题目——用队列实现栈
  • Python stomp 发送消息无法显示文本
  • postgresql-视图
  • 科技资讯|Vision Pro头显无损音频仅限USB-C AirPods Pro 2耳机
  • Postman应用——初步了解postman
  • 分析报告显示,PHP是编程语言主力军,且在电商领域占据“统治地位”
  • 关于Greenplum Platform Extension Framework(PXF)
  • 编程获取图像中的圆半径
  • 什么是Scrum?如何实施Scrum(敏捷开发)以及敏捷工具
  • 提升运营效率:仓储可视化的实时监控与优化
  • 代理模式和单一职责原理一文读懂(设计模式与开发实践 P6)
  • Linux网络编程|TCP编程
  • FPGA----VCU128的DDR4无法使用问题(全网唯一)
  • 【毕设选题】flink大数据淘宝用户行为数据实时分析与可视化
  • 机器学习练习-决策树
  • 分类预测 | Matlab实现基于LFDA-SVM局部费歇尔判别数据降维结合支持向量机的多输入分类预测
  • Say0l的安全开发-代理扫描工具-Sayo-proxyscan【红队工具】
  • 使用FFmpeg+ubuntu系统转化flac无损音频为mp3
  • I/O多路复用三种实现
  • DataInputStream数据读取 Vs ByteBuffer数据读取的巨大性能差距