Keepalived安装以及双机热备

  • Keepalived简介

    Keepalived是Linux下一个轻量级别的高可用解决方案。高可用:广义来讲,是指整个系统的高可用行;狭义的来讲就是主机的冗余和接管。它与HeartBeat实现类似的功能,都可以实现服务或者网络的高可用,但是又有差别,HeartBeat是一个专业的、功能完善的高可用软件,它提供HA软件所需的基本功能,比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦,与HeartBeat相比,Keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然它没有HeartBeat功能强大,但是Keepalived部署和使用非常的简单,所有配置只需要一个配置文件即可以完成。

  • VRRP协议与工作原理

   在现实的网络环境中。主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通信就会失效,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。VRRP协议是一种容错的主备模式的协议,保证当主机的下一跳路由出现故障时,由另一台路由器来代替出现故障的路由器进行工作,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信。

  • 安装keepalived

安装环境:centos7(腾讯云)

注意事项:1、在做keepalived的双机热备是要注意两台服务器之间是否内网连接。

                  2、因为我是在腾讯云中安装的,我的两台服务器不在同一个区,因为无法内网访问,我是通过建立对等连接来实现内网互通的。

                  3、防火墙要注意关闭掉。

                 4、keepalived在centos中的安装可以通过yum源直接下载的方式也可以通过,先下载压缩包然后再安装的方式。我在安装的过程中,先用的yum源直接安装的方式(下载的最新版本),配置完之后主备节点死活没有连接成功,于是放弃了用的安装包的方式安装的,大家用的过程中谨慎选择,也可能是我太菜没有找到问题吧。

步骤:

1、在/usr/local/src路径下,下载所需版本的压缩包,安装之前需要先安装依赖包

yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel
yum install -y libnfnetlink-devel
yum -y install openssl-devel

以上三个是比较全的,我在看网上教程的时候只运行第一行命令在后续操作中会出现缺少依赖的情况

下载并解压

[root@master src]# wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz
[root@master src]# tar xvf keepalived-2.0.7.tar.gz
[root@master src]# cd keepalived-2.0.7

安装(安装过程中注意查看安装日志)

[root@master keepalived-2.0.7]# ./configure --prefix=/usr/local/keepalived
[root@master keepalived-2.0.7]# make && make install

安装完成以后会生成一下路径

/usr/local/etc/keepalived/keepalived.conf
/usr/local/etc/sysconfig/keepalived
/usr/local/sbin/keepalived

2、安装完成以后需要将相对应地方的文件复制到指定路径下并进行启动

# keepalived启动脚本变量引用文件,默认文件路径是/etc/sysconfig/,也可以不做软链接,直接修改启动脚本中文件路径即可(安装目录下)
[root@localhost /]# cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/keepalived 
 
# 将keepalived主程序加入到环境变量(安装目录下)
[root@localhost /]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived
 
# keepalived启动脚本(源码目录下),放到/etc/init.d/目录下就可以使用service命令便捷调用
[root@localhost /]# cp /usr/local/src/keepalived-2.0.7/keepalived/etc/init.d/keepalived  /etc/init.d/keepalived
 
# 将配置文件放到默认路径下
[root@localhost /]# mkdir /etc/keepalived
[root@localhost /]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
  • 加为系统服务:chkconfig –add keepalived
  • 开机启动:chkconfig keepalived on
  • 查看开机启动的服务:chkconfig –list
  • 启动、关闭、重启service keepalived start|stop|restart

启动成功以后查看服务启动状态(下图表示启动成功)

Keepalived安装以及双机热备_第1张图片

3、keepalived.conf配置文件修改

    keepalived服务安装完成之后,后面的主要工作就是在keepalived.conf文件中配置HA和负载均衡。一个功能比较完整的常用的keepalived配置文件,主要包含三块:全局定义块、VRRP实例定义块和虚拟服务器定义块。全局定义块是必须的,如果keepalived只用来做ha,虚拟服务器是可选的。下面是一个功能比较完整的配置文件模板

