keepalived高可用服务总结

 

目录

 一、 高可用服务介绍说明

 二、keepalived的重要功能

 三、 高可用keepalived服务部署流程

 四、 高可用服务企业应用

1)高可用服务常见异常问题---脑裂问题

2)如何实现keepalived服务自动释放vip地址资源

3) 如何高可用集群双主配置

4)高可用服务安全访问配置(负载均衡服务)(lb01和lb02均需配置)

 五、 keepalived服务总结


一、 高可用服务介绍说明

 

keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点状态,后来又加入了可以实现高可用的VRRP功能.此,keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx,Haproxy,MySQL等)的高可用解决方案软件.

keepalived软件主要是通过VRRP协议实现高可用功能的.VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,他能够保证当个别节点宕机时,整个网络可以不间断地运行.Keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能.
    


二、keepalived的重要功能

2.1 作为系统网络服务的高可用功能(failover)
keepalived可以实现任意两台主机之间,例如Master和Backup主机之间的故障转移和自动切换,这个主机可以使普通的不能停机的业务服务器,也可以是LVS负载均衡,Nginx反向代理这样的服务器.

keepalived高可用功能实现的基本原理为:
两台主机同时安装好keepalived软件并启动服务,开始正常工作时
角色为Master的主机获得所有资源并对用户提供服务
角色为Backup的主机作为Master主机的热备;

当角色为Master的主机失效或出现故障时
角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务

而当角色为Master的主机故障修复后,又会自动接管回他原来处理的工作
角色为Backup的主机则同时释放Master主机失效时他接管的工作
此时,两台主机将恢复到启动时各自的原始角色及工作状态

2.2 什么是VRRP
VRRP,全称Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议
VRRP的出现就是为了解决静态路由的单点故障问题
VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的.

VRRP通过竞选机制来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(Multicast)包(默认的多播地址224.0.0.18)形式发送的
虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址,:00-00-5E-00-01-{VRID}.
所以,在一个虚拟路由器中,不管谁是Master,对外都是相同的MAC和IP(称之为VIP).
客户端主机并不需要因Master的改变修改自己的路由配置.对它们来说,这种切换是透明的.

在一组虚拟路由器中,只有作为Master的VRRP路由器会一直发送VRRP广播包,此时Backup不会抢占Master
当Master不可用时,Backup就收不到来自Master的广播包了,此时多台Backup中优先级最高的路由器会抢占为Master.
这种抢占是非常快速的(可能只有1秒甚至更少),以保证服务的连续性,处于安全性考虑,VRRP数据包使用了加密协议进行了加密.

2.3 面试的时候怎么说
    

keepalived高可用对之间是通过VRRP通信的,因此,我从VRRP开始给您讲起.
1)VRRP,全称Virtual Router Reduancy Protocol,中文名为虚拟路由器冗余协议,VRRP的出现是为了解决静态路由的单点故障,
2)VRRP是通过一种竞选协议来将路由任务交给某台VRRP路由器的,
3)VRRP用IP多播的方式,(默认多播地址(224.0.0.18))实现高可用对之间通信.
4)工作时主节点发包,备节点接包,当备节点接收不到主节点发的包的时候,就启动接管程序接管主节点的资源.备节点可以有多个,通过优先级竞选,但一般keepalived系统运维工作中都是一对.
5)VRRP使用了加密协议加密数据,但keepalived官方目前还是推荐用明文的方式配置认证类型和密码.
介绍完了VRRP,接下来我在介绍一下keepalived服务的工作原理;
keepalived高可用对之间是通过VRRP进行通信的,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务.
在keepalived服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备他还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性,接管速度最快可以小于一秒

三、 高可用keepalived服务部署流程

经过了前面对Keepalived的介绍和原理讲解,相信读者已经初步了解了Keepalived这个高可用软件,下面开始实施之旅.   

下面是是对负载均衡服务器实现高可用

第一个历程: 准备两台服务器并且均配置好负载均衡服务 (lb01 lb02)
第二个历程: 安装部署keepalived软件 (lb01 lb02)
    yum install -y keepalived
