Keepalived实验

news2024/11/17 1:33:55

keepalived在架构中的作用

LVS和HAProxy组成负载均衡

调度器LVS(四层)+后端服务器(多)

LVS:优点是速度快,性能要求不高,但是没有对后端服务器的健康检测;

HAProxy:有后端健康检测,支持七层(支持对数据里的http的报文分析acl),稳定性不高;

高可用:A = MTBF 在线时间/ (MTBF+MTTR平均故障处理时间)A越大高可用就越强

系统故障

硬件故障:设计缺陷、wear out(损耗)、非人为不可抗拒因素

软件故障:设计缺陷 bug

实现高可用

active/passive 主/备

active/active 双主(放置不同的业务,如果有一个故障,就会把故障的业务和数据迁移到另外一个,节省了服务器的数量)

active --> HEARTBEAT --> passive (active,passive每隔一段时间都会发信息给组播地址,组播地址认为active存活,如果active没发消息启用passive)

active <--> HEARTBEAT <--> active 同上

通告:心跳 HEARTBEAT 使用VRRP协议

工作方式:抢占式,非抢占式

安全认证:

无认证

简单字符认证:预共享密钥

MD5

主/备:单虚拟路由器

主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)

VRRP Virtual Router Redundancy Protocol 虚拟路由冗余协议,解决静态网关单点风险

虚拟路由器:Virtual Router

虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器

VIP:Virtual IP

VMAC:Virutal MAC (00-00-5e-00-01-VRID)

物理路由器:

master:主设备

backup:备用设备

priority:优先级 VIP放置在哪取决于谁的优先级高;

keepalived 简介

vrrp 协议的软件实现,原生设计目的为了高可用 ipvs服务

基于vrrp协议完成地址流动

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

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

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

用户空间核心组件:

vrrp stack:VIP消息通告(hreatbeat)

checkers:监测real server

system call:实现 vrrp 协议状态转换时调用脚本的功能(有邮件服务器)

SMTP:邮件组件

IPVS wrapper:生成IPVS规则

Netlink Reflector:网络接口

WatchDog:监控进程

自动控制:

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

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

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

Keepalived实验环境

实验需要4个rhel7 配置环境

修改内存和内核为1;

realserver1:172.25.254.110

realserver2:172.25.254.120

KA1:172.25.254.10

KA2:172.25.254.20

VIP:172.25.254.100

打开rs1、rs2 ka1、ka2:

[root@nginx ~]# vmset.sh eth0 172.25.254.110 RS1.hui.org

[root@nginx ~]# vmset.sh eth0 172.25.254.120 RS2.hui.org

[root@nginx ~]# vmset.sh eth0 172.25.254.10 ka1.hui.org

[root@nginx ~]# vmset.sh eth0 172.25.254.20 ka2.hui.org

[root@nginx ~]# getenforce 
Disabled

查看防火墙是否关闭:

[root@nginx ~]# systemctl status firewalld.service

[root@nginx ~]# systemctl stop firewalld.service [root@nginx ~]# systemctl mask firewalld.service

在rs1、rs2上:

[root@rs1 ~]# yum install httpd -y

[root@rs2 ~]# yum install httpd -y

[root@rs1 ~]# echo 172.25.254.110 > /var/www/html/index.html

[root@rs1 ~]# systemctl enable --now httpd.service 

[root@rs2 ~]# echo 172.25.254.120 > /var/www/html/index.html

[root@rs2 ~]# systemctl enable --now httpd.service

Keepalived-虚拟路由的配置

KeepAlived 配置说明

配置文件组成部分

配置文件:/etc/keepalived/keepalived.conf

在ka1、ka2:

[root@ka1 ~]# yum install keepalived  -y

[root@ka2 ~]# yum install keepalived.x86_64 -y

打开主配置文件

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf 

#全局配置
global_defs {
   notification_email {
    3173026775@qq.com(发生故障时发送的邮箱,可以写好几个)

    }
   notification_email_from keepalived@hui.org(发邮件的地址)
   smtp_server 127.0.0.1			#邮件服务器地址
   smtp_connect_timeout 30			#邮件服务器连接超时时间30s
   router_id ka1.hui.org			#机唯一标识
   vrrp_skip_check_adv_addr			#对所有通告报文都检查,会比较消耗性能
   									(用此配置后,如果收到的通告报文和上一个报文是同一 										个路由器,则跳过检查,默认值为全检查)
   vrrp_strict
   vrrp_garp_interval 0				#报文发送延迟,0表示不延迟
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18		#指定组播IP地址范围:
}   

设置虚拟路由

