Linux学习122 keepalived入门及模块讲解

一、keepalived:

  1、vrrp协议的软件实现,原生设计的目的为了高可用ipvs服务:

    a、基于vrrp协议完成地址流动

    b、为vip地址所在的节点生成ipvs规则(在配置文件中预先定义);

    c、为ipvs集群的各RS做健康状态检测;

    d、基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务;

  2、组件

    a、核心组件:

      (1)、vrrp stack

      (2)、ipvs wrapper

      (3)、checkers

    b、控制组件:配置文件分析器

    c、IO复用器

    d、内存管理组件

二、HA Cluster的配置前提:

  1、各节点时间必须同步

    ntp,chrony

  2、确保iptables及selinux不会成为阻碍

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

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

  4、各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信;(并非必须)

  5、确保各节点的用于集群服务的接口支持MULTICAST(多播)通信。

三、keepalived安装配置(下面所有配置文件中的注释为后续注释,实际配置时请不要以 #注释内容 方式进行配置,否则服务无法启动!!!)

  1、从 CentOS6.4就开始随base仓库提供

  2、程序环境

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

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

    Unit File:keepalived.service

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

  3、配置文件组件部分:

    TOP HIERACHY

      a、GLOBAL CONFIGURATION:全局配置

        (1)、Global  definitions :全局定义

        (2)、Static  routes/addresses:静态路由

      b、VRRPD CONFIGURATION

        (1)、VRRP  synchronization group(s) :vrrp同步组。把两个虚拟路由器定义成一个同步组,就能确保他们两必须把VIP放在同一个节点的主机上。

        (2)、VRRP  instance(s):每个vrrp instance即一个vrrp路由器

      c、LVS CONFIGURATION 

        Virtual  server  group(s)

        Virtual  server(s):ipvs集群的vs和rs;

  4、单主配置示例:

    a、首先在node1和node2节点安装keepalived

[root@localhost yum.repos.d]# yum install -y keepalived

    b、我们将node1节点192.168.10.41配置为master,配置虚拟IP为192.168.10.100

[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
    root@localhost #如果发生故障就邮件通知本机,这是收件地址。
   }
   notification_email_from keepalived@localhost #如果发生故障就通过此邮箱进行发送故障信息。
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30
   router_id node1 #标识当前主机
   vrrp_mcast_group4 224.1.101.33 #多播地址   
}

vrrp_instance VI_1 {   #VI_1 表示虚拟路由器名字,如果要定义多个的话名字只要不一样就行了,VI就是vrrp_instance的简写,1就表示第一个。这个名字可以随便起。
    state MASTER #表示MASTER节点
    priority 100 #优先级为100
    interface ens33  #虚拟IP在哪个网卡上
    virtual_router_id 51 #虚拟路由器ID,集群配置文件中此字段需要配置为一致。
    advert_int 1 #每隔多少时间向其通告一次,此处为每隔1秒钟。
    authentication { #认证
        auth_type PASS
        auth_pass w0KE4b81 #只有前八个有效,就算超出八个也只有前八个有效。
    }
    virtual_ipaddress {
        192.168.10.100/24 dev ens33 label ens33:0 #配置虚拟IP为192.168.10.100 24位,配置在ens33网卡上,并且别名为ens33:0
    }
}

    c、我们将node2节点192.168.10.42配置为备

[root@localhost yum.repos.d]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
    root@localhost #如果发生故障就邮件通知本机,这是收件地址。
   }
   notification_email_from keepalived@localhost #如果发生故障就通过此邮箱进行发送故障信息。
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30
   router_id node2 #标识当前主机
   vrrp_mcast_group4 224.1.101.33 #多播地址   
}

vrrp_instance VI_1 {   #VI_1 表示虚拟路由器名字,如果要定义多个的话名字只要不一样就行了,VI就是vrrp_instance的简写,1就表示第一个。这个名字可以随便起。
    state BACKUP #表示备节点
    priority 96 #优先级为96,必须要小于MASTER
    interface ens33  #虚拟IP在哪个网卡上
    virtual_router_id 51 #虚拟路由器ID,集群配置文件中此字段需要配置为一致。
    advert_int 1 #每隔多少时间向其通告一次,此处为每隔1秒钟。
    authentication { #认证
        auth_type PASS
        auth_pass w0KE4b81 #只有前八个有效,就算超出八个也只有前八个有效。密码必须要和MASTER一致。
    }
    virtual_ipaddress {
        192.168.10.100/24 dev ens33 label ens33:0 #配置虚拟IP为192.168.10.100 24位,配置在ens33网卡上,并且别名为ens33:0,虚拟地址也必须要和MASTER一样。
    }
}

    d、如果我们启用了备节点,主节点挂了后备用节点的优先级96就是最高的,此时备用节点就会将虚拟IP 192.168.10.100抢占过来,当主节点启动后,因为主节点的优先级更高,所以会立即触发选举,然后主节点又会把虚拟IP抢过去。

      (1)我们先在node2节点启动keepalived服务,发现可以看到VIP

