青蛙学Linux—一个实验:通过Keepalived实现Apache的高可用

实验环境:

  • 主机A:操作系统CentOS 7.6.1810,IP地址192.168.0.88,Keepalived版本2.0.12
  • 主机B:操作系统CentOS 7.6.1810,IP地址192.168.0.110,Keepalived版本2.0.12

两台主机均运行Apache提供Web服务;VIP为192.168.0.5。

首先确认两台主机的Apache服务是否正常:

访问http://192.168.0.88

1

访问http://192.168.0.110

2

1、不设置不抢占模式

配置两台主机上的Keepalived,配置文件如下:

主机A
! Configuration File for keepalived

global_defs {
   notification_email {
     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_script check_httpd {
    script "/usr/bin/killall -0 httpd"
    interval 2
    fall 2
    rise 2
}

vrrp_instance HTTPD {
    state MASTER
    interface ens160
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aaaa
    }
    virtual_ipaddress {
        192.168.0.5/24
    }
    track_script {
        check_httpd
    }
}

这里没有设置不抢占模式,且没有配置邮件发送功能。

主机B

主机B的配置文件大部分同主机A,仅有其中的statepriority与主机A不同

! Configuration File for keepalived

global_defs {
   notification_email {
     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_script check_httpd {
    script "/usr/bin/killall -0 httpd"
    interval 2
    fall 2
    rise 2
}

vrrp_instance HTTPD {
    state BACKUP
    interface ens160
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aaaa
    }
    virtual_ipaddress {
        192.168.0.5/24
    }
    track_script {
        check_httpd
    }
}

配置完成Keepalived后启动Keepalived,在主机A上通过ip addr命令可以查看到VIP已经绑定到主机A上:

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:c0:e8:97 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.88/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160
       valid_lft 54444sec preferred_lft 54444sec
    inet 192.168.0.5/24 scope global secondary ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::ec4e:853a:570d:bf79/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

此时访问http://192.168.0.5

3

实际访问的是主机A提供的Web服务。

停止主机A的Apache服务,查看是否发生主备切换:

主机A上执行ip addr命令

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:c0:e8:97 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.88/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160
       valid_lft 54183sec preferred_lft 54183sec
    inet6 fe80::ec4e:853a:570d:bf79/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

可以看到VIP已经在主机A上解绑。在主机B上执行ip addr命令

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:80:6a:31 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.110/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160
       valid_lft 76521sec preferred_lft 76521sec
    inet 192.168.0.5/24 scope global secondary ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::91ad:f9d8:5386:ba92/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

可以看到VIP已经绑定到了主机B上,此时访问http://192.168.0.5

4

已经是主机B在提供Web服务了。

因为这里没有配置不抢占模式,所以此时恢复主机A的Apache服务,查看是否会再次进行主备切换:

在主机A上执行ip addr命令

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:c0:e8:97 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.88/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160
       valid_lft 53899sec preferred_lft 53899sec
    inet 192.168.0.5/24 scope global secondary ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::ec4e:853a:570d:bf79/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

此时VIP又重新绑定到主机A上了,访问http://192.168.0.5

5

2、设置不抢占模式

不抢占模式仅在优先级高的主机上进行设置,所以主机B上的Keepalived不用进行配置。修改主机A的Keepalived配置文件(仅展示主要部分):

vrrp_instance HTTPD {
    state BACKUP
    interface ens160
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aaaa
    }
    virtual_ipaddress {
        192.168.0.5/24
    }
    track_script {
        check_httpd
    }
    nopreempt

此时停止主机A上的Apache:

主机A的IP信息

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:c0:e8:97 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.88/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160
       valid_lft 53418sec preferred_lft 53418sec
    inet6 fe80::ec4e:853a:570d:bf79/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

主机B的IP信息

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:80:6a:31 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.110/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160
       valid_lft 75784sec preferred_lft 75784sec
    inet 192.168.0.5/24 scope global secondary ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::91ad:f9d8:5386:ba92/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

访问http://192.168.0.5

6

从以上信息可以看出,发生了一次主备切换。此时恢复主机A的Apache服务,查看是否会再次发生主备切换:

主机A的IP信息

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:c0:e8:97 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.88/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160
       valid_lft 53224sec preferred_lft 53224sec
    inet6 fe80::ec4e:853a:570d:bf79/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

主机B的IP信息

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:80:6a:31 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.110/24 brd 192.168.0.255 scope global noprefixroute dynamic ens160
       valid_lft 75618sec preferred_lft 75618sec
    inet 192.168.0.5/24 scope global secondary ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::91ad:f9d8:5386:ba92/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

访问http://192.168.0.5

7

从以上信息可见,在配置了不抢占模式后,在主机A的Apache恢复正常之后主机A并不会再次成为Master,不会再次发生主备切换。

原文地址:https://www.cnblogs.com/yu2006070-01/p/10387566.html