vrrp_instance VI_1 {
    state MASTER		#主
    interface eth0		#网卡
    virtual_router_id 100#每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一
    priority 100		#当前物理节点在此虚拟路由器的优先级,范围:1-254
    advert_int 1
    authentication {
        auth_type PASS	#AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
        auth_pass 1111	#预共享密钥,仅前8位有效
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1(VIP)
    }
}

启动服务:

[root@ka1 ~]# systemctl enable --now keepalived.service

[root@ka1 ~]# ifconfig

复制到ka2上:

[root@ka1 ~]# scp /etc/keepalived/keepalived.conf root@172.25.254.20:/etc/keepalived/keepalived.conf

可以使用抓包命令查看:

[root@ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18

ka2:

打开[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP(改)
    interface eth0
    virtual_router_id 100
    priority 80(改)
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

[root@ka2 ~]# systemctl enable --now keepalived.service

在rs1上登陆ka1,关掉keepalived服务ka2会开始接替ka1

[root@rs1 ~]# ssh -l root 172.25.254.10

[root@ka1 ~]# systemctl stop keepalived.service

此时ka2上就有VIP了

[root@ka2 ~]# ifconfig

eth0:1

重新启动ka1说的keepalived

[root@ka1 ~]# systemctl start keepalived.service

ka2就无IP了

启用keepalived日志功能

独立日志

打开ka1:

[root@ka1 ~]# vim /etc/sysconfig/keepalived

KEEPALIVED_OPTIONS="-D -S 6"
:wq

[root@ka1 ~]# systemctl restart keepalived.service

[root@ka1 ~]# vim /etc/rsyslog.conf

local6.*                                                /var/log/keepalived.log
:wq

[root@ka1 ~]# systemctl restart keepalived.service

[root@ka1 ~]# systemctl restart rsyslog.service

[root@ka1 ~]# ll /var/log/keepalived.log

-rw------- 1 root root 8743 8月 14 17:23 /var/log/keepalived.log

Keepalived独立子配置文件

/etc/keepalived/keepalived.conf 文件中内容过多,不易管理

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

把vrrp_instance VI_1 {....这一段注释再写入

include "/etc/keepalived/conf.d/*.conf"

[root@ka1 ~]# mkdir -p /etc/keepalived/conf.d [root@ka1 ~]# vim /etc/keepalived/conf.d/172.25.254.100.conf

写入

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

[root@ka1 ~]# systemctl restart keepalived.service

[root@ka1 ~]# ifconfig

Keepalived-非抢占模式和延迟抢占

即当高优先级的主机恢复在线后,会抢占低先级的主机的master角色,这样会使vip在KA主机中来回漂移,造成网络抖动,

建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的master角色,非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机

要关闭 VIP抢占,必须将各 keepalived 服务器state配置为BACKUP

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP		改
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    nopreempt			!!!
    authentication {
        auth_type PASS
        auth_pass 1111
    }

先不着急启动服务,等ka2启动服务后再启动

[root@ka1 ~]# systemctl restart keepalived.service

此时VIP在ka2上;

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    nopreempt				加!
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }

[root@ka2 ~]# systemctl restart keepalived.service

等ka1启动服务后:

[root@ka2 ~]# systemctl stop keepalived.service 停止服务 [root@ka2 ~]# ifconfig 无VIP

此时VIP在ka1 上;

[root@ka2 ~]# systemctl restart keepalived.service 重新启动 [root@ka2 ~]# ifconfig 还是无VIP

延迟抢占

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    preempt_delay 10s		!!!!
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

##

默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量

注意:启用 vrrp_strict 时,不能启用单播

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state MASTER		!
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.10		!	
    unicast_peer {						!
        172.25.254.20					!
    }									!
}

[root@ka1 ~]# systemctl restart keepalived.service

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf

  unicast_src_ip 172.25.254.20
    unicast_peer {
        172.25.254.10
}

[root@ka2 ~]# systemctl restart keepalived.service

[root@ka1 ~]# tcpdump -i eth0 -nn src host 172.25.254.10 and dst 172.25.254.20

Keepalived-邮件通知

[root@ka1 ~]# yum install mailx -y

[root@ka1 ~]# echo hello | mail -s test 3xxxxxxx@qq.com

[root@ka1 ~]# mail

打开浏览器QQ邮箱登陆

安全设置——>最后一个什么什么服务——>生成授权码

cpoqgqnmdprdddba

[root@ka1 ~]# vim /etc/mail.rc 在最后写上

set from=3173026775@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=3xxxxxxxx@qq.com
set smtp-auth-password=cpoqgqnmdprdddba(授权码)
set smtp-auth=login
set ssl-verify=ignore
:wq

[root@ka1 ~]# echo hello | mail -s test 3xxxxx@qq.com

ka2同理

[root@ka1 ~]# vim /etc/keepalived/mail.sh

#/bin/bash
mail_dst="3xxxxxx@qq.com"
send_message()
{
  mail_sub="$HOSTNAME to be $1 vip move"
  mail_msg="`date +%F\ %T`:vrrp move $HOSTNAME chage $1"
  echo $mail_msg | mail -s "$mail_sub" $mail_dst
}

case $1 in
  master)
  send_massage master
  ;;
  backup)
  send_massage backup
  ;;
  fault)
  send_message fault
  ;;
  *)
  ;;
