Keepalived的作用是检测服务器 的状态,如果有一台web服务器宕机 ,或工作出现故障,Keepalived将检 测到,并将有故障的服务器从系统中 剔除,同时使用其他服务器代替该服 务器的工作,当服务器工作正常后 Keepalived自动将服务器加入到服务 器群中,这些工作全部自动完成,不 需要人工干涉,需要人工做的只是修 复故障的服务器。

Keepalived工作流程图:

116e10f39ec80a55c7cc37d38d767a6a.png-wh_

工作流程图详解:

keepalived主要是模块是VRRP Stack和Cheackers,实现HA集群 中失败切换(Failover)功能。Keepalived通过VRRP功能能再结合LVS负载均 衡软件即可部署一个高性能的负载均衡集群系统。,Cheackers主要实现可 实现对服务器运行状态检测和故障隔离。,其中ipvs和realserver健康状态检 查通过配置文件配置就可以实现,而其他服务高可用则需要通过自己编写脚 本,然后配置keepalived调用来实现。 Keepalived运行有3个守护进程。父进程主要负责读取配置文件初始化 、监控2个子进程等;然后两个子进程,一个负责VRRP,另一个负责 Cheackers健康检查。其中父进程监控模块为WacthDog,工作实现:每个 子进程打开一个接受unix域套接字,父进程连接到那些unix域套接字并向子 进程发送周期性(5s)hello包。 上图是Keepalived的功能体系结构,大致分两层:用户空间(user space) 和内核空间(kernel space)。 内核空间:主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均衡) 和NETLINK(提供高级路由及其他相关的网络功能)两个部份。

VRRP协议的相关介绍:

VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议) 可以认为是实现路由器高可用的协议,简单的说,当一个路由器故障时可以 由另一个备份路由器继续提供相同的服务。 VRRP根据优先级来确定虚拟路由器中每台路由器的角色(Master路由 器或Backup路由器)。VRRP优先级的取值范围为0到255(数值越大表明 优先级越高),可配置的范围是1到254,优先级0为系统保留给路由器放弃 Master位置时候使用,255则是系统保留给IP地址拥有者使用。优先级越高 ,则越有可能成为Master路由器。当两台优先级相同的路由器同时竞争 Master时,比较接口IP地址大小。接口地址大者当选为Master。

实战演练:实现基于keepalived高可用基于LVS-DR模式的双主架构

一:环境准备:

四台centos虚拟机分别命名为:lvs-master、lvs-backup、realserver1、realserver2

都是双网卡模式:桥接和仅主机

lvs-master: vip1:172.17.250.11

       dip:172.17.27.10

lvs-backup:vip2:172.17.250.12

       dip:172.17.250.43

realserver1:rip:172.17.0.66

realserver2:rip:172.17.250.41

分别在lvs-master和lvs-backup上安装keepalived

清空防火墙策略:iptables -F,关闭selinux策略

二:配置相关文件

1、修改keepalived主(lvs-server-master)配置文件实现virtual_instance

vrrp_instance VI_1 {

    state MASTER

    interface ens33

    virtual_router_id 90

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1015

    }

    virtual_ipaddress {

    172.17.250.11

        }

}


virtual_server 172.17.250.11 80 {

    delay_loop 6

    lb_algo wrr

    lb_kind DR

    nat_mask 255.255.255.255

    persistence_timeout 120

    protocol TCP


    real_server 172.17.0.66 80 {

        weight 1

        HTTP_GET {

            url {

              path /

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

     real_server 172.17.250.41 80 {

        weight 1

        HTTP_GET {

            url {

              path /

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}


vrrp_instance VI_2 {

    state BACKUP

    interface ens33

    virtual_router_id 93

    priority 98

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1234

    }

    virtual_ipaddress {

    172.17.250.12

        }

}

virtual_server 172.17.250.12 443 {

    delay_loop 6

    lb_algo wrr

    lb_kind DR

    nat_mask 255.255.255.255

    persistence_timeout 120

    protocol TCP


    real_server 172.17.0.66 443 {

        weight 1

        HTTP_GET {

            url {

              path /

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

     real_server 172.17.250.41 443 {

        weight 1

        HTTP_GET {

            url {

              path /

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

2,lvs-backup与lvs-master配置文件大致相同,所以就只列出不同的地方,没列出的都是相同的代码

vrrp_instance VI_1 {

    state MASTER

    interface ens33

    virtual_router_id 90

    priority 98    ###由原来的100改为了98

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1015

    }

    virtual_ipaddress {

    172.17.250.11

        }

}

vrrp_instance VI_2 {

    state BACKUP

    interface ens33

    virtual_router_id 93

    priority 100    ###由原来的98改为了100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1234

    }

    virtual_ipaddress {

    172.17.250.12

        }

}

3,realserver1和realserver2配置都一样

因为realserver使用了443端口,所以说需要进行加密所以应该打开nginx中的https server

cd /etc/pki/tls/certs

生成密钥和证书:make cert.pem

拷贝cert.pem到nginx配置文件中:

cp cert.pem /etc/nginx

cd /etc/nginx

创建一个密钥文件,并把cert.pem中的密钥拷到此文件中

vim cert.key

feb11bd404c74336a9b8f65664aed373.png-wh_


  HTTPS server

    

    server {

        listen       443 ssl;

        server_name  localhost;

        root html;

        ssl_certificate      cert.pem;     ###存放证书的文件

        ssl_certificate_key  cert.key;    ####存放密钥的文件


        ssl_session_cache    shared:SSL:1m;

        ssl_session_timeout  5m;


        ssl_ciphers  HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers  on;


        location / {

            index  index.html index.htm;

        }

    }


}

配置回环网卡:

ifconfig lo:0 172.17.250.11 broadcast 172.17.250.11 netmask 255.255.255.255 up

route add -host 172.17.250.11 lo:0

ifconfig lo:1 172.17.250.12 broadcast 172.17.250.12 netmask 255.255.255.255 up

route add -host 172.17.250.11 lo:0

          忽略ip与mac不匹配的问题:

            echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

            echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

            echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

            echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce



三:测试检验高可用的效果 

1、配置完成后,观察两侧IP的是情况,看是否虚拟IP在主上配置成功 

2、停掉主服务上的keepalived服务,看虚拟IP是否正常转移到从节点上


a,首先查看虚拟ip是否在lvs-master和lvs-backup上配置成功

ipvsadm -L -n

38704b3199a44b7bb96c77201aa44e0d.png-wh_

bf8efd9485a35503aa7bd021f513337e.png-wh_

从图中可以看到vip1:172.17.250.11

        vip2:172.17.250.12

b,关掉lvs-backup的keepalived服务

systemctl stop keepalived

查看vip2:172.17.250.12是否跑到了lvs-master主机上

7897914a1336b4872c722b3d5c137594.png-wh_

da9198ad8c42446a991d1d63768198f4.png-wh_

图中看出lvs-backup上已经没有了vip2:172.17.250.12

而是出现在了lvs-master上