LVS+Keepalived 高可用集群

一.Keepalived工具介绍

1.支持故障自动切换(Failover)

2.支持节点健康状态检查(Health Checking)

3.基于vrrp协议完成地址流动

4.为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)

5.为ipvs集群的各RS做健康状态检测

6.基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务 

7.官方网站:https://keepalived.org/

8.用户空间核心组件:

  1. vrrp stack:VIP消息通告
  2. checkers:监测real server(简单来说 就是监控后端真实服务器的服务)
  3. system call:实现 vrrp 协议状态转换时调用脚本的功能
  4. SMTP:邮件组件(报警邮件)
  5. IPVS wrapper:生成IPVS规则(直接生成ipvsadm)
  6. Netlink Reflector:网络接口(将虚拟地址ip(vip)地址飘动)

9.WatchDog:监控进程(整个架构是否有问题)

控制组件:提供keepalived.conf 的解析器,完成Keepalived配置

IO复用器:针对网络目的而优化的自己的线程抽象

内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

二.vrrp协议(虚拟路由冗余协议)

Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能

1.vrrrp是什么

是针对路由器的一种备份解决方案

由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务

每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态

若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

2.vrrp工作过程

1.选举Master,比较优先级,高的为Master,若优先级相同无Master时,比较接口IP地址,大的为Master,Master设备发送ARP报文,承担报文转发工作;

2.状态维持,Master设备周期发送通告报文,公布配置信息和工作状态;

3.Backup设备根据收到的通告报文判断Master设备是否工作正常,如果Master设备主动放弃Master地位时,会发送优先级为0的通告报文,Backup设备收到后会快速切换成Master设备或者定时器超时后Backup设备认为Master设备无法正常工作,会切换状态为Master。

3.Keeplived、VRRP及其工作原理

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

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

4.Keepalived体系主要模块

keepalived体系架构中主要有三个模块,分别是core、check和vrrp。

core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。

vrrp模块:是来实现VRRP协议的。

check模块:负责健康检查,常见的方式有端口检查及URL检查。

三.实验:搭建LVS+Keepalived 高可用集群

实验环境:

主keepalived服务器:172.16.23.10
备keepalived服务器:172.16.23.11
web1服务器:172.16.23.12
web2服务器:172.16.23.13
vip:172.16.23.100
客户机:172.16.23.200

配置负载调度器(主keepalived服务器:172.16.23.10

############################ 配置Keepalived master服务器 #################################1. #关闭防火墙
systemctl stop firewalld.service
setenforce 02. #安装服务
yum install ipvsadm keepalived -y 3. #修改配置文件keeplived.conf
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf......
global_defs {						#定义全局参数
--10行--修改,邮件服务指向本地smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02router_id LVS_01
}vrrp_instance VI_1 {				#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUPstate MASTER
--21行--修改,指定承载vip地址的物理接口interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	virtual_router_id 10
--23行--修改,指定优先级,数值越大优先级越高,主为100,备为90priority 100advert_int 1					#通告间隔秒数(心跳频率)authentication {				#定义认证信息,每个热备组保持一致auth_type PASS				#认证类型
--27行--修改,指定验证密码,主备服务器保持一致auth_pass 123456}virtual_ipaddress {				#指定群集vip地址172.16.23.100}
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 172.16.23.100 80 {delay_loop 6					#健康检查的间隔时间(秒)lb_algo rr						#指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)lb_kind DRpersistence_timeout 50			#连接保持时间(秒)protocol TCP					#应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口real_server 172.16.23.12 80 {weight 1					#节点的权重
--45行--删除,添加以下健康检查方式		TCP_CHECK {connect_port 80			#添加检查的目标端口connect_timeout 3		#添加连接超时(秒)nb_get_retry 3			#添加重试次数delay_before_retry 3	#添加重试间隔}}real_server 172.16.23.13 80 {		#添加第二个 Web节点的地址、端口weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
##删除后面多余的配置##4. #启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33	5. #调整proc响应参数,关闭Linux内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 06. #刷新一下
sysctl -p############################# 配置ipvsadm #################################7. #配置负载分配策略,并启动服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service8. 
#清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 172.16.23.100:80 -s rr
ipvsadm -a -t 172.16.23.100:80 -r 172.16.23.12:80 -g
ipvsadm -a -t 172.16.23.100:80 -r 172.16.23.13:80 -g9. #保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm

配置负载调度器(备keepalived服务器:172.16.23.11)

 配置与主服务器相似,不再进行解释

############################ 配置Keepalived master服务器 #################################1. #关闭防火墙
systemctl stop firewalld
setenforce 02. #安装服务
yum -y install ipvsadm keepalived3. #修改配置文件keeplived.conf
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf......
global_defs {						#定义全局参数
--10行--修改,邮件服务指向本地smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02router_id LVS_02
}vrrp_instance VI_1 {				#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUPstate BACKUP
--21行--修改,指定承载vip地址的物理接口interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	virtual_router_id 10
--23行--修改,指定优先级,数值越大优先级越高,主为100,备为90priority 90advert_int 1					#通告间隔秒数(心跳频率)authentication {				#定义认证信息,每个热备组保持一致auth_type PASS				#认证类型
--27行--修改,指定验证密码,主备服务器保持一致auth_pass 123456}virtual_ipaddress {				#指定群集vip地址172.16.23.100}
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 172.16.23.100 80 {delay_loop 6					#健康检查的间隔时间(秒)lb_algo rr						#指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)lb_kind DRpersistence_timeout 50			#连接保持时间(秒)protocol TCP					#应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口real_server 172.16.23.12 80 {weight 1					#节点的权重
--45行--删除,添加以下健康检查方式		TCP_CHECK {connect_port 80			#添加检查的目标端口connect_timeout 3		#添加连接超时(秒)nb_get_retry 3			#添加重试次数delay_before_retry 3	#添加重试间隔}}real_server 172.16.23.13 80 {		#添加第二个 Web节点的地址、端口weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
##删除后面多余的配置##4. #启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33	5. #调整proce响应参数,关闭Linux内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 06. #刷新一下
sysctl -p############################# 配置ipvsadm #################################7. #配置负载分配策略,并启动服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service8. #清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 172.16.23.100:80 -s rr
ipvsadm -a -t 172.16.23.100:80 -r 172.16.23.12:80 -g
ipvsadm -a -t 172.16.23.100:80 -r 172.16.23.13:80 -g9. #保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm

配置节点服务器(web1服务器:172.16.23.12)

1. #关闭防火墙
systemctl stop firewalld
setenforce 02. #安装并开启httpd服务
yum -y install httpd
systemctl start httpd3. #配置站点文件
vim /var/www/html/index.html
this is web14. #配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=172.16.23.100
NETMASK=255.255.255.2555. #重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:06. #设置路由
route add -host 172.16.23.100 dev lo:0
route -n7. #调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 28. #刷新proc参数
sysctl -p

配置节点服务器(web2服务器:172.16.23.13)

配置与web1相似,不再进行解释 

1. #关闭防火墙
systemctl stop firewalld
setenforce 02. #安装并开启httpd服务
yum -y install httpd
systemctl start httpd3. #配置站点文件
vim /var/www/html/index.html
this is web24. #配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=172.16.23.100
NETMASK=255.255.255.2555. #重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:06. #设置路由
route add -host 172.16.23.100 dev lo:0
route -n7. #调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 28. #刷新proc参数
sysctl -p

测试验证:

在客户机上测试(客户机:172.16.23.200)

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

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

相关文章

沙盘模型3D打印加工服务建筑设计模型3D打印展览展示模型3D打印-CASAIM

随着3D打印技术的不断发展,沙盘模型3D打印已经成为建筑行业中的一项创新应用。这种技术能够将设计师的创意以实体形式呈现,为建筑项目的沟通和展示提供了更加直观和便捷的方式。本文将介绍CASAIM沙盘模型3D打印的优势和应用。 一、CASAIM沙盘模型3D打印的…

你在为其他知识付费平台做流量吗?

随着知识付费市场的蓬勃发展,越来越多的知识提供者选择将自己的课程放到各大知识付费平台上进行销售。然而,你是否意识到,你正在为这些平台做流量、做数据、做流水、做品牌,而卖出去的课程平台还要抽取你的佣金? 如果…

三菱PLC FX3U滑动平均值滤波

三菱PLC滑动平均值滤波其它相关写法,请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/125044013https://rxxw-control.blog.csdn.net/article/details/125044013滑动平均值滤波程序总共分为三部分,第一步为:滑动采样。 第二步为:队列求和,第三…

Unity SRP 管线【第四讲:URP 阴影】

URP 全文源码解析参照 引入 在UniversalRenderer.cs/ line 505行处 此处已经准备好了所有渲染数据(所有数据全部存储在了renderingData中) 我们只用renderingData中的数据初设置mainLightShadows bool mainLightShadows m_MainLightShadowCasterPass…

天津仁爱学院专升本化学工程与工艺专业《化工原理》考试大纲

天津仁爱学院化学工程与工艺专业高职升本入学考试《化工原理》课程考试大纲 一.参考教材 《化工原理》(第3版)上、下册,陈常贵,柴诚敬编,天津大学出版社;ISBN:9787561833797&#…

mysql 2day 对表格的增删改查、对数据的增删改查、对内容进行操作

目录 mysql 配置文件授权 远程链接 (grant)数据库操作创建库(create)切换数据库(use)查看当前所在库 表操作创建一张员工表查看表结构修改表名称增加字段修改字段名修改字段类型以及约束条件删除字段 内容操…

随笔记录-springboot_LoggingApplicationListener+LogbackLoggingSystem

环境:springboot-2.3.1 加载日志监听器初始化日志框架 SpringApplication#prepareEnvironment SpringApplicationRunListeners#environmentPrepared EventPublishingRunListener#environmentPrepared SimpleApplicationEventMulticaster#multicastEvent(Applicati…

openGauss学习笔记-165 openGauss 数据库运维-备份与恢复-导入数据-使用COPY FROM STDIN导入数据-通过本地文件导入导出数据

文章目录 openGauss学习笔记-165 openGauss 数据库运维-备份与恢复-导入数据-使用COPY FROM STDIN导入数据-通过本地文件导入导出数据165.1 示例1:通过本地文件导入导出数据 openGauss学习笔记-165 openGauss 数据库运维-备份与恢复-导入数据-使用COPY FROM STDIN导…

一种基于IWR6843雷达的跌倒检测系统的设计和实现(TI文档)

摘要 随着年龄增长,人体各项生理机能退化严重,老年人很容易发生跌倒,导致身体受到严重的伤害。近年来,随着国内人口老龄化越来越严重,主要针对老年人的跌倒检测系统正受到越来越多的关注。和常用的加速度传感器和视觉技…

五个IO模型的总结+同步异步

IO操作是同步还是异步,关键看数据在内核空间与用户空间的拷贝过程,也就是阶段二来判断是同步还是异步。

vue2 生命周期基本使用

基础介绍 Vue.js 提供了丰富的生命周期钩子函数,开发者可以通过这些钩子函数来控制组件在不同状态下的行为。Vue 组件的生命周期是指从组件实例化、初始化、渲染、更新到销毁的整个过程。 Vue 组件的生命周期钩子函数如下: beforeCreate: 在实例创建之前…

项目中webpack优化配置(持续更新)

项目中webpack优化配置 1. 开发效率, 体验 DLL(开发过程中减少构建时间和增加应用程序的性能) 使用 DllPlugin 进行分包,使用 DllReferencePlugin(索引链接) 对 manifest.json 引用,让一些基本不会改动的代码先打包…