keepalived高可用!!!!

该篇博客详细介绍了如何利用Keepalived实现Apache在LVS负载均衡系统中的高可用性。首先关闭所有涉及主机的防火墙并设置系统参数,然后配置调度器(lb1和lb2)与后端服务器(RS1和RS2)的IP地址和VIP。接着,在RS服务器上配置VIP和禁止ARP响应,同时在调度器上设置LVS规则。之后,配置Keepalived主备配置文件,启用VRRP协议,并定义故障转移脚本。最后,通过测试验证了即使在主调度器宕机的情况下,系统仍能正常提供服务。

keepalived实现apache在LVS均衡负载上的高可用实例

keepalived是什么?

Keepalived 软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。

Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。

所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。

keepalived的重要功能!

keepalived 有三个重要的功能,分别是:

管理LVS负载均衡软件
实现LVS集群节点的健康检查
作为系统网络服务的高可用性(failover)

工作原理!!

在这里插入图片描述

Keepalived高可用对之间是通过VRRP通信的,因此,我们从 VRRP开始了解起:

  1. VRRP,全称 Virtual Router RedundancyProtocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。
  2. VRRP是通过一种竟选协议机制来将路由任务交给某台 VRRP路由器的。
  3. VRRP用IP多播的方式(默认多播地址(224.0_0.18))实现高可用对之间通信。
    4)工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般Keepalived系统运维工作中都是一对。
    5)VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码。

配置LVS!!!

ip类型IP地址!
VIP192.168.160.250
lb1192.168.160.128
lb2192.168.160.129
RS1192.168.160.130
RS2192.168.160.131

1. 关闭防火墙!!!!

[root@RS1 ~]# systemctl disable --now firewalld
[root@RS1 ~]# setenforce 0

[root@RS2 ~]# systemctl disable --now firewalld
[root@RS2 ~]# setenforce 0

[root@lb1 ~]# systemctl disable --now firewalld
[root@lb1 ~]# setenforce 0

[root@lb2 ~]# systemctl disable --now firewalld
[root@lb2 ~]# setenforce 0

2. 在调度器上配置vip和DIP!

首选安装需要的依赖包!!!
[root@lb1 ~]# yum -y install ipvsadm keepalived
CentOS Stream 8 - AppStream                                                                     4.1 MB/s |  10 MB     00:02    
CentOS Stream 8 - BaseOS                                                                        4.3 MB/s | 6.8 MB     00:01    
CentOS Stream 8 - Extras                                                                         20 kB/s |  13 kB     00:00    

[root@lb2 ~]# yum -y install ipvsadm keepalived
CentOS Stream 8 - AppStream                                                                     4.6 MB/s |  10 MB     00:02    

[root@lb1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
[root@lb1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR0=192.168.160.128
PREFIX0=24
IPADDR1=192.168.160.250
PREFIX0=24
GATEWAY=192.168.160.2
DNS1=114.114.114.114
[root@lb1 ~]# systemctl restart NetworkManager
[root@lb1 ~]# ifdown ens33;ifup ens33
[root@lb1 ~]# 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 fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:c2:87:13 brd ff:ff:ff:ff:ff:ff
    inet 192.168.160.128/24 brd 192.168.160.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.160.250/24 brd 192.168.160.255 scope global secondary noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fec2:8713/64 scope link 
       valid_lft forever preferred_lft forever



[root@lb2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
[root@lb2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR0=192.168.160.129
PREFIX0=24
IPADDR1=192.168.160.250
PREFIX0=24
GATEWAY=192.168.160.2
DNS1=114.114.114.114
[root@lb2 ~]# systemctl restart NetworkManager
[root@lb2 ~]# ifdown ens33;ifup ens33
[root@lb2 ~]# 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 fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:f0:f3:8e brd ff:ff:ff:ff:ff:ff
    inet 192.168.160.129/24 brd 192.168.160.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.160.250/24 brd 192.168.160.255 scope global secondary noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fef0:f38e/64 scope link 
       valid_lft forever preferred_lft forever

3. 在RS上关闭arp包的通告和响应,然后配置vip和rip!

[root@RS1 ~]# yum -y install net-tools
[root@RS2 ~]# yum -y install net-tools

[root@RS1 ~]# vim /etc/sysctl.conf 
[root@RS1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@RS1 ~]# ifconfig lo:0 192.168.160.250/32 broadcast 192.168.160.250 up
[root@RS1 ~]# route add -host 192.168.160.250 dev lo:0
[root@RS1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.160.2   0.0.0.0         UG    100    0        0 ens33
192.168.160.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.160.250 0.0.0.0         255.255.255.255 UH    0      0        0 lo
[root@RS1 ~]# 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
    inet 192.168.160.250/0 brd 192.168.160.250 scope global lo:0
       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 fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:40:45:46 brd ff:ff:ff:ff:ff:ff
    inet 192.168.160.130/24 brd 192.168.160.255 scope global dynamic noprefixroute ens33
       valid_lft 1492sec preferred_lft 1492sec
    inet6 fe80::fc16:dacb:f044:1cdc/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever


[root@RS2 ~]# vim /etc/sysctl.conf 
[root@RS2 ~]#  sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@RS2 ~]# ifconfig lo:0 192.168.160.250/32 broadcast 192.168.160.250 up
[root@RS2 ~]# route add -host 192.168.160.250 dev lo:0
[root@RS2 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.160.2   0.0.0.0         UG    100    0        0 ens33
192.168.160.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.160.250 0.0.0.0         255.255.255.255 UH    0      0        0 lo
[root@RS2 ~]# 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
    inet 192.168.160.250/0 brd 192.168.160.250 scope global lo:0
       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 fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:b4:43:2c brd ff:ff:ff:ff:ff:ff
    inet 192.168.160.131/24 brd 192.168.160.255 scope global dynamic noprefixroute ens33
       valid_lft 1657sec preferred_lft 1657sec
    inet6 fe80::3a45:8ec9:caa5:cef6/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

4. 在调度器上添加规则!!

[root@lb1 ~]# ipvsadm -A -t 192.168.160.250:80 -s rr
[root@lb1 ~]# ipvsadm -a -t 192.168.160.250:80 -r 192.168.160.130:80 -g
[root@lb1 ~]# ipvsadm -a -t 192.168.160.250:80 -r 192.168.160.131:80 -g
[root@lb1 ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lb1 ~]# 

[root@lb2 ~]# ipvsadm -A -t 192.168.160.250:80 -s rr
[root@lb2 ~]# ipvsadm -a -t 192.168.160.250:80 -r 192.168.160.130:80 -g
[root@lb2 ~]# ipvsadm -a -t 192.168.160.250:80 -r 192.168.160.131:80 -g
[root@lb2 ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lb2 ~]# 

5. 配置keepalived主配置文件!

5.1 配置 主!
[root@lb1 ~]# vim /etc/keepalived/keepalived.conf
[root@lb1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id lb02
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass liuzezheng
    }
    virtual_ipaddress {
       192.168.160.250
    }
}

virtual_server 192.168.160.250 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.160.130 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 5
            nb_get_retry 5
            delay_before_retry 5
        }
    }

    real_server 192.168.160.131 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 5
            nb_get_retry 5
            delay_before_retry 5
        }
    }
}
5.2 配置 备!
[root@lb2 ~]# vim /etc/keepalived/keepalived.conf
[root@lb2 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id lb02
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 100
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass liuzezheng
    }
    virtual_ipaddress {
       192.168.160.250
    }
}

