keepalived工作原理和使用方式

news2024/9/21 2:42:35
keepalived是什么
  • keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
keepalived主要有三个模块
  • 分别是core、check和vrrp。
  • core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
  • check负责健康检查,包括常见的各种检查方式。
  • vrrp模块是来实现VRRP协议的。
案例1
  • 环境:

    • 初识keepalived,实现web服务器的高可用集群。
    • ​ Server1: 192.168.145.15
    • ​ Server2: 192.168.145.16
    • ​ VIP: 192.168.145.100 对外的虚拟ip
    • 拓扑
    • 注意:
      • 关闭防火墙、selinux
      • 配置yum源
  • server1

    • 创建etc下的keepalived目录,编辑配置文件

      • yum -y install keepalived

      • vi /etc/keepalived/keepalived.conf

        • ! Configuration File for keepalived
          global_defs {
           router_id 1                            #设备在组中的标识,设置不一样即可
           }
          
          #vrrp_script chk_nginx {                        #健康检查
          # script "/etc/keepalived/ck_ng.sh"     #检查脚本
          # interval 2                            #检查频率.秒
          # weight -5                             #priority减5
          # fall 3                                        #失败三次
          # }
          
          #高可用集群的组员设置
          vrrp_instance VI_1 {               #VI_1。实例名两台路由器相同。同学们要注意区分。
              state MASTER                        #主或者从状态
              interface ens33                     #监控网卡
              mcast_src_ip 192.168.229.11         #心跳源IP,当前主机的ip
              virtual_router_id 55                #虚拟路由编号,主备要一致。同学们注意区分
              priority 100                        #优先级 数值越大优先级越高
              advert_int 1                        #心跳间隔 单位是秒
          
              authentication {                    #秘钥认证(1-8位)
                  auth_type PASS
                  auth_pass 123456
              }
          
              virtual_ipaddress {                 #VIP 虚拟ip
              192.168.229.100/24
                  }
          
          #  track_script {                       #引用脚本
          #       chk_nginx
          #    }
          
          }
          
          
        • 把当前服务器的keepalived的配置,传给另外一台服务器

        • #scp -r /etc/keepalived/keepalived.conf 192.168.145.16:/etc/keepalived/

        • systemctl enable keepalived.service

          • 开机启动keepalived
      • 安装Nginx

        • rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
        • yum -y install nginx
        • systemctl enable nginx.service
        • systemctl start nginx.service
        • vi /usr/share/nginx/html/index.html
        • curl -i localhost
          • -i 显示目标地址返回的响应头信息
        • systemctl start keepalived.service
        • 在这里插入图片描述
  • server2

    • BACKUP服务器的配置需要几处修改

      • yum -y install keepalived

      • vi /etc/keepalived/keepalived.conf

        • state MASTER改为  state BACKUP
          mcast_src_ip 192.168.145.15改为backup服务器实际的IP mcast_src_ip 192.168.145.16
          priority 100改为priority 99
          
          • 配置文件示例

            • ! Configuration File for keepalived
              global_defs {
               router_id 2
               }
              
              #vrrp_script chk_nginx {
              # script "/etc/keepalived/ck_ng.sh"
              # interval 2
              # weight -5
              # fall 3
              # }
              
              vrrp_instance VI_1 {
                  state BACKUP
                  interface ens33
                  mcast_src_ip 192.168.229.12
                  virtual_router_id 55
                  priority 99
                  advert_int 1
              
                  authentication {
                      auth_type PASS
                      auth_pass 123456
                  }
              
                  virtual_ipaddress {
                  192.168.229.100/24
                      }
              
              #  track_script {
              #       chk_nginx
              #    }
              
              }
              
              
        • systemctl enable keepalived.service

      • 安装Nginx

        • rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
        • yum -y install nginx
        • systemctl enable nginx.service
        • systemctl start nginx.service
        • vi /usr/share/nginx/html/index.html
        • curl -i localhost
        • systemctl start keepalived.service

        在这里插入图片描述

  • client

    • 访问VIP http://192.168.145.100

    • 拔掉master(server1)的网线。

      ![- 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://i-blog.csdnimg.cn/direct/a27500ab8b5c4c7cbcce5ffdd840b267.png)
      
    • 访问VIP http://192.168.145.100,观察网页已经切换

      • 在这里插入图片描述
  • 关于keepalived对nginx状态未知的问题

    • 恢复之前的实验。启动两台主机的keepalived和nginx。确保页面访问正常。 关闭master的nginx服务 。systemctl stop nginx 继续访问VIP,请问页面是否会切换到slave呢?

    • 请思考,nginx服务的状态和keepalived的关系。

      • 原因是keepalived监控的是接口IP状态。无法监控nginx服务状态

      • 编辑监控脚本。

        • server1

          • 添加Nginx监控脚本

            • vi /etc/keepalived/ck_ng.sh

              • #!/bin/bash
                #检查nginx进程是否存在
                counter=$(ps -C nginx --no-heading|wc -l)
                if [ "${counter}" = "0" ]; then
                #尝试启动一次nginx,停止5秒后再次检测
                    systemctl start nginx
                    sleep 5
                    counter=$(ps -C nginx --no-heading|wc -l)
                    if [ "${counter}" = "0" ]; then
                #如果启动没成功,就杀掉keepalive触发主备切换
                        systemctl stop keepalived 
                    fi
                fi
                
            • chmod +x /etc/keepalived/ck_ng.sh

        • server2

          • 添加Nginx监控脚本

            • vi /etc/keepalived/ck_ng.sh

              • #!/bin/bash
                #检查nginx进程是否存在
                counter=$(ps -C nginx --no-heading|wc -l)
                if [ "${counter}" = "0" ]; then
                #尝试启动一次nginx,停止5秒后再次检测
                    systemctl start nginx
                    sleep 5
                    counter=$(ps -C nginx --no-heading|wc -l)
                    if [ "${counter}" = "0" ]; then
                #如果启动没成功,就杀掉keepalive触发主备切换
                        service keepalived stop
                    fi
                fi
                
            • chmod +x /etc/keepalived/ck_ng.sh

      • 启动监控脚本

        • 清除掉配置文件中的注释。

        • 在这里插入图片描述

        • 重启keepalived即可

    • nginx状态测试

      • 因为脚本中有拉起nginx的语句,测试时可以将脚本文件位置进行改变。观察脚本的效果
案例2
  • keepalived+lvs集群

  • 环境

    • 192.168.145.15 dr1 负载均衡器 master
    • 192.168.145.16 dr2 负载均衡器 backup
    • 192.168.145.136 rs1 web1
    • 192.168.145.137 rs2 web2
    • 拓扑
      • 请添加图片描述
  • 1.在master上安装配置Keepalived:

    • # yum install keepalived ipvsadm -y
      • ipvsadm安装并不启动
  • 2.在master上修改配置文件

    • # vim /etc/keepalived/keepalived.conf

      • ! Configuration File for keepalived
        global_defs {						
        	router_id Director1    #两边不一样。
        	}
        	
        vrrp_instance VI_1 {				
        	state MASTER				#另外一台机器是BACKUP	
        	interface ens33				#心跳网卡	
        	virtual_router_id 51			#虚拟路由编号,主备要一致
        	priority 150				#优先级	
        	advert_int 1				#检查间隔,单位秒	
        	authentication {
        		auth_type PASS
        		auth_pass 1111
        		}
        	virtual_ipaddress {
        		192.168.229.100/24       dev      ens33   	#VIP和工作接口
        		}
        	}
        	
        virtual_server 192.168.229.100 80 {		#LVS 配置,VIP,就是keepalived配置的对外地址
        	delay_loop 3				#服务论询的时间间隔,#每隔3秒检查一次real_server状态
        	lb_algo rr				#LVS 调度算法
        	lb_kind DR	 			#LVS 集群模式
        	protocol TCP
        	real_server 192.168.229.13 80 {
        		weight 1                    #权重
        		TCP_CHECK {
        			connect_timeout 3       #健康检查方式,连接超时时间
        			}
        		}
        	real_server 192.168.229.14 80 {
        		weight 1
        		TCP_CHECK {
        			connect_timeout 3    #设定连接超时时间为3秒 超过视为掉线
        			}
        		}
        }
        
        
  • 3.在backup上安装keepalived:

    • # yum install keepalived ipvsadm -y
      • ipvsadm安装并不启动
  • 4.拷贝master上的keepalived.conf到backup上:

    • # scp  192.168.229.11:/etc/keepalived/keepalived.conf 192.168.229.12:/etc/keepalived/
      
  • 5.拷贝后,修改配置文件

    • router_id Director2

    • state BACKUP

    • priority 100

    • 配置示例

      • # vim /etc/keepalived/keepalived.conf

      • ! Configuration File for keepalived
        global_defs {
                router_id Director2
                }
        
        vrrp_instance VI_1 {
                state BACKUP                            #另外一台机器是BACKUP
                interface ens33                         #心跳网卡
                virtual_router_id 51
                priority 100                            #优先级
                advert_int 1                            #检查间隔,单位秒
                authentication {
                        auth_type PASS
                        auth_pass 1111
                        }
                virtual_ipaddress {
                        192.168.229.100/24 dev ens33       #VIP和工作端口
                        }
                }
        
        virtual_server 192.168.229.100 80 {                #LVS 配置,VIP
                delay_loop 3                            #服务论询的时间间隔
                lb_algo rr                              #LVS 调度算法
                lb_kind DR                              #LVS 集群模式
                protocol TCP
                real_server 192.168.229.13 80 {
                        weight 1
                        TCP_CHECK {
                                connect_timeout 3
                                }
                        }
                real_server 192.168.229.14 80 {
                        weight 1
                        TCP_CHECK {
                                connect_timeout 3
                                }
                        }
        }
        
        

  • 6.master和backup上启动服务:

    • #systemctl enable keepalived
    • # systemctl start keepalived
    • #reboot
  • 7.web服务器配置

    • web1和web2同配置

      • 安装web测试站点

        • yum install -y httpd && systemctl start httpd && systemctl enable httpd
        • netstat -antp | grep httpd
        • # elinks 127.0.0.1
        • vim /var/www/html/index.html
        • 自定义web主页,以便观察负载均衡结果
      • 配置虚拟地址

        • #cp /etc/sysconfig/network-scripts/{ifcfg-lo,ifcfg-lo:0}
          #vim /etc/sysconfig/network-scripts/ifcfg-lo:0
          DEVICE=lo:0
          IPADDR=192.168.229.100   #对外提供服务的地址
          NETMASK=255.255.255.255
          ONBOOT=yes
          其他行注释掉
          
      • 配置路由

        • route add 192.168.145.100 dev lo
        • 在两台机器(RS)上,添加一个路由:route add -host 192.168.145.100 dev lo 确保如果请求的目标IP是 V I P ,那么让出去的数据包的源地址也显示为 VIP,那么让出去的数据包的源地址也显示为 VIP,那么让出去的数据包的源地址也显示为VIP
      • 配置ARP

        • # 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 = 2
            
            • 忽略arp请求 可以回复
      • reboot

  • 8.测试:

    • 1)观察lvs路由条目

      • master上 查询 # ipvsadm -Ln

        • [root@dr1 ~]# ipvsadm -Ln
          IP Virtual Server version 1.2.1 (size=4096)
          Prot LocalAddress:Port Scheduler Flags
            -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
          TCP  192.168.229.100:80 rr
            -> 192.168.229.13:80            Route   1      0          0
            -> 192.168.229.14:80            Route   1      0          0
          
          
    • 2)观察vip地址在哪台机器上

      • master上 查询 # ip a

        • ens33: 
          inet 192.168.229.11/24 brd 192.168.229.255 scope global noprefixroute ens33
          inet 192.168.229.100/24 scope global secondary ens33
          
    • 3)客户端浏览器访问vip

    • 4)关闭master上的keepalived服务,再次访问vip

      • master上 关闭 # systemctl stop keepalived.service
    • 5)关闭web1站点服务,再次访问VIP

      • web1 # systemctl stop httpd

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

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