第三个历程: 编写keepalived配置文件(lb01 lb02) 
lb01配置信息:     --此处配置文件同ansible配置文件一样都需要注意格式,否则不会被执行
    [root@lb01 ~]# cat /etc/keepalived/keepalived.conf 
    ! Configuration File for keepalived
    
    global_defs {
        router_id lb01
    }
   
    vrrp_instance oldboy {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 150
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.0.0.3/24
        }
    }


    lb02配置信息:   --此处配置文件同ansible配置文件一样都需要注意格式,否则不会被执行
    ! Configuration File for keepalived
    
    global_defs {
       router_id lb02
    }
    
    vrrp_instance oldboy {
        state BACKUP
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.0.0.3/24
        }   
    }

第四个历程: 启动keepalived服务
    systemctl start keepalived
    systemctl enable keepalived
    systemctl status keepalived

第五个历程: 修改域名和IP地址解析关系
    windows修改hosts主机文件
    10.0.0.3  www.test.com    

第六个历程:测试

    当lb01的keepalived服务停止运行时,lb02收不到来自lb01的组播信息会夺取vip地址信息10.0.0.3成为新的主,保证负载均衡正常运作。

 

补充:keepalived服务配置文件介绍

  vim /etc/keepalived/keepalived.conf
    GLOBAL    CONFIGURATION            --- 全局配置部分
    VRRPD     CONFIGURATION            --- VRRP协议配置部分
    LVS     CONFIGURATION            --- LVS服务管理配置部分
    [root@lb01 ~]# cat /etc/keepalived/keepalived.conf 
    ! Configuration File for keepalived
   
    global_defs {                      --- 全局配置部分
       notification_email {            --- 设置发送邮件信息的收件人
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from oldboy@163.com   --- 设置连接的邮件服务器信息
       smtp_server 163.smtp.xxx_
       smtp_connect_timeout 30 
       router_id LVS_DEVEL           --- 高可用集群主机身份标识(集群中主机身份标识名称不能重复)
    }
   
    vrrp_instance oldboy {           --- Vrrp协议家族 oldboy
        state MASTER                 --- 标识所在家族中的身份 (MASTER/BACKUP)
        interface eth0               --- 指定虚拟IP地址出现在什么网卡上
        virtual_router_id 51         --- 标识家族身份信息 多台高可用服务配置要一致 
        priority 100                 --- 设定优先级 优先级越高,就越有可能成为主
        advert_int 1                 --- 定义组播包发送的间隔时间(秒)  主和备配置一样  1
        authentication {             --- 实现通讯需要有认证过程
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {          --- 配置虚拟IP地址信息
            192.168.200.16
            192.168.200.17
            192.168.200.18
        }
    }

 

四、 高可用服务企业应用


1)高可用服务常见异常问题---脑裂问题


    出现原因: 
    高可用备服务器接收不到主服务器发送的组播包,备服务器上会自动生成VIP地址

    物理原因:
    高可用集群之间通讯线路出现问题
    逻辑原因:
    有安全策略阻止
    
    如何解决脑裂问题:
    

01. 进行监控,发出告警
    备服务器出现VIP地址的原因:
    a 主服务器出现故障
    b 出现脑裂问题
    监控脑裂的shell脚本:
    [root@lb02 ~]# vim /server/scripts/naolie.sh
    #!/bin/bash
    ip a s eth0|grep "10.0.0.3" >/dev/null
    if [ $? -eq 0 ]
    then
      echo "keepalived服务出现异常,请进行检查"|mail -s 异常告警-keepalived  330882721@qq.com
    fi
    
    加入定时任务每隔一分钟执行一次

    补充:shell脚本进行比较判断
    -eq  等于
    -ne  不等于
    -lt  小于
    -gt  大于
    -le  小于等于
    -ge  大于等于
    
02. 直接关闭一台服务器的keepalived服务


    


2)如何实现keepalived服务自动释放vip地址资源


    nginx(皇帝) + keepalived(妃子): nginx服务停止(皇帝死了),keepalived也必须停止(殉情)

第一个历程: 编写监控nginx服务状态监控
    vim /server/scripts/check_web.sh
    #!/bin/bash
    num=`ps -ef|grep -c [n]ginx`
    if [ $num -lt 2 ]
    then
       systemctl stop keepalived
    fi

