Keepalived

工作原理的解释

Keepalived 是一种用于 Linux 系统的高可用性解决方案,它主要用于提高网络服务的可靠性和可用性。
Keepalived 的工作原理可以分为几个关键部分:

  • 虚拟路由冗余协议(VRRP):

VRRP 是 Keepalived 的核心组件之一,它允许多个服务器共享一个虚拟 IP 地址。
在一个 VRRP 设置中,会有一个主服务器和一个或多个备份服务器。主服务器拥有虚拟 IP 地址,并处理所有的网络流量。
如果主服务器发生故障,VRRP 会自动将虚拟 IP 地址转移到一个备份服务器上,确保服务的连续性。

  • 健康检查:

Keepalived 通过执行健康检查来监控服务器和服务的状态。
这些检查可以是简单的 ping 测试,也可以是更复杂的脚本或HTTP请求。
如果健康检查失败,Keepalived 会认为相应的服务器或服务出现了问题,并启动故障转移过程。

  • 负载均衡:

虽然 Keepalived 主要用于高可用性,但它也支持基本的负载均衡功能。
它可以将入站流量分配给多个后端服务器,从而提高整体服务的可扩展性和效率。

  • 配置灵活性:

Keepalived 的配置是通过文本文件完成的,这使得它既灵活又易于管理。
管理员可以定义多种不同的故障转移策略,以适应不同的网络环境和需求。
总的来说,Keepalived 的工作原理是通过 VRRP 实现高可用性,在检测到主服务器故障时自动进行故障转移,同时提供健康检查机制来监控服务器和服务的状态,并支持基本的负载均衡功能。这些特性使其成为保持网络服务连续可用的强大工具。

解释看不懂也没关系 不要纠结 能达到目的就行

使用步骤

1.安装

使用yum安装 其他方式安装 也可以 (源码安装请自行百度 官网地址https://www.keepalived.org/download.html)  
yum install -y keepalived

2、查看版本

rpm -qa|grep keepalived

3、查看安装后目录

rpm -qc keepalived

4、查看安装后目录

rpm -qc keepalived

5、配置

主机A

vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx_pid.sh" 
    interval 2                          
    weight 2                            
}
vrrp_instance VI_1 {
    state MASTER            
    interface ens192        
    virtual_router_id 66    
    priority 100            
    advert_int 1            
    #授权访问
    authentication {
        auth_type PASS 
        auth_pass 1111Asdi
    }
    track_script {
        chk_http_port            
    }
    virtual_ipaddress {
        10.158.242.126
    }
}

#检测脚本
vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
    interval 2                          #(检测脚本执行的间隔,单位是秒)
    weight 2                            #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
    state MASTER            # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens192         # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 66    # 虚拟路由编号,主从要一直
    priority 100            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    #授权访问
    authentication {
        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111Asdi
    }
    track_script {
        chk_http_port            #(调用检测脚本)
    }
    virtual_ipaddress {
        10.158.242.126            # 定义虚拟ip(VIP),可多设,每行一个
    }
}

主机B

vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx_pid.sh" 
    interval 2                          
    weight 2                            
}
vrrp_instance VI_1 {
    state BACKUP                        
    interface ens192               
    virtual_router_id 66                
    priority 99                         
    advert_int 1                       
    #授权访问
    authentication {
        auth_type PASS 
        auth_pass 1111Asdi
    }
    track_script {
        chk_http_port                   
    }
    virtual_ipaddress {
        10.158.242.126                  
    }
}

#检测脚本
vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
    interval 2                          #(检测脚本执行的间隔)
    weight 2                            #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
    state BACKUP                        # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens192                    # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 66                # 虚拟路由编号,主从要一直
    priority 99                         # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1                        # 检查间隔,默认为1s(vrrp组播周期秒数)
    #授权访问
    authentication {
        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111Asdi
    }
    track_script {
        chk_http_port                   #(调用检测脚本)
    }
    virtual_ipaddress {
        10.158.242.126                   # 定义虚拟ip(VIP),可多设,每行一个
    }
}

检查nginx的脚本

#!/bin/bash
#检测nginx是否启动了
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then    #如果nginx没有启动就启动nginx                        
      systemctl start nginx                #重启nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
              killall keepalived                    
      fi
fi
赋权
chmod 775 check_nginx_pid.sh

6.启动与检查

启动keepalived

systemctl start keepalived.service

设置开机启动

systemctl enable keepalived.service

查看开机自启列表

systemctl list-unit-files|grep enabled | grep keepalived

查看启动状态

systemctl status keepalived.service

7.测试

1.测试nginx的脚本
检查nginx状态:systemctl status nginx
停止nginx状态:systemctl stop nginx
他是否会重启nginx

2.测试主备切换
检查keepalived的状态:systemctl status keepalived
查询虚拟IP:ip a | grep ens192
停止keepalived:systemctl stop keepalived
再次查询虚拟IP
主机A
再次检查备机查看虚拟IP 是否转移
主机B
如果如上图 就是成功了

最后修改:2024 年 01 月 08 日
如果觉得我的文章对你有用,请随意赞赏