首页 > 其他分享 >keepalived工作原理和使用方式

keepalived工作原理和使用方式

时间:2024-08-08 20:59:57浏览次数:10  
标签:方式 nginx keepalived 192.168 etc systemctl conf 原理

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

标签:方式,nginx,keepalived,192.168,etc,systemctl,conf,原理
From: https://blog.csdn.net/l_789rty/article/details/141035537

相关文章

  • 原理图与 PCB设计核心指南!
    这篇文章献给从事电子信息行业的硬件工程师、射频工程和PCB工程师,若有不足之处,请多多包涵!原理图设计原理原理图设计是电子设计的核心环节,它为后续的 PCB 设计、生产、调试等流程奠定了坚实基础。深入理解原理图设计的原理及注意事项,对于确保整个 电子设计项目的顺利进......
  • 反向代理的工作原理解析
     在当今数字化时代,网络通讯扮演着重要的角色,而代理技术为网络通讯提供了更多的灵活性和安全性。作为两种重要的代理技术,代理服务器和反向代理的运行原理和用途各有不同。本文将重点介绍反向代理的运行原理,深入探讨其在网络通讯中的作用和优势。1.代理服务器和反向代理之间......
  • 1392、STM32单片机温湿度检测阈值报警4个继电器加4个负载风扇等无线蓝牙远程(程序+原
    毕设帮助、开题指导、技术解答(有偿)见文未 目录方案选择单片机的选择显示器选择方案一、设计功能二、实物图三、原理图四、程序源码五、PCB图资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。方案选择单片机的选......
  • LLM大模型:LLaVa多模态图片检索原理
    训练安全垂直领域的LLM,会用到很多著名安全论坛(52pojie\kanxue\xianzhi\freebuf等)、博客的数据,这些数据100%都有很多图片(文不如图嘛,图片比文字更直观,更容易表达业务意义),之前微调LLM只能使用文字,图片只能丢弃,非常可惜,需要利用多模态的技术充分提取图片信息! 1、以前做传......
  • 什么是USB Server?工作原理是什么?
     USBServer:是一款usb设备虚拟化产品,远程连接调用USB设备的、软硬件结合的、集中化,集群化的安全管控产品。主要解决企业在虚拟化、超融合架构战略进程中USB设备无法正常调用工作,企业内Ukey数量多、无法集中管理的问题。通过把usb设备网络化,可以摆脱usb数据线的束缚。USBS......
  • SpringBoot属性配置方式
    问题:如果我们需要修改端口号为其他的端口号,那么我们可以在.yml文件中通过serverport直接对端口进行修改。但是如果我们交给运维或者客户的是一个jar包而不是项目的源文件,他们没有办法直接修改这些属性,这时候就需要SpringBoot属性配置相关的知识了。我们之前学习的是在reso......
  • 改写socket编程并解释socket通信原理
    如果你仔细看我之前的博客,会看到那个手机打电话的示例,但是那段代码彻底写死了,真正编程的时候一定要写活了,不信你看看很多的程序的配置文件就是这样的,为什么单独分离个配置文件出来,就是为了便于修改配置,这就是把程序写活的最好的例子。言归正传,直接上代码。服务端:fromsocketim......
  • 大模型核心技术原理 Transformer架构详解
    在大模型发展历程中,有两个比较重要点:第一,Transformer架构。它是模型的底座,但Transformer不等于大模型,但大模型的架构可以基于Transformer;第二,GPT。严格意义上讲,GPT可能不算是一个模型,更像是一种预训练范式,它本身模型架构是基于Transformer,但GPT引入了“预测下一个词......
  • vue 项目使用@vue-office/docx word 纯前端v 也支持后端接口方式
    只是做个记录,防止忘记。安装依赖 @vue-office/docxvue2的写法vue3同理自己改造。记得一定放在public文件夹下 下面代码<template> <divstyle="height:100%">  <el-buttontype="primary"@click="downWord">下载文档</el-button>  <vue......
  • Keepalived双机热备
    在这个高度信息化的IT时代,企业的生产系统、业务运营、销售和支持,以及日常管理等环节越来越依赖于计算机信息和服务,对高可用(HA)技术的应用需求不断提高,以便提供持续的、不间断的计算机系统或网络服务。keepalived双击热备基础知识Keepalived起初是专门针对LVS设计的一款......