#全局定义块
global_defs {
    # 邮件通知配置
    notification_email {
        email1
        email2
    }
    notification_email_from email
    smtp_server host
    smtp_connect_timeout num
 
    lvs_id string
    router_id string    ## 标识本节点的字条串,通常为hostname
}
 
#VRRP 实例定义块
vrrp_sync_group string { 
    group {
        string
        string
    }
}
 
vrrp_instance string {
    state MASTER|BACKUP
    virtual_router_id num
    interface string
    mcast_src_ip @IP 
    priority num
    advert_int num
    nopreempt
    smtp_alert
    lvs_sync_daemon_interface string 
    authentication {
        auth_type PASS|AH
        auth_pass string
    }
 
    virtual_ipaddress {  # Block limited to 20 IP addresses @IP
        @IP
        @IP
    }
}
 
#虚拟服务器定义块
virtual_server (@IP PORT)|(fwmark num) { 
    delay_loop num
    lb_algo rr|wrr|lc|wlc|sh|dh|lblc 
    lb_kind NAT|DR|TUN
    persistence_timeout num 
    protocol TCP|UDP
    real_server @IP PORT { 
        weight num
        notify_down /path/script.sh
        TCP_CHECK { 
            connect_port num 
            connect_timeout num
        }
    }
 
    real_server @IP PORT {
        weight num
        MISC_CHECK {
            misc_path /path_to_script/script.sh(or misc_path “/path_to_script/script.sh ”)
        }
    }
 
    real_server @IP PORT {
        weight num
        HTTP_GET|SSL_GET {
            url { 
                # You can add multiple url block path alphanum
                digest alphanum
            }
            connect_port num
            connect_timeout num 
            nb_get_retry num 
            delay_before_retry num
        }
    }
}

大家简单了解一下上面的配置,接下来介绍一下。我在配置双机热备时的配置文件

  • Keepalived双机热备步骤

手稿:

Keepalived安装以及双机热备_第2张图片

前置条件两台服务器中都安装完成Keepalived

1、更改主备服务器重的配置文件,keepalived.conf在/etc/keepalived/下面

MASTER(主节点)更改/etc/keepalived/keepalived.conf 配置文件

! Configuration File for keepalived

global_defs {
   router_id 172.17.0.13
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    unicast_src_ip 172.17.0.13
    unicast_peer {
    172.21.0.10
    }
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.21.0.19
    }
}

配置文件解析:

Keepalived安装以及双机热备_第3张图片

BACKUP(备节点)更改/etc/keepalived/keepalived.conf 配置文件

! Configuration File for keepalived

global_defs {
   router_id 172.21.0.10
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    unicast_src_ip 172.21.0.10
    unicast_peer {
    172.17.0.13
    }
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.21.0.19
    }
}

配置完成以后重启主备Keepalived

通过查看路由来验证关联是否成功

当MASTER节点服务器中的keepalived启动的时候,虚拟ip会在该服务器中显示

Keepalived安装以及双机热备_第4张图片

关闭MASTER节点,会发现虚拟IP漂移到了BACKUP节点

Keepalived安装以及双机热备_第5张图片

 

  • 注意事项

1、特别注意腾讯云的对等连接有可能存在与服务器中docker服务路由冲突,如果出现该情况对等连接之后将无法内网互通,我是把docker卸载掉了。在生产环境部署架构时,建议不要把多个应用部署在同一台服务器中,避免产生不必要的麻烦。如下图,我在此处就费了很长时间才解决的,要保证主备keepalived两台服务器之间的内网互通才能建立关联关系。

Keepalived安装以及双机热备_第6张图片

2、另外还有需要注意的地方就是有关keepalived单播和多播的问题,我用的是单播模式:参考链接https://www.jianshu.com/p/7c709c3be4a9

3、在编辑keepalived.conf文件的时候切记不要出现中文符号,中文空格也不行,如果启动失败,看一下keepalived的启动日志信息,如果显示keepalived.conf配置文件相关的报错信息,那么就仔细检查一下你的配置文件。

 

下一篇将详细介绍Keepalived+Nginx的高可用部署方案。

如有疑问可以微信咨询

 

Keepalived安装以及双机热备_第7张图片

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(常用框架)