相关文章

怎么根据企业特点提供个性化的六西格玛培训?

近年来,六西格玛作为一种强大的质量管理方法,以其数据驱动、流程优化和减少缺陷为核心,被众多企业视为提升竞争力的关键工具。然而,并非所有企业都能直接套用标准的六西格玛培训体系,因为每个企业的文化、行业特性、发…

顺序队列和链式队列的基本操作

顺序队列 函数说明😃: InitStack( &s):初始化栈 StackEmpty(s):判断一个栈是否为空 Push(& s, x):进栈 Pop(&s, &x):出栈 GetTop(s,&x):读栈顶元素 show(s):读出…

Vue3项目框架搭建

前言 大多时候是在别人搭建好的项目上开发需求,突然要自己从新项目搭建开始,纯纯赶鸭子上架,参考一些项目,试着搭建的,记录一下历程,主要怕忘了。有些地方本该贴上代码截图更好,但是我此刻手头…

Vue引入使用iconfont字体图标

由于element-ui或element-plus提供的图标有时候并不能满足日常需求,所以这篇介绍一下前端引入阿里巴巴矢量图标库使用,不止是vue使用,不限于vue2、vue3,html或是其他框架也是同样的道理,只要引入都是同样可以使用的。 1. 首先进入阿里巴巴矢量图标库官网 官网:https://…