第二个历程: 测试监控脚本
    keepalived信息配置    --(以这个为主)
    [root@lb01 scripts]# cat /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
     global_defs {
       router_id lb01
    }
    
    vrrp_script check_web {
     script "/server/scripts/check_web.sh"  
     interval 3   
     weight 2
    }
    
    vrrp_instance oldboy {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 150
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
         10.0.0.3/24
        }
       track_script {
             check_web
       }
    }
 第三个历程: 测试
    停掉nginx服务的同时keepailved服务也会自动停掉
    这样vip地址资源会释放给备,备会成为新的主,保证用户可以正常访问  
    systemctl stop nginx
    systemctl status keepalived   

补充:配置文件介绍

    check_web.sh     --(记得给脚本可执行权限)
    systemctl status keepalived  --(检查keepalived服务是否停止运行)
    第三个历程: 实时监控nginx服务状态---keepalived配置文件
    check_web=/server/scripts/check_web.sh
    vrrp_script check_web {
       script "/server/scripts/check_web.sh"   --- 定义需要监控脚本(脚本是执行权限)   
       interval 2                              --- 执行脚本的间隔时间(秒)  
       weight 2                                --- ???
    }

    $check_web
    track_script {                             
         check_web                             --- 调用执行你的脚本信息
    }    
    


3) 如何高可用集群双主配置

第一个历程: 编写lb01服务器keepalived配置文件
    [root@lb01 ~]# cat /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
     global_defs {
       router_id lb01
    }
    
    vrrp_instance oldboy {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 150
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
         10.0.0.3/24
        }
    }
    vrrp_instance oldgirl {
        state BACKUP
        interface eth0
        virtual_router_id 52
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {             
         10.0.0.4/24
        }
    }
        
第二个历程: 编写lb02服务器keepalived配置文件 
    [root@lb02 ~]# cat /etc/keepalived/keepalived.conf   
    ! Configuration File for keepalived
    global_defs {
       router_id lb02
    }
    
    vrrp_instance oldboy {
        state BACKUP
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.0.0.3/24
        }
    }
    vrrp_instance oldgirl {
        state MASTER
        interface eth0
        virtual_router_id 52
        priority 150
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.0.0.4/24
        }
    }
    
第三个历程: 编写域名和IP地址解析信息
    进行抓包查看:
    www.test.com --- 10.0.0.3(10.0.0.5)
    10.0.0.1       --- 10.0.0.3
    10.0.0.5       --- 10.0.0.7
    10.0.0.7       --- 10.0.0.5
    10.0.0.3       --- 10.0.0.1
    
    bbs.test.com --- 10.0.0.4(10.0.0.6)
    10.0.0.1       --- 10.0.0.4
    10.0.0.6       --- 10.0.0.7
    10.0.0.7       --- 10.0.0.6
    10.0.0.4       --- 10.0.0.1


4)高可用服务安全访问配置(负载均衡服务)(lb01和lb02均需配置)

通过设置监听地址限制用户访问通道:
外网接口只开通10.0.0.3/10.0.0.4
第一个历程: 修改内核文件
    异常问题:
    01. 如何设置监听网卡上没有的地址
    解决: 需要修改内核信息
    echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
    sysctl -p 

第二个历程: 修改nginx负载均衡文件
    lb01/lb02
    vim /etc/nginx/conf.d/lb.conf
    upstream oldboy {
       server 10.0.0.7:80;
       server 10.0.0.8:80;
       server 10.0.0.9:80;
    }
    server {
        listen       10.0.0.3:80;
        server_name  www.test.com;
        location / {
           proxy_pass http://oldboy;
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_next_upstream error timeout http_404 http_502 http_403;
        }
    }
    server {
        listen       10.0.0.4:80;
        server_name  bbs.test.com;
        location / {
           proxy_pass http://oldboy;
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
        }
    }

第三个历程: 重启nginx负载均衡服务
    systemctl restart nginx   --涉及到ip地址的修改要用restart重启

五、 高可用服务总结


1) 高可用服务作用(避免出现单点故障)
2) keepalived高可用服务
       1. 管理LVS负载均衡软件
       2. 实现高可用功能(vrrp原理)
3) keepalived服务配置文件 
4) keepalived服务企业应用
       1. 可能出现脑裂问题           --- 脚本编写
       2. 如何实现自动释放资源     --- 脚本(监控web服务)  修改keepalived文件
       3. 如何实现双主配置            --- 编写keepalived配置文件  编写多个vrrp实例
       4. 如何实现负载均衡安全访问 --- 编写负载均衡nginx配置文件 配置监听vip地址信息

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值