Keepalived

发布于 2021-09-10  2.3k 次阅读


Keepalived是为Nginx集群提供高可用的解决方案,传统的Nginx集群搭建一台Nginx服务器和多个web服务器(tomcat,jboss……),单台的Nginx假如出现单点故障,整个集群就容易瘫痪,无法提供服务

一,传统Nginx+Tomcat集群搭建

使用Nginx和3个Tomcat服务器组成集群

我只准备两台服务器192.168.68.133和192.168.68.153,192.168.68.133安装nginx,192.168.68.153安装Tomcat,我使用不同的端口号启动3台tomcat

192.168.68.153安装Tomcat和区别端口启动3台不进行描述

nginx配置:

http{
    
    upstream wql{
    ip_hash;
    server 192.168.68.153:8080;
    server 192.168.68.153:8081;
    server 192.168.68.153:8082;
}
    server{
    listen 9999;
    server_name localhost;
    location /{
    proxy_pass http://wql
}}}

二,VRRP协议

Keepalived软件是由C语言编写的,最初是专门为LVS负载均衡设计的,Keepalived软件主要是基于VRRP协议实现高可用的

VRRP(Virtual Route Redundancy Protocol)协议,译为虚拟路由冗余协议,VRRP协议将两台或者多台路由设备虚拟成一个设置,对外提供虚拟的虚拟的路由器IP,而在路由器内部,如果实际拥有这个对外IP的路由器工作正常就是为MASTER,MASTER实现针对虚拟路由器IP的各种网络功能,其他设备不拥有该虚拟IP则为BACKUP,BACKUP负责接收MASTER的VRRP状态通告信息,但不具备对外的网络功能,当MASTER失效后BACKUP将接管原来的MASTER,负责对外提供网络服务

VRRP的重要概念(虚拟路由IP):虚拟路由IP解决了使用多台Nginx提供高可用服务时,多台Nginx监听端口冲突,请求处理不一样,编码混乱的问题,通过从多台nginx抽取一个虚拟IP地址作为服务访问地址,运行只有一台nginx提供访问,当出现有单点故障服务有备用机顶替

VRRP协议的两个子协议:

 1,选择协议:VRRP可以把虚拟路由器的责任动态分配到局域网上的真实VRRP路由器的其中一台,其中的虚拟路由即virtual路由群主创建一个不真实存在的路由,这个虚拟路由也是有对应的IP地址,而且VRRP路由1和VRRP路由2之前会有竞争选择,通过竞争选择来产生MASTER和BACKUP

 2,路由容错协议:MASTER路由和BACKUP路由之间会有一个心跳检测,MASTER会定时告知BACKUP自己的状态,如果在指定时间内,BACKUP没有接收到通知内容,BACKUP就会取代MASTER,

MASTER的特权:虚拟路由和后端服务器都是通过MASTER进行数据传递交互的,而备份降低则会直接丢弃这些请求和数据,不做处理,只是去监听MASTER的状态

VRRP协议的两个重要角色:

  • MASTER:提供实际的网络服务
  • BACKUP:相当于备用机,MASTER正常运行时,它不负责任何网络请求,当MASTER挂了它将接替MASTER

注:判断MASTER是否存活,主要提供心跳机制,MASTER运行会隔一段时间发生一个信息段给BACKUP证明自己存活,当超时未发送说明MASTER宕机(很多分布式高可用框架都采用这种机制)

三,Keepalived的安装和配置

一,Keepalived的安装