esac

[root@ka1 ~]# chmod +x /etc/keepalived/mail.sh

配置主配置文件:

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

notify_master "/etc/keepalived/mail.sh master"
notify_backup "/etc/keepalived/mail.sh backup"
notify_fault "/etc/keepalived/mail.sh fault"

[root@ka1 ~]# /etc/keepalived/mail.sh fault

keepalived-双主模式

master/slave的单主架构,同一时间只有一个Keepalived对外提供服务,此主机繁忙,而另一台主机却很空闲,利用率低下,可以使用master/master的双主架构,解决此问题。

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf 写入

vrrp_instance VI_2 {
   state BACKUP  
    interface eth0
     virtual_router_id 200
      priority 100
      advert_int 1
      authentication {
      auth_type PASS
      auth_pass 1111
     } 
     virtual_ipaddress { 
     172.25.254.200/24 dev eth0 label eth0:2 
      } 
      unicast_src_ip 172.25.254.10               
      unicast_peer {                    
      172.25.254.20                      
    }
}

ka2同理

重启服务再看IP

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

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

相关文章

有名管道 | 信号

匿名管道由于没有名字&#xff0c;只能用于具有亲缘关系的进程间通信。 为了克服这个缺点&#xff0c;就提出了有名管道&#xff08;FIFO&#xff09;&#xff0c;也称为命名管道、FIFO文件。 有名管道 FIFO在文件系统中作为一个特殊的文件而存在并且在文件系统中可见&#…

8个最佳iMacros替代方案(2024)

iMacros作为一款经典的网页自动化工具&#xff0c;多年来帮助无数用户自动化了繁琐的网页任务。然而&#xff0c;随着技术的进步&#xff0c;越来越多功能更强大、界面更友好的替代方案涌现&#xff0c;为用户提供了更多选择。如果你正在寻找2024年最好的iMacros替代工具&#…

中国智能物流系统集成玩家图谱:很全

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 上海欣巴自动化科技股份有限公司 总部&#xff1a;上海服务行业&#xff1a;快递、电商、服装、零售、医药、食品饮料等解决方案&#xff1a;自动化分拣输送系统&#xff1b;控制软件…

linux下tomcat nio 底层源码调用系统函数处理流程

linux tomcat使用nio处理请求 调用jvm native C 底层调用系统函数源码原理 ##Acceptor接受socket socket endpoint.serverSocketAccept(); ##NioEndpoint serverSock.accept() ##ServerSocketChannelImpl n accept(this.fd, newfd, isaa); ##ServerSocketChannelImpl a…

Linux的安装和使用

Linux 第一节 Linux 优势 1. 开源 为什么这么多的的设备都选择使用 Linux&#xff1f;因为它是开源软件&#xff08;open source software&#xff09;&#xff0c;具有不同的含义。使用一个安全的操作系统工作变得必不可少的事&#xff0c;而 Linux 恰好满足了这个需求。因…

Golang | Leetcode Golang题解之第344题反转字符串

题目&#xff1a; 题解&#xff1a; func reverseString(s []byte) {for left, right : 0, len(s)-1; left < right; left {s[left], s[right] s[right], s[left]right--} }

vue3ts+element-plus实现点击el-select下拉选择内容填充和编辑内容

需求在填写报表时&#xff0c;既可以选择下拉选项&#xff0c;还可以编辑选的内容&#xff0c; 找了elementUi没有现成的就自己组装一个 效果&#xff1a; 贴代码&#xff1a; 在components下新建文件夹TextareaSelect&#xff0c;再新建index.vue和interface.ts &#xff08;…

AIGC创新应用技术实践:成都技术生态沙龙全回顾

AIGC创新应用技术实践&#xff1a;成都技术生态沙龙全回顾 2024年8月17日下午&#xff0c;我有幸作为CSDN校园主理人参加了在成都举办的AIGC创新应用技术实践沙龙活动。 此行也见到了许许多多的行业大佬&#xff0c;得到的收获非常之多&#xff0c;赶了1300公里的路&#xff0…

getActivePinia was called with no active Pinia