弱智吧:大模型变聪明,有我一份贡献【大模型VS弱智吧,谁聪明?谁弱智?】

「被门夹过的核桃,还能补脑吗?」 在中文网络上流传着这样一段话:弱智吧里没有弱智。 百度「弱智吧」是个神奇的地方,在这里人人都说自己是弱智,但大多聪明得有点过了头。最近几年,弱智吧的年度总结文章都可…

算法——决策树

简介:个人学习分享,如有错误,欢迎批评指正。 一、什么是决策树? 决策树(decision tree):决策树是一种树形结构的监督学习算法,广泛应用于分类任务和回归任务中。它通过递归地将数据…

豆瓣的ip地址怎样修改:探索显示机制与实用操作

在数字化时代,网络空间成为了我们日常生活不可或缺的一部分。豆瓣,作为一个集书籍、电影、音乐评论及社交功能于一体的综合性平台,其用户遍布全球。然而,有时我们可能因为隐私保护、网络限制或特定需求而希望修改在豆瓣上显示的IP…

【STM32 FreeRTOS】任务

使用 RTOS 的实时应用程序可以被构建为一组独立的任务。每个任务在自己的上下文中执行,不依赖于系统内的其他任务或 RTOS 调度器本身。在任何时间点,应用程序中只能执行一个任务,实时 RTOS 调度器负责决定所要执行的任务。因此, R…