① 从官网下载Keepalived(地址:https://keepalived.org/)

下载版本自选,我下载keepalived-2.0.20.tar.gz

② 将源码包上传到服务器并解压

上传方式:

  • rz命令
  • XFTP文件传输客户端
  • winscp传输软件
#解压
tar -zxvf  keepalived-2.0.20.tar.gz

③ 对文件进行配置

#进入解压后的keepalived源码目录找到configure
cd /home/keepalived-2.0.20
#配置命令(sysconf是指定系统配置文件目录,指定make安装后启动文件保存的位置)
./configure --sysconf=/etc --prefix=/usr/local

④ 对keepalived进行编译安装

make && make install

安装完成后:

  • 系统配置文件:/etc/keepalived/keepalived.conf
  • 启动文件:/usr/local/sbin/keepalived

二,Keepalived的配置文件

keepalived的配置文件主要分为三个部分:

  • 第一部分:global全局配置
  • 第二部分:vrrp相关配置
  • 第三部分:LVS相关配置

注:主要使用keepalived实现nginx高可以部署,没有用到LVS,所以重点侧重配置文件前两部分

一,global全局块配置

global_defs {
    #通知邮件,当keepalived发生切换时需要发送email给具体的邮箱
   notification_email {
    #发送的邮箱地址
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
    #设置发件人的邮箱信息
   notification_email_from Alexandre.Cassen@firewall.loc
    #指定smpt服务地址
   smtp_server 192.168.200.1
    #指定smpt服务连接超时时间
   smtp_connect_timeout 30
    #运行keepalived服务器的一个标识,可以用做发送邮件的主题信息
   router_id LVS_DEVEL
    #VRRP配置
    #默认是不跳过检查,检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思是,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)
   vrrp_skip_check_adv_addr
    #严格遵循VRRP协议
   vrrp_strict
    #在一个接口发送的两个免费ARP之间延迟,可以精确到毫秒级,默认为0
   vrrp_garp_interval 0
        #在一个网卡上每组消息之间的延迟时间,默认为0
   vrrp_gna_interval 0
}

二,VRRP相关配置

vrrp_instance VI_1 {

    #设置当前的keepalived是MASTER还是BACKUP
    state MASTER
    #主要用于VRRP实例绑定的接口,原来发送VRRP数据包,需要填写当前的网卡名称(ens33,eth0)
    interface eth0
    #设置虚拟的路由ID,0-255之间
    virtual_router_id 51
    #指定优先级,多个VRRP路由节点,都会有一个竞争关系,谁的优先级越高,谁就是master
    priority 100
    #发送心跳机制的时间间隔
    advert_int 1
    
    #认证相关
    authentication {
        #认证类型,使用PASS(简单的密码认证)
        auth_type PASS
        #认证的密码 
        auth_pass 1111
    }

    #虚拟主机,让用户实际原来访问的,下面可以提供多个虚拟主机IP
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }

四,keepalived案例

案例要求:使用两台服务器192.168.68.133和192.168.68.153它们分别安装keepalived和nginx,keepalived提供虚拟主机ip192.168.68.199,其中192.168.68.133为MASTER,192.168.68.153为BACKUP,用户访问192.168.68.199,由MASTER提供服务,但MASTER宕机后,BACKUP接替MASETRE提供服务

 

一,192.168.68.133配置

keepalived.conf的配置:

global_defs {

   notification_email {
    #邮箱可以随便添
     fq@qq.com
   }

    #邮箱可以随便添
   notification_email_from wql@qq.com

    #必须填写同一个网段
   smtp_server 192.168.68.1
   smtp_connect_timeout 30

    #名称改为keepalived1
   router_id keepalived1

    #使用默认
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {

    #标记为MASTER
    state MASTER

    #填写自己的网卡,我的为ens33,有些为eth0需要根据自己的linux虚拟机而定
    interface ens33

    #两台keepalived用同一个id
    virtual_router_id 51

    #优先级,MASTER要比BACKUP的数字大
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }    

    virtual_ipaddress {
        #虚拟的主机IP,也可以填写多个
        192.168.68.199
    }        
}     

nginx的配置(主要是为了有直接可演示效果来配置的):

server {

        listen       8888;
        server_name  location;

        location / {
            default_type text/html;
            return 200 "<h1>真实主机IP:192.168.68.133<br>虚拟ip:192.168.68.199<h1>";
        }}

一,192.168.68.153配置

keepalived.conf的配置:

global_defs {

   notification_email {
     fq@qq.com
   }

   notification_email_from wql@qq.com
   smtp_server 192.168.68.1
   smtp_connect_timeout 30
   router_id keepalived2
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {

    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.68.199}
}

nginx的配置(主要是为了有直接可演示效果来配置的):

  server {
        listen 8888;
        server_name localhost;
        location /{
        default_type text/html;
        return 200 "<h1>真实主机IP:192.168.68.153<br>虚拟IP:192.168.68.199<h1>";
        }
        }

三,启动keepalived测试虚拟IP是否绑定

一,启动前查看两台服务器的IP

命令:ip a

192.168.68.133:

192.168.68.153:

一,启动后查看两台服务器的IP

命令:ip a

192.168.68.133:

192.168.68.153:

四,启动keepalived测试虚拟IP是否绑定

浏览器访问虚拟IP:192.168.68.199:8888

把192.168.68.133的keepalived进程杀死后,再进行访问虚拟IP:


路漫漫其修远兮,吾将上下而求索