高性能集群软件Keepalived

Keepalived的介绍以及安装与配置

Keepalived介绍:

           Keepalived是Linux下一个轻量级的高可用解决方案;起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态。它根据TCP/IP参考模型的第三、第四和第五层交换机机制检测每个服务节点的状态,如果某个服务节点出现异常,或工作出现故障,Keepalived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,Keepalived又可以自动将此服务节点重新加入服务器集群中,这些工作全部自动完成,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。

           Keepalived后来又加入了VRRP的功能,VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行。因此,Keepalived一方面具有服务器状态检测和故障隔离功能,另一方面也具有HA cluster 功能。

VRRP协议与工作原理

       VRRP,它是一种主备模式的协议,通过VRRP可以在网络发生故障时透明地进行设备切换而不影响主机间的数据通信;这其中涉及两个概念:物理路由器和虚拟路由器。

         VRRP可以将两台或多台物理路由器设备虚拟成一个虚拟路由器,这个虚拟路由器通过虚拟IP(一个或多个)对外提供服务,而在虚拟路由器内部是多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由器被称为主路由器(处于MASTER角色)。一般情况MASTER由选举算法产生,它拥有对外服务的虚拟IP,提供各种网络功能,如ARP请求、ICMP、数据转发等。而其他物理路由器不拥有对外的虚拟Ip,也不提供对外网络功能,仅仅接收MASTER的VRRP状态通告信息,这些路由器被统称为备份路由器(处于BACKUP角色)。当主路由器失效时,处于BACKUP角色的备份路由器将重新进行选举,产生一个新的主路由器进入MASTER角色继续提供对外服务。

        每个虚拟路由器独有一个唯一标识,称为VRID,一个VRID与一组IP地址构成了一个虚拟路由器。在VRRP协议中,所有的报文都是通过IP多播形式发送的,而在一个虚拟路由器中,只有处于MASTER角色的路由器会一直发生VRRP数据包,处于BACKUP角色的路由器只接收MASTER发送过来的报文信息,用来监控MASTER运行状态,因此,不会发生BACKUP抢占的现象,除非它的优先级更高。而当MASTER出现故障,多台BACKUP就会进行选举,优先级最高的BACKUP成为新的MASTER,这种选举并进行角色切换的过程非常快,因而保证了服务的持续可用性。

Keepalived工作原理

keepalive运行机制如下:

        在网络层,运行着4个重要的协议:互联网协议IP、互联网控制报文协议ICMP、地址转换协议ARP以及反向地址转换协议RARP。Keepalived在网络层采用的最常见的工作方式是通过ICMP协议向服务器集群中的那个节点发送一个ICMP数据包(类似于ping实现的功能),如果某个节点没有返回响应数据包,那么认为此节点发生了故障,Keepalived将报告次节点失效,并从服务器集群中剔除故障节点。

        在传输层,提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP。传输控制协议TCP可以提供可靠的数据传输服务、Ip地址和端口代表TCP的一个连接端。要获得TCP服务,需要在发送机的一个端口上和接收机的一个端口上建立连接,而Keepalived在传输层就是利用TCP协议的端口连接和扫描技术来判断集群点是否正常的。比如,对于常见的WEB服务默认的80端口、SSH服务默认的22端口等,Keepalived一旦在传输层探测到这些端口没有响应数据返回,就认为这些端口发生异常,然后强制将此端口对应得节点从服务器集群组中移除。

       在应用层,可运行FTP、TELNET、SMTIP、DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived的工作方式;例如:用户可以通过编写程序来运行keepalived。而keepalived将根据用户的设定检测各种程序或服务是否运行正常,如果Keepalived的检测结果与用户设定不一致时,Keepalived将把对应的服务从服务器中移除。

Keepalived的组件:

核心组件:

             VRRP Stack:实现HA集群中失败切换(Failover)功能。Keepalived通过VRRP功能能

再结合LVS负载均衡软件即可部署一个高性能的负载均衡集群系统。

ipvs wrapper:可以将设置好的IP VS规则发送到内核空间并提交给IP VS模块,最终实

现 IP VS模块的负载均衡功能。

           checkers:这是Keepalived 最基础的功能,也是最主要的功能,可实现对服务器运行状

态检测和故障隔离。

HA Cluster的配置前提:

                    (1) 各节点时间必须同步;

                              ntp, chrony

                    (2) 确保iptables及selinux不会成为阻碍;

                    (3) 各节点之间可通过主机名互相通信(对KA并非必须);

                           建议使用/etc/hosts文件实现;

                    (4) 确保各节点的用于集群服务的接口支持MULTICAST通信;

                              D类:224-239;