virtual_server 192.168.160.250 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.160.130 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 5
            nb_get_retry 5
            delay_before_retry 5
        }
    }

    real_server 192.168.160.131 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 5
            nb_get_retry 5
            delay_before_retry 5
        }
    }
}
[root@lb1~]# systemctl start keepalived
[root@lb1 ~]# systemctl enable keepalived

6. 分别在主备上查看vip的信息!!

[root@lb1 ~]# 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 fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:c2:87:13 brd ff:ff:ff:ff:ff:ff
    inet 192.168.160.128/24 brd 192.168.160.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.160.250/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.160.250/24 brd 192.168.160.255 scope global secondary noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fec2:8713/64 scope link 
       valid_lft forever preferred_lft forever


[root@lb2 ~]# 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 fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:f0:f3:8e brd ff:ff:ff:ff:ff:ff
    inet 192.168.160.129/24 brd 192.168.160.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.160.250/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.160.250/24 brd 192.168.160.255 scope global secondary noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fef0:f38e/64 scope link 
       valid_lft forever preferred_lft forever

7. 分别在主备上编写脚本!

7.1 主!
[root@lb1 ~]# mkdir /scripts
[root@lb1 ~]# vim /scripts/notify.sh
[root@lb1 ~]# cat /scripts/notify.sh
#!/bin/bash

case "$1" in
    master)
            ipvsadm -R < /etc/sysconfig/ipvsadm
    ;;
    backup)
            ipvsadm -C
    ;;
    *)
        echo "Usage:$0 master|backup"
    ;;
esac
[root@lb1 ~]# chmod +x /scripts/notify.sh
7.2 备!
[root@lb2 ~]# mkdir /scripts
[root@lb2 ~]# vim /scripts/notify.sh
[root@lb2 ~]# cat /scripts/notify.sh
#!/bin/bash

case "$1" in
    master)
            ipvsadm -R < /etc/sysconfig/ipvsadm
    ;;
    backup)
            ipvsadm -C
    ;;
    *)
        echo "Usage:$0 master|backup"
    ;;
esac
[root@lb2 ~]# chmod +x /scripts/notify.sh

8. 配置主备keepalived加入故障转移脚本

8.1 主!!
[root@lb1 ~]# vim /etc/keepalived/keepalived.conf
[root@lb1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id lb02
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass liuzezheng
    }
    virtual_ipaddress {
       192.168.160.250
    }
}

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

global_defs {
   router_id lb02
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass liuzezheng
    }
    virtual_ipaddress {
       192.168.160.250
    }
    notify_master "/scripts/notify.sh master"
    notify_backup "/scripts/notify.sh backup"
}


virtual_server 192.168.160.250 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.160.130 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 5
            nb_get_retry 5
            delay_before_retry 5
        }
    }

    real_server 192.168.160.131 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 5
            nb_get_retry 5
            delay_before_retry 5
        }
    }
}
8.2 备!!
[root@lb2 ~]# vim /etc/keepalived/keepalived.conf
[root@lb2 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id lb02
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 100
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass liuzezheng
    }
    virtual_ipaddress {
       192.168.160.250
    }
    notify_master "/scripts/notify.sh master"
    notify_backup "/scripts/notify.sh master"
}

virtual_server 192.168.160.250 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.160.130 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 5
            nb_get_retry 5
            delay_before_retry 5
        }
    }

    real_server 192.168.160.131 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 5
            nb_get_retry 5
            delay_before_retry 5
        }
    }
}
[root@lb2 ~]# systemctl restart keepalived
[root@lb2 ~]# systemctl enable keepalived

9. 测试!!!

9. 此时单纯是依靠优先级来住备!!!

在这里插入图片描述
在这里插入图片描述

9.2 模拟宕机之后,依然可以访问!

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值