[root@localhost /]# systemctl start keepalived
[root@localhost /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:76:b9:28 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.42/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.10.100/24 scope global secondary ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::d726:8207:7b8:4785/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

      (2)、然后我们在node1节点启动keepalived服务,然后可以看到VIP迁移到了node1

[root@node1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:76:9f:f6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.41/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::2af8:1ecb:eb2c:861f/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@node1 ~]# systemctl start keepalived.service 
[root@node1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:76:9f:f6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.41/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.10.100/24 scope global secondary ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::2af8:1ecb:eb2c:861f/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@node1 ~]# 

      (3)、然后我们在节点node1上将keepalived服务停掉,会发现VIP又会漂移到node2上。

[root@node1 ~]# systemctl stop keepalived.service 
[root@node2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:76:b9:28 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.42/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.10.100/24 scope global secondary ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::d726:8207:7b8:4785/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

  5、在单主配置下我们发现备节点是处于空闲状态的,如果我们期望备节点可以不处于控制状态可以使用双主模型。双主模型其实不是真正意义上的双主,而是主-备和备-主两个虚拟路由器让两边都工作起来。假如我们node1和node2上都只有一块网卡,我们可以在网卡上配置两个虚拟路由器,只不过对虚拟路由器1来讲A是主B是备,对虚拟路由器2来讲B是主A是备。因此平时VIP1就在节点1上,VIP2就在节点2上,确保客户端访问VIP1时就能调度,访问VIP2时也可以调度,我们可以给我们的域名配置两个A记录,一个是VIP1,一个是VIP2,这样就能让部分用户找VIP1部分用户找VIP2了。万一主机B挂了,那么两个VIP都会转移到主机A上了。

    a、接下来我们来配置双主

      (1)、在node1上

[root@node1 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
    root@localhost 
   }
   notification_email_from keepalived@localhost 
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30
   router_id node1 
   vrrp_mcast_group4 224.1.101.33 
}

vrrp_instance VI_1 {   
    state MASTER 
    priority 100 
    interface ens33  
    virtual_router_id 51 
    advert_int 1 
    authentication { 
        auth_type PASS
        auth_pass w0KE4b81 
    }
    virtual_ipaddress {
        192.168.10.100/24 dev ens33 label ens33:0 
    }
}
vrrp_instance VI_2 {   
    state BACKUP
    priority 96 
    interface ens33  
    virtual_router_id 52 #因为是另一个虚拟路由器因此此id需要变化
    advert_int 1 
    authentication { 
        auth_type PASS
        auth_pass w0KE4b92 #密码改成与VI_1不一致的即可
    }
    virtual_ipaddress {
        192.168.10.101/24 dev ens33 label ens33:1 #配置别名为ens33:1 
    }
}

      (2)、在node2上

[root@node2 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
    root@localhost 
   }
   notification_email_from keepalived@localhost 
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30
   router_id node2 
   vrrp_mcast_group4 224.1.101.33 
}

vrrp_instance VI_1 {   
    state BACKUP 
    priority 96 
    interface ens33  
    virtual_router_id 51 
    advert_int 1 
    authentication { 
        auth_type PASS
        auth_pass w0KE4b81 
    }
    virtual_ipaddress {
        192.168.10.100/24 dev ens33 label ens33:0 
    }
}
vrrp_instance VI_2 {   
    state MASTER
    priority 100
    interface ens33  
    virtual_router_id 52 #因为是另一个虚拟路由器因此此id需要变化
    advert_int 1 
    authentication { 
        auth_type PASS
        auth_pass w0KE4b92 #密码改成与VI_1不一致的即可
    }
    virtual_ipaddress {
        192.168.10.101/24 dev ens33 label ens33:1 #配置别名为ens33:1 
    }
}

    b、然后我们来验证

      (1)、我们先停止node1的keepalived服务,发现两个VIP都在node2中

[root@node2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:76:b9:28 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.42/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.10.101/24 scope global secondary ens33:1
       valid_lft forever preferred_lft forever
    inet 192.168.10.100/24 scope global secondary ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::d726:8207:7b8:4785/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

      (2)、然后我们启动node1的keepalived服务发现VIP192.168.10.100在node1上,192.168.10.101在node2上

[root@node1 ~]# systemctl start keepalived.service 
[root@node1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:76:9f:f6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.41/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.10.100/24 scope global secondary ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::2af8:1ecb:eb2c:861f/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@node2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:76:b9:28 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.42/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.10.101/24 scope global secondary ens33:1
       valid_lft forever preferred_lft forever
    inet6 fe80::d726:8207:7b8:4785/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

aa

 

posted @ 2020-12-23 20:04  Presley  阅读(233)  评论(0编辑  收藏  举报