如果你是从vuex转向使用pinia&#xff0c;那么你可能遇到这个问题getActivePinia was called with no active Pinia. Did you forget to install pinia?。明明已经安装了pinia&#xff0c;为什么会有这个提示呢&#xff1f; 原因是你可能在setup的组件之外使用了useStore 根本…

JavaScript初级——运算符

一、算数运算符 1、运算符也叫操作符。通过运算符可以对一个或多个值进行运算&#xff0c;并获取运算结果。 比如&#xff1a;typeof 就是运算符&#xff0c;可以获得一个值的类型&#xff0c;他会将该值的类型以字符串的形式返回 &#xff08;number、string、boolean、undefi…

三防平板:现代生产效率与安全的革新者

三防加固工业平板电脑以其独特的防水、防尘、防摔性能&#xff0c;成为复杂生产环境下可靠的工作伙伴。无论是高温、高湿的恶劣环境&#xff0c;还是充满粉尘与振动的车间&#xff0c;三防平板电脑均能保持稳定运行&#xff0c;显著降低硬件故障率&#xff0c;确保生产线的平稳…

AI周报(8.11-8.17)

AI应用-小白&#xff0c;你在说什么呢&#xff1f;AI宠物翻译Traini Traini是由中国连续创业者孙邻家&#xff08;Arvin Sun&#xff09;和刘嘉懿&#xff08;Jack Liu&#xff09;于2022年在美国硅谷联合创立的全球宠物在线培训平台和宠物共情AI应用。Traini也在今年5月完成了…

MyBatis框架连接数据库-初级

MyBatis 的主要功能是帮助持久层管理数据库&#xff0c;接下来我们利用 MyBatis 连接一下我们的数据库&#xff0c;实现入门程序 前期准备 使用环境&#xff1a; jdk 17 maven 3.6.1 mybatis 3.5.10 mysql 8.0.31 idea 2021.1 需要准备&#xff1a; 一个 Maven 工程模块…

uniapp-部分文件中文乱码

一、问题 在开发时遇到&#xff0c;部分页面的中文显示乱码&#xff0c;如图 搜索了一下解决方法&#xff0c;这里记录一下 二、问题原因&#xff1a; 页面的编码格式不是 utf-8 造成的 三、解决方法 打开出现乱码页面选择编译器左上角的文件 > 以指定编码重新打开 选择U…

【存储学习笔记】4:快照(Snapshot)技术的实现方式

1 快照 1.1 动机 在上一篇《备份》里提到&#xff0c;热备份就是在执行操作时&#xff0c;服务器需要正常处理来自用户或应用对数据的更新&#xff0c;这样能够保证数据7*24小时可用&#xff08;在很多服务里这是必要的&#xff09;。 而热备份的困难就是如何保证数据的一致…

判断点B是否在线段AC上?

问题 判断点B是否在线段AC上&#xff1f; 解决方法 1).使用矩阵的秩解决 矩阵的秩代码 #include <iostream> #include <vector> #include <cmath>class Matrix { public:std::vector<std::vector<double>> data;int rows, cols;Matrix(int r,…

电子合同如何在线签?9大协助工具软件

文章介绍了以下几个工具&#xff1a;e签宝、上上签、契约锁、法大大、合同管家、Concord、爱签、微签、PandaDoc。 在选择合适的电子签名工具时&#xff0c;很多企业面临着如何确保合规、提高效率以及优化用户体验的挑战。市场上的众多选项使得决策过程变得更加复杂。但是&…

【Kubernetes】虚拟 IP 与 Service 的代理模式

虚拟 IP 与 Service 的代理模式 1.userspace 代理模式2.iptables 代理模式3.IPVS 代理模式 由于 Service 的默认发布类型是 ClusterlP&#xff0c;因此也可以把 ClusterIP 地址叫作 虚拟 IP 地址。在 Kubernetes 创建 Service 时&#xff0c;每个节点上运行的 kube-proxy 会自动…

百度地图SDK Android版开发 6 显示覆盖物

百度地图SDK Android版开发 6 显示覆盖物 前言地图类中覆盖物的接口覆盖物类Marker示例Polyline示例Polygon示例Arc示例Circle示例Text示例效果图 Marker的更多属性常用属性交互碰撞动画其它属性 折线的更多属性常用属性交互其它 多边形的更多属性常用属性交互其它 Arc的更多属…

keepalive原理详解及应用

目录 一、高可用集群 1.1 什么是keepalived 1.2 什么是VRRP协议 二、Keepalived 部署 2.1 keepalived 简介 2.2 keepalived 框架 2.3 实验环境搭建 2.4 Keepalived 安装 2.5 Keepalived 配置 2.5.1 虚拟路由配置 2.5.2 独立日志 2.5.3 独立子配置文件 三、Keepali…