环境介绍:

http 服务: node1(10.11.8.222), node2(10.11.8.158)
KeepAlive 服务: keep1(10.11.8.219), keep2(10.11.8.216)

keep1 & keep2 # yum -y install ipvsadm keepalived

配置 real_server(node1, node2) :

编辑/etc/sysctl.conf 添加以下记录

net.ipv4.ip_forward = 1
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

重读配置并添加 lo:0 别名:

root@node1:~# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
root@node1:~# ifconfig lo:0 10.11.8.100
root@node2:~# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
root@node2:~# ifconfig lo:0 10.11.8.100

给http服务添加测试页面并启动服务:

root@node1:~# echo "real1" > /var/www/html/index.html
root@node1:~# service apache2 start
root@node2:~# echo "real2" > /var/www/html/index.html
root@node2:~# service apache2 start

配置 KeepAlive :

MASTER:

! Configuration File for keepalived

global_defs {
   notification_email {
    root@localhost #通知email的地址
   }
   notification_email_from keepalived@localhost #发件人email地址
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER #MASTER,BACKUP节点的不同配置用红色标记
    interface eth0
    virtual_router_id 51
    priority 101 #优先级值, MASTER节点的值要高于BACKUP
    advert_int 1
    authentication { #认证配置
        auth_type PASS
        auth_pass shiina
    }
    virtual_ipaddress {
    10.11.8.100/16 dev eth0 label eth0:0 #虚拟IP地址
    }
}

virtual_server 10.11.8.100 80 {
    delay_loop 6
    lb_algo rr #lb使用的调度算法
    lb_kind DR #lb所使用的模型
    nat_mask 255.255.0.0
    #persistence_timeout 50
    protocol TCP
    sorry_server 127.0.0.1 80 #当所有real_server宕机后的错误提示服务器

    real_server 10.11.8.222 80 { #node1节点
        weight 1
        HTTP_GET { #验证real_server方式
            url {
              path /
              status_code 200
            }
            connect_timeout 3 #超时时间
            nb_get_retry 3 #重试次数
            delay_before_retry 3 #重试前的等待时间
        }
    }
    real_server 10.11.8.158 80 { #node2节点
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

BACKUP:

! 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 LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass shiina
    }
    virtual_ipaddress {
    10.11.8.100/16 dev eth0 label eth0:0
    }
}

virtual_server 10.11.8.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.0.0
    #persistence_timeout 50
    protocol TCP
    sorry_server 127.0.0.1 80

    real_server 10.11.8.222 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 10.11.8.158 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

启动服务, 查看状态:

[root@keep1 ~]# service keepalived start 
Starting keepalived:                                       [  OK  ]
[root@keep2 ~]# service keepalived start 
Starting keepalived:                                       [  OK  ]
[root@keep1 ~]# tail /var/log/messages #查看日志
Jun  1 06:22:37 keep1 kernel: IPVS: [rr] scheduler registered.
Jun  1 06:22:37 keep1 Keepalived_vrrp[1600]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jun  1 06:22:37 keep1 Keepalived_vrrp[1600]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election
Jun  1 06:22:37 keep1 Keepalived_vrrp[1600]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election
Jun  1 06:22:37 keep1 Keepalived_vrrp[1600]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election
Jun  1 06:22:38 keep1 Keepalived_vrrp[1600]: VRRP_Instance(VI_1) Entering MASTER STATE
Jun  1 06:22:38 keep1 Keepalived_vrrp[1600]: VRRP_Instance(VI_1) setting protocol VIPs.
Jun  1 06:22:38 keep1 Keepalived_vrrp[1600]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 10.11.8.100
Jun  1 06:22:38 keep1 Keepalived_healthcheckers[1599]: Netlink reflector reports IP 10.11.8.100 added
Jun  1 06:22:43 keep1 Keepalived_vrrp[1600]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 10.11.8.100

查看运行状态:

[root@keep1 keepalived]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 08:00:27:4F:81:C9  
          inet addr:10.11.8.219  Bcast:10.11.9.255  Mask:255.255.254.0
          inet6 addr: fe80::a00:27ff:fe4f:81c9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5025 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2800 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:389646 (380.5 KiB)  TX bytes:239786 (234.1 KiB)

eth0:0    Link encap:Ethernet  HWaddr 08:00:27:4F:81:C9  
          inet addr:10.11.8.100  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:261 errors:0 dropped:0 overruns:0 frame:0
          TX packets:261 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:21926 (21.4 KiB)  TX bytes:21926 (21.4 KiB)

[root@keep1 keepalived]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.11.8.100:80 rr
  -> 10.11.8.158:80               Route   1      1          0         
  -> 10.11.8.222:80               Route   1      0          0

测试服务:

    [root@keep1 keepalived]# ipvsadm -Lnc
    IPVS connection entries
    pro expire state       source             virtual            destination
    TCP 14:52  ESTABLISHED 10.11.8.138:58173  10.11.8.100:80     10.11.8.158:80
    root@node2:~# service apache2 stop
     * Stopping web server apache2                                                                      * 
    [root@keep1 keepalived]# ipvsadm -Ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  10.11.8.100:80 rr
      -> 10.11.8.222:80               Route   1      0          0
    
    
    root@node1:~# service apache2 stop
     * Stopping web server apache2                                                                      * 
    [root@keep1 keepalived]# ipvsadm -Ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  10.11.8.100:80 rr
      -> 127.0.0.1:80                 Local   1      0          0  
    [root@keep1 keepalived]# curl 10.11.8.100
    error this is keep1

此时所有real_server 全部停止, 启动了sorry_server

自写监测脚本,完成维护模式切换

编辑keepalived.conf 添加以下内容:

vrrp_script chk_schedown {
    script "[ -e /etc/keepalived/down ] && exit 1 || exit 0" #执行的脚本
    interval 1 #check间隔
    weight -10 #失败时优先级的变化
    fall 2 #失败几次后真正确认为失败
    rise 1 #成功几次后确认为成功
}

在实例中进行调用, 添加在 vrrp_instance 中, 注意vrrp_script必须定义在实例的前面

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass shiina
    }
    virtual_ipaddress {
        10.11.8.100/16 dev eth0 label eth0:0
    }
    track_script {
        chk_schedown
    }
}

当 touch /etc/keepalived down 后, MASTER 的优先级会减少10, 服务会迁移到 BACKUP 上


shiina
146 声望3 粉丝

初出茅庐大学生/中二晚期已弃疗/社交低能单身狗/七言绝句装逼王


引用和评论

0 条评论