Keepalived安装与配置:

            Centos6.4以后版本可以直接yum安装:

                         yum install keepalived

           程序环境:

                   主配置文件:/etc/keepalived/keepalived.conf

                   主程序文件:/usr/sbin/keepalived

                       Unit File:keepalived.service

                      Unit File的环境配置文件:/etc/sysconfig/keepalived

     根据配置文件所实现的功能,将Keepalived配置分三类:

            Global Configuration

                      VRRPD 配置、LVS配置
                          全局配置以”global_defs”作为标识,在“global_defs”区域内的都是
                   全局配置选项:
                          global_defs {
                              notification_email {
                                     acassen@firewall.loc
                                    failover@firewall.loc
                                   sysadmin@firewall.loc
                               }
                             notification_email_from
                                    Alexandre.Cassen@firewall.loc
                             smtp_server 192.168.200.1
                             smtp_connect_timeout 30
                            router_id LVS_DEVEL
                         vrrp_mcast_group4 224.110.129.18
                       }
                     notification_email :用于设置报警邮件地址,可以设置多个,每行一个。注意,如果要开启邮                                                         件报警,需要开启本机的Sendmail服务。
                     notification_email_from :用于设置邮件的发送地址,真正的能发邮件的地址。
                     smtp_server:用于设置邮件的smtp server地址
                     smtp_connect_timeout:设置smtp server的超时时间
                     router_id :表示运行keepalived服务器的一个标识,是发邮件时显示在邮件主题中的信息
                     vrrp_mcast_group4 :多播地址段
                VRRP配置段主要用来配置节点角色(主或从)、绑定的网络接口、节点间验证机制、集群                     服务IP等。
                               vrrp_instance VI_1 {
                                               state MASTER
                                              interface eth0
                                              virtual_router_id 51
                                              priority 100
                                              advert_int 1
                                             authentication {
                                                  auth_type PASS
                                                  auth_pass 1111
                                              }
                                             virtual_ipaddress {
                                                         192.168.200.16
                                                         192.168.200.17
                                                         192.168.200.18
                                             }
                                            track_interface {
                                                            eth0
                                                            eth1
                                                             …
                                           }
                       VRRP 配置以” vrrp_instance“作为标识,包含了若干配置选项:
                                   vrrp_instance:是VRRP实例开始的标识,后跟VRRP实例名称
                                    state:用于指定Keepalived的角色,MASTER表示此主机是服 务器,BAVKUP表示此                                                  主机是备用服务器。
                    interface:虚拟IP配置指定的接口
                                  virtual_router_id:虚拟路由标识,它是一个数字,同一个 VRRP配置段的唯一标识,                                                         即在同一个vrrp_instance下,MASTER和BACKUP必须是一致的。
                                  priority:用于定义节点优先级,数字越大优先级越高。
                                  advert_int:设定MASTER和BACKUP主机之间同步检查的时间间隔,单位是秒。
                                 authentication:用于设定节点间通信验证类型和密码,验证类型主要有PASS(简单字                                       符串认证,支持前8位,可以用:openssl rand -base64 8 获取随机密码)和AH两                                          种,在一个vrrp_instance下,MASTER和BACKUP必须使用相同的密码才能正常通信。
                                virtual_ipaddress:用于设置虚拟IP地址(VIP)。
                                track_interface:配置要监控的网络接口,一旦接口出现故障,则转为FAULT状态;
                                nopreempt:定义工作模式为非抢占模式;可以实现主节点故障恢复后不再切回到主节                                                        点,让服务一直在备用节点工作,直到备用节点出现故障才会进行切换。在使                                                   用不抢占时,只能在”state“状态为BACKUP的节点上设置,而且这个节点的优                                                    先级必须高于其他节点。
                                 preempt_delay 300:抢占式模式下,节点上线后触发新选举操作的延迟时长;

           定义通知脚本

                   notify_master:指定当Keepalived进入MASTER状态时要执行的脚本,这个脚本可以是一个状                          态报警脚本,也可以是一个服务管理脚本。Keepalived允许脚本出入参数,因此灵活性很强。
                  notify_backup:当Keepalived进入BACKUP状态时要执行的脚本,这个脚本可以是一个状态报警                              脚本,也可以是一个服务管理脚本。
                  notify_fault:指定当Keepalived进入FAULT状态时要执行的脚本,脚本功能与前两个类似。
                  notify <STRING>|<QUOTED-STRING>:通用格式的通知触发机制,一个脚本可完成以上三种                           状态的转换时的通知;

实验: 单主配置示例

               环境:
                   两台主机分别是:172.16.252.18/16(node1) 配置BACKUP
                                                  172.16.252.19/16 (node2) 配置MASTER
                   两台主机分别配置:/etc/keepalived/keepalived.conf
5
                    两台主机:systemctl restart keepalived
                          启动之后,可以在MASTER的主机上查看:
6
                                 ip     a     l
7
                       下图中: 可以看出MASTER主机,一直向多播地址发送信息.
8

                       模拟MASTER主机宕机 :

                                 iptables -A OUTPUT -d 224.110.129.18 -j REJECT
                                  systemctl stop keepalived
                      BACKUP主机上:显示虚拟地址加进来了
9
                    ip a l 可以查看到虚拟地址了。如果MASTER主机再启动后,由于优先级高,VIP虚拟地址又被                        抢回来了!

双主模型的配置:

              所谓双主模型对于VRRP来讲还是单主,所不同的是在同一个接口上,配置了多个虚拟路由器。
               在上个实验基础上配置:
                    在note2主节点上配置:
                            同一个接口上同一组物理服务器上配置第二个虚拟路由器:
                                         vim     /etc/keepalived/keepalived.conf
                    在原来基础上添加下图配置段:
                      10
                             同理在note1节点上配置:

11

                     测试效果:

                          note2: systemctl stop keepalived.service
                           note1: systemctl start keepalived.service
12
13
                  同理:把note2主机启动起来,查看效果,由于优先级高,会拿走一个地址;而note1主机就一个虚拟地址。

通知脚本的使用方式:

脚本的调用方法:

         notify_master “/etc/keepalived/notify.sh master”

         notify_backup “/etc/keepalived/notify.sh backup”

         notify_fault “/etc/keepalived/notify.sh fault”

在单主模型的实验环境下:

               在note1和note2节点上,分别执行以下操作:
                         cd /etc/keepalived/
                         vim notify.sh
14
                note1、note2两台主机上:
                         systemctl stop keepalived
                         vim /etc/keepalived/keepalived.conf
15
                 当note1备用节点先启动时,它会变成MASTER,虚拟地址被添加:
                        systemctl restart keepalived.service
16
17
                当再启动note2时,它从没有启动到变成主节点,而当前的note1变成了备用节点:
                            note2: systemctl restart keepalived.service
                            note1上查看:
18
                   root 又收到一份邮件:
19
                     而note2主机上:变成了主节点,虚拟地址被添加了:
20
21
Keepalived 简单配置,以及通知脚本的运用就介绍到这里。之后的高级集群架构,后期会继续整理,更新!

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/87409

(0)
shenjialongshenjialong
上一篇 2017-09-18 16:43
下一篇 2017-09-18 22:51

相关推荐

  • 磁盘管理与文件系统

      关于磁盘与文件系统大致思路:要想对磁盘进行充分利用,必须要对磁盘进行分区,第二步就是要对分区进行高级格式化,也就是在分区上创建文件系统,在此过程中可以对磁盘的各种属性进行自定义。打个比方来说,创建磁盘分区好比刚买来一个毛坯房,还未装修,还不适宜人居住,那么创建文件系统就好比在光秃秃的毛坯房上进行了装修,这样才更适于人居住使用。 要想搞懂磁盘,首…

    Linux干货 2016-08-30
  • 文件系统初步了解

    Linux文件系统的基础特性: 1文件名严格区分大小写 2所有文件都们于根目录下,FHS 3路径以/做为分隔符 4每个文件的名称可使用除/以外任意字符,单个名称最长不能超出255个字 FHS:Filesystem Hierarchy Standard(文件系统目录标准)的缩写 多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目…

    Linux干货 2015-04-27
  • N28-第四周:正则表达式练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。
    2、编辑/etc/group文件,添加组hadoop。
    3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。
    4、复制/etc/skel目录为/home/hadoop,要求修改hadoop目录的属组和其它用户没有任何访问权限。
    5、修改/home/hadoop目录及其内部所有文件的属主为hadoop,属组为hadoop。
    6、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式;
    7、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
    8、显示/etc/passwd文件中其默认shell为/bin/bash的用户;
    9、找出/etc/passwd文件中的一位数或两位数;
    10、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
    11、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
    12、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;
    13、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;

    2017-12-24
  • 推荐-Centos的网络配置命令和文件

    一、ifcongfig     Centos6之前最常用的配置网络命令就是ifconfig,使用ifconfig命令时最好切换到root用户的身份     1、直接使用ifconfig可以查看当前配置的网络设备的信息      &…

    Linux干货 2016-03-27
  • 正则表达式 小结

    听老师和学姐都说,正则表达式很重要,所以这次我总结一下,同时加强一下记忆。 目前我们学的正则表达式有:字符匹配;匹配字数;位置锚定。 :. 匹配任意单个字符 [] 匹配指定范围内的任意单个字符 [^] 匹配指定范围外的任意单个字符 [:alnum:] 或 [0-9a-zA-Z] [:alpha:] 或 [a-zA-Z]…

    2017-07-31
  • linux的管道命令和用户管理命令

    1、列出当前系统上的所有已经登录的用户的用户名 [root@localhost home]# who | cut -d” ” -f1 | uniq root test root 2、取出最后登录到当前系统的用户相关信息 [root@localhost home]# who | tail -1 root pts/3 2017-07-16 19:38 (192.…

    Linux干货 2017-07-17