Figure 02 机器人发布:未来AI的巅峰还是泡沫中的救命稻草?

引言 近日,Figure AI 公司发布了其最新的机器人产品 Figure 02,引发了广泛关注。作为 Figure AI 的第二代人形机器人,Figure 02 的推出引发了关于它是否是“地表最强”机器人的讨论。同时,由于 OpenAI 的技术支持,这款…

Java Web —— 第三天(Ajax+组件)

Ajax 概念: Asynchronous JavaScript And XML,异步的JavaScript和XML。 作用: 数据交换:通过Aiax可以给服务器发送请求,并获服务器响应的数据 异步交互:可以在不重新加载整个页面的情况下,服务器交换数据并更新部分网页的技术&#xff0c…

Java开发笔记--通用基础数据校验的设计

最近在开发一个功能,对排水管网的基础数据(包括管井、管道、泵站,雨水口,雨水口线,泵站,污水处理厂,排口等)的导入进行校验。 以字段为纬度,考虑二个方面的校验:数据库唯一&#xf…

RHCA III之路---EX436-9

RHCA III之路---EX436-9 1. 题目2. 解题2.1 安装apache2.2 配置页面2.3 配置selinux和防火墙2.4 创建资源 3. 确认 1. 题目 2. 解题 考试时会给你个url,从url下载index.html并放入默认目录 2.1 安装apache 3个节点分别安装 yum install -y httpd2.2 配置页面 nodea上执行 …

VIVADO IP核之DDS直接数字频率合成器使用详解

VIVADO IP核之DDS直接数字频率合成器使用详解 目录 前言 一、DDS基本知识 二、DDS IP核使用之SIN COS LUT only 三、DDS IP核之SIN COS LUT only仿真 四、DDS IP核使用之Phase Generator and SIN COS LUT 五、DDS IP核之Phase Generator and SIN COS LUT仿真 总结 前言 …

js 深入理解原型(prototype)及如何创建对象

目录 1. 概述2. 工厂模式3. 构造函数模式3.1 创建的格式3.2 JS内部执行步骤3.3 constructor 构造器3.4 构造函数也是函数3.5 构造函数的问题 4. 原型模式 prototype4.1 理解原型本质4.2 原型层级(访问一个属性,查询的次序)4.2.1 查询次序:实例…

电动工具研讨会展商阵容揭晓,您的元器件选型指南!

导语 面对日益激烈的市场竞争,如何让您的电动工具脱颖而出?PI、MPS等多家知名元器件厂商将带来最新产品,覆盖MCU、电源管理芯片、功率器件等多个领域,助您一站式选型! 在智能制造浪潮的推动下,电动工具正快…

谷粒商城实战笔记-145-性能压测-性能监控-jvisualvm使用-解决插件不能安装

文章目录 jvisualvm的作用安装查看gc相关信息的插件解决jvisualvm不能正常安装插件的问题1,查看java版本2,打开网址3,修改jvisualvm的设置 jvisualvm的作用 JVisualVM是一个集成在Java Development Kit (JDK) 中的多功能工具,它提…

使用易语言写一个翻译小助手

下载地址: https://pan.quark.cn/s/fa0935d10b10

springboot流浪猫狗领养管理系统-计算机毕业设计源码51529

目 录 摘要 1 绪论 1.1 研究背景及意义 1.2 开发现状 1.3论文结构与章节安排 2 流浪猫狗领养管理系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例…

Java社会校招类型人力资源招聘系统小程序源码

解锁社会校招新篇章:探索高效人力资源招聘系统 引言:为何社会校招需要升级? 在这个日新月异的时代,企业之间的竞争愈发激烈,而人才作为核心竞争力,其获取与培养成为了每个企业不可忽视的战略要点。尤其是…

桥韵国风:传统美学桥梁可视化

融合国风元素,采用图扑可视化技术,将桥梁结构与美学设计生动展示,传递传统文化的独特韵味,提升观赏与研究价值。