运维之道 | Keepalived高可用集群

Keepalived高可用集群

一、Keepalived

VRRP原理

Keepalived软件主要是通过VRRP协议实现高可用功能的,VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写.VRRP出现的目的就是为了解决静态路由单点故障问题

在这里插入图片描述

  • master在工作状态会不断群发一个广播包(内涵优先参数,检测主服务器是否宕机)
  • 其他路由收到收到广播后会和自己的优先参数作对比,如果优先参数小于自己则什么都不执行,如果优先参数大于自己则开启争抢机制
  • 如果启动了争抢机制,他就会群发自己的优先参数,最终优先参数最小的称为master路由

keepalived的三个核心模块

core核心模块 chech健康监测 vrrp虚拟路由冗余协议
  • core模块为Keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析;
  • check模块负责健康检查;
  • vrrp模块负责实现vrrp协议;

Keepalived服务的三个重要功能

1.管理LVS    2.对LVS集群节点检查    3.作为系统网络服务的高可用功能


Keepalived高可用故障切换转移原理

Keepalived高可用故障切换,是通过VRRP虚拟路由器冗余协议来实现的。

在Keepalived服务正常工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主Master节点发生故障时,就无法发送心跳消息,备节点无法检测到来自主Master节点心跳了,于是调用自身的接管程序,接管主Master节点的IP资源及服务。而当主Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色(或者配置非抢占模式,继续使用Master节点)。

在这里插入图片描述


二、Keepalived搭建
主机 IP
Master 192.168.182.130
Backup 192.168.182.133
Vserver 192.168.182.111
  • 使用yum安装keepalived(主备服务器均要安装)
[root@localhost ~]# yum install -y keepalived
  • 修改Master服务器Keepalived配置文件
! Configuration File for keepalived

global_defs {
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.182.111/24
    }
}
  • 修改BACKUP服务器Keepalived配置文件
! Configuration File for keepalived

global_defs {
}

vrrp_instance VI_1 {
    state BACKUP                      ##需修改为BACKUP
    interface ens33
    virtual_router_id 51
    priority 90                       ##优先级应低于Master节点
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.182.111/24
    }
}
  • 开启keepalived服务(主备服务器均要开启)
[root@localhost keepalived]# systemctl start keepalived
  • 测试高可用

当Master、BACKUP均开启时,根据Master优先级高于BACKUP,则启用Master节点
在这里插入图片描述
当Master宕机后,Keepalived实现故障转移,启用BACKUP节点

[root@Master keepalived]# systemctl stop keepalived     ///关闭主节点Keepalived服务

在这里插入图片描述
PS:若不希望主服务器恢复启动后,切换回主服务器模式,则开启非抢占模式

vrrp_instance VI_1 {
    state BACKUP                   #角色统一改为BACKUP
    priority 100				   #但需要设置一个优先级高于另一台服务器
    ......
    nopreempt                      #非抢占模式
    ......
}

三、Keepalived配置解析
! Configuration File for keepalived

#################################`Keepalived邮件报警配置`###################################

global_defs {                                     #全局定义部分
    notification_email {                          #设置报警邮件地址,可设置多个
        acassen@firewall.loc                      #接收通知的邮件地址
    }                          
    notification_email_from test0@163.com         #设置 发送邮件通知的地址
    smtp_server smtp.163.com                      #设置 smtp server 地址,可是ip或域名.可选端口号 (默认25)
    smtp_connect_timeout 30                       #设置 连接 smtp server的超时时间
    router_id LVS_DEVEL                           #主机标识,用于邮件通知
    vrrp_skip_check_adv_addr                   
    vrrp_strict                                   #严格执行VRRP协议规范,此模式不支持节点单播
    vrrp_garp_interval 0                       
    vrrp_gna_interval 0     
    script_user keepalived_script                 #指定运行脚本的用户名和组。默认使用用户的默认组。如未指定,默认为keepalived_script 用户,如无此用户,则使用root
    enable_script_security                        #如过路径为非root可写,不要配置脚本为root用户执行。
} 
      
#################################`Keepalived健康检查脚本`###################################  

vrrp_script chk_nginx_service {                   #VRRP 脚本声明
    script "/etc/keepalived/chk_nginx.sh"         #周期性执行的脚本
    interval 3                                    #运行脚本的间隔时间,秒
    weight -20                                    #权重,priority值减去此值要小于备服务的priority值
    fall 3                                        #检测几次失败才为失败,整数
    rise 2                                        #检测几次状态为正常的,才确认正常,整数
    user keepalived_script                        #执行脚本的用户或组
}                                             

#####################################`VRRP配置`##########################################

vrrp_instance VI_1 {                              #vrrp 实例部分定义,VI_1自定义名称
    state MASTER                                  #指定 keepalived 的角色,必须大写 可选值:MASTER|BACKUP
    interface ens33                               #网卡设置,lvs需要绑定在网卡上,realserver绑定在回环口。区别:lvs对访问为外,realserver为内不易暴露本机信息
    virtual_router_id 51                          #虚拟路由标识,是一个数字,同一个vrrp 实例使用唯一的标识,MASTERBACKUP 的 同一个 vrrp_instance 下 这个标识必须保持一致
    priority 100                                  #定义优先级,数字越大,优先级越高。
    advert_int 1                                  #设定 MASTERBACKUP 负载均衡之间同步检查的时间间隔,单位为秒,两个节点设置必须一样
    authentication {                              #设置验证类型和密码,两个节点必须一致
        auth_type PASS                        
        auth_pass 1111                        
    }                                         
    virtual_ipaddress {                           #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
        192.168.119.130                       
    }
    track_script {                                #脚本监控状态
        chk_nginx_service                         #可加权重,但会覆盖声明的脚本权重值。chk_nginx_service weight -20
    }
        notify_master "/etc/keepalived/start_haproxy.sh start"  #当前节点成为master时,通知脚本执行任务
        notify_backup "/etc/keepalived/start_haproxy.sh stop"   #当前节点成为backup时,通知脚本执行任务
        notify_fault  "/etc/keepalived/start_haproxy.sh stop"   #当当前节点出现故障,执行的任务; 
}                                             

###################################`LVS负载均衡配置`##################################### 

virtual_server 192.168.119.130 80  {          #定义RealServer对应的VIP及服务端口,IP和端口之间用空格隔开
    delay_loop 6                              #每隔6秒查询realserver状态
    lb_algo rr                                #后端调试算法(load balancing algorithm)
    lb_kind DR                                #LVS调度类型NAT/DR/TUN
    #persistence_timeout 60                   同一IP的连接60秒内被分配到同一台realserver
    protocol TCP                              #用TCP协议检查realserver状态
    real_server 192.168.119.120 80 {          
        weight 1                              #权重,最大越高,lvs就越优先访问
        TCP_CHECK {                           #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
            connect_timeout 10                #10秒无响应超时
            retry 3                           #重连次数3次
            delay_before_retry 3              #重连间隔时间
            connect_port 80                   #健康检查realserver的端口
        }                                     
    }                                         
    real_server 192.168.119.121 80 {          
        weight 1                              #权重,最大越高,lvs就越优先访问
        TCP_CHECK {                           #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
            connect_timeout 10                #10秒无响应超时
            retry 3                           #重连次数3次
            delay_before_retry 3              #重连间隔时间
            connect_port 80                   #健康检查realserver的端口
        }                                     
    }                                         
}                                             

基于web网站的负载均衡高可用如下配置

! Configuration File for keepalived
                                    #全局配置
global_defs {
   notification_email {
                                    #收件人地址
   }
                                    #邮件服务器
}
VRRP配置DS1
vrrp_instance VI_1 {
    state MASTER                    #角色类型MASTER|BACKUP
    interface ens33                 #网卡名称
    virtual_router_id 51            #虚拟路由id(需要与BACKUP一致)
    priority 100                    #优先级
    advert_int 1                    #没1秒检查一次
    #nopreempt                      #非抢占模式

    authentication {
        auth_type PASS              #认证类型  主备之间必须一样
        auth_pass 1111              #认证密码  主备之间必须一样
    }
    virtual_ipaddress {
        192.168.254.250             #虚拟ip(vip)
    }
}

#LVS配置
virtual_server 192.168.254.250 80 {    
    delay_loop 3                    #健康检查时间间隔
    lb_algo rr                      #负载均衡调度算法  
    lb_kind DR                      #负载均衡转发规则 
    protocol TCP                    #协议

    real_server 192.168.254.18 80 { #要监控的real_server的ip和端口号
            weight 1                #权重
        TCP_CHECK {                 #基于tcp协议的检查
            connect_timeout 3       #连接时间超时
            retry 3                 #重连次数
            delay_before_retry 3    #重连间隔时间
        }
    }


    real_server 192.168.254.19 80 {
            weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }   
    }   
}

基于mysql或者mariadb数据库的高可用如下配置

! Configuration File for keepalived

global_defs {
   notification_email {
    }
}

vrrp_script chk_mysql {                #check_mysql是为执行脚本计划起的名字
    script "/root/sh/check_mysql.sh"   #指定要执行脚本的路径
    interval 2                         #脚本执行间隔,每2s检测一次
}

vrrp_instance HA_1 {
    state BACKUP
    interface ens33
    virtual_router_id 151
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.254.250
    }
    track_script {
        chk_mysql
    }
}

资料处:https://www.cnblogs.com/fengzi7314/p/9912101.html
资料处:https://ke.qq.com/course/443261?taid=3895324884517757
资料处:https://www.bilibili.com/video/av80201614?p=56
资料处:https://www.cnblogs.com/ywrj/p/9483427.html
资料处:https://cloud.tencent.com/developer/article/1416596

发布了97 篇原创文章 · 获赞 10 · 访问量 3387

猜你喜欢

转载自blog.csdn.net/VillianTsang/article/details/103840380