keepalived

目录

keepalived概述

vrrp工作原理

keepalived体系主要的模块及其作用

模块

core模块

vrrp模块

check模块

作用

keepalived工作原理

keepalived和lvs-DR实验


keepalived概述

keepalived高可用应用(健康检查,故障切换)   节点服务器高可用HA

底层基于VRRP协议实现的高可用

vrrp工作原理

通过在冗余网关间共享虚拟MAC和IP地址,保证数据转发时并不是转给某一个具体网关的IP,而是把数据转发给虚拟网关的IP,因此,不论哪一个路由器成为主路由,都不会影响数据通信。

通过组播协议对数据端口进行监控,一旦检测数据转发的端口坏掉,主路由器会停发HELLO包,备路由器提升为主路由,实现数据的稳定高效转发。

同一VRRP组中的路由器具有主控路由器和备份路由器两种互斥的角色。主控路由器优先级较高,负责处理网络流量,备份路由器处于待命状态。如果主控路由器发生故障,备份路由器会在极短的时延后自动升级为主控路由器,而且无需改变IP地址和MAC地址。

keepalived体系主要的模块及其作用

模块

core模块

leepalived核心,负责主进程启动,维护并且调用配置文件去加载和解析

vrrp模块

实现vrrp协议

check模块

负责健康检查,检查模块常见端口,url

作用

故障自动切换

实现lvs群集中节点健康检查

节点服务器高可用性  HA

keepalived工作原理

keepalived高可用之间通过vrrp进行通行,vrrp是通过竞选来确认主备,主优先获得所有资源,备节点处于等待状态

当主挂了的时候,备节点就会接管主节点资源,然后顶替主节点对外提高服务

在keepalived服务之间,只有作为主的服务器会一直发送vrrp广播包,告诉备我还活着,此时备不会去抢占主,当主不可用时,即备要监控听不到主发送的广播包时,它就会启动相关服务去接管资源,保证业务连续,接管速度最快小于1秒

keepalived和lvs-DR实验

使用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查看主备切换是否正常

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

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

相关文章

Spring AOP教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容…

量子非凡暴风去广告接口

>>>https://videos.centos.chat/lzffbf.php/?url 免费提供综合去广告接口,各位请友好调用

Android 使用模拟器模拟Linux操作系统

1. 简介 在Android手机上使用模拟器模拟ubuntu等操作系统,便于测试 2. 软件准备 Termux:是一款 Android 终端模拟器和 Linux 环境应用程序,无需 root 或设置即可直接运行。虽然酷安和谷歌菜市场都能下载,但这些渠道都很久没更新…

集成学习:Bagging, Boosting,Stacking

目录 集成学习 一、bagging 二、boosting Bagging VS Boosting 1.1 集成学习是什么? Bagging Boosting Stacking 总结 集成学习 好比人做出一个决策时,会从不同方面,不同角度,不同层次去思考(多个自我&am…

unity使用vs和手机联调

1.在打包的时候,选择develop build,并且根据需要勾选log,deep profiler等选项 2.将手机打开usb调试模式,连接电脑 3.手机上安装这个测试包 4.点击测试包运行,然后这时候会弹出来一个端口的提示确认框 5.这时候点击Cons…

保姆级别0-10级完整的在线企业帮助中心、官网博客搭建教程及工具

在今天的数字时代,拥有一个完善的在线企业帮助中心和官网博客是非常重要的。这些平台不仅可以提供有关产品和服务的信息,还可以增加客户互动,建立品牌声誉。在这个教程中,我们将从零开始创建一个帮助中心和官网博客,包…

Config:服务端连接Git配置

创建子模块 Pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org…

飞天使-k8s基础组件分析-安全

文章目录 名称空间解释访问kubernetes API的控制RBAC的介绍 kubeconfig用户的创建集群默认角色 给组创建授权针对pod配置服务账户参考文档 名称空间解释 名字是啥&#xff1f; 答&#xff1a;集群中每个对象的名称对于该类型的资源都是唯一的。并且每一个对象在整个集群中也有…

微服务基础知识

文章目录 微服务基础知识一、系统架构的演变1、单体应用架构2、垂直应用架构3、分布式SOA架构&#xff08;1&#xff09;什么是SOA&#xff08;2&#xff09;SOA架构 4、微服务架构5、SOA和微服务的关系&#xff08;1&#xff09;SOA&#xff08;2&#xff09;微服务架构 二、分…

【QT】progressBar的使用(13)

progressBar多用于记录程序运行的时间、文件下载的时间等等&#xff0c;今天就来看一下&#xff0c;如何熟练运用progressBar。 一.环境配置 1.python 3.7.8 可直接进入官网下载安装&#xff1a;Download Python | Python.org 2.QT Designer 官方下载路径&#xff1a;Qt…

java高频面试题(反射、对象拷贝)

java高频面试题&#xff08;反射、对象拷贝&#xff09; 什么是反射&#xff1f; 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力 Java反射&#xff1a; 在Java运行时环境中&#xff0c;对于任意一个类&#xff0c;能否知道这个类有哪些属性和方法&#…

数据处理 | Python实现基于DFCP张量分解结合贝叶斯优化的缺失数据填补

数据处理 | Python实现基于DFCP张量分解结合贝叶斯优化的缺失数据填补 目录 数据处理 | Python实现基于DFCP张量分解结合贝叶斯优化的缺失数据填补实践过程基本介绍研究背景程序设计参考资料实践过程 基本介绍 数据处理 | Python实现基于DFCP张量分解结合贝叶斯优化的缺失数据填…

redis五大类型分析--list(2)

此篇为对redis五大数据类型中list的分析&#xff0c;希望能有所帮助 List API listTypeGet函数 robj *listTypeGet(listTypeEntry *entry) {robj *value NULL;/* 检查编码类型是否为 quicklist (快速列表) */if (entry->li->encoding OBJ_ENCODING_QUICKLIST) {/* 元素…

【LeetCode-中等题】48. 旋转图像

文章目录 题目方法一&#xff1a;使用辅助数组矩阵 行列的规律方法二&#xff1a;原地修改 递推公式 题目 方法一&#xff1a;使用辅助数组矩阵 行列的规律 public void rotate(int[][] matrix) {int n matrix.length;int[][] matrix_new new int[n][n];for(int i 0 ; i<…

深入浅出AXI协议(2)——通道及信号

一、前言 在之前的文章中&#xff0c;我们主要介绍了什么是AXI协议&#xff0c;AXI协议的特点与优点&#xff0c;然后对于AXI协议非常重要的五通道结构进行了介绍&#xff0c;了解了5个通道各自的作用。本文我们继续AXI协议的学习&#xff0c;我们将讨论5个通道的具体内容和相对…

uni、js——点击与禁用(不可点击)、动态样式class

案例 没约满的时间可以点击进行选择&#xff0c;约满的就不能选择了。选择完之后变色变字。 核心思想就是创建一个第三方变量存起来&#xff0c;点击谁就存到第三方&#xff0c;在根据这个进行判断。 代码 <template><view class"content"><view cl…

JavaScript:基本语法(变量与函数的定义与使用)

文章目录 script 标签srcdefer 延迟加载 基本语法定义变量 与 使用变量基本类型typeof 查看变量类型复合类型数组类型定义对象类型定义 函数定义函数使用函数 script 标签 src 和scc一样可以内嵌也可以外src外引。 一般是推荐外引。 <script src"idx.js">&l…

opencv 进阶15-检测DoG特征并提取SIFT描述符cv2.SIFT_create()

前面我们已经了解了Harris函数来进行角点检测&#xff0c;因为角点的特性&#xff0c;这些角点在图像旋转的时候也可以被检测到。但是&#xff0c;如果我们放大或缩小图像时&#xff0c;就可能会丢失图像的某些部分&#xff0c;甚至有可能增加角点的质量。这种损失的现象需要一…

ant design自定义展开折叠查看子项和点击行查看详情

实现思路&#xff1a;通过配置rowSelection&#xff0c;列表项是否可选择来实现。 页面内容&#xff1a; <a-table :dataSource"integrationBonds" :columns"columns" :customRow"customintegrationBondsRow":pagination"{hideOnSingle…

Docker创建Consul并添加权限控制

一、部署Consul 1、拉取镜像&#xff1a; docker pull consul:<consul-version> 2、运行 docker run --name consul1 -p 8300:8300/tcp -p 8301:8301/tcp -p 8301:8301/udp -p 8302:8302/tcp -p 8302:8302/udp -p 8500:8500 -p 8600:8600/tcp -p 8600:8600/udp -v /h…