高可用集群之keepalived+lvs实战-技术流ken

1.keepalived简介

lvs在我之前的博客《高负载集群实战之lvs负载均衡-技术流ken》中已经进行了详细的介绍和应用,在这里就不再赘述。这篇博文将把lvs与keepalived相结合使用,在实际工作中搭建高可用,高负载,高性能的服务器集群。

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

2.keepalived的主要功能

1. healthcheck

检查后端节点是否正常工作

如果发现后端节点异常,就将该异常节点从调度规则中删除;

如果发现后端的异常节点恢复正常了,就将该节点重新加入到调度规则中;

2. failover

是对调度器的主节点做健康检测。

将备用节点升级为主节点

接管主节点上的资源(vip、lvs规则)

3.keepalived实现故障切换的原理

1.keepalived是基于vrrp写于实现的故障切换

2.正常情况下,主节点会每隔一段时间向备节点发送一个心跳信息,这个就是告诉备节点自己正常

当主节点发生故障,那么备节点无法接收都心跳信息,就认定主节点故障,那么就会接收主节点的业务和资源(包括vip)

当主节点又恢复的时候,那么备节点释放所接收到资源和业务

4.简单说说vrrp协议

1. VRRP((Virtual Router Redundancy Protocol),虚拟路由冗余协议,为了解决静态路由的单点故障问题

2. VRRP的工作机制是基于竞选机制选择一个路由来完成任务处理

3. VRRP协议是通过发送多播数据包实现竞选的(Multicat)

4. 竞选出来主节点会一直发送广播包,backup节点一直监听这些广播包(处于监听状态)

5. 当备用节点无法接收到广播包的是时候,就会重新进行竞选,选出一个新的节点作为主节点

5.keepalived可以完成如下工作

1. 自动生成vip(vip给用户提供服务)

2. 自动配置lvs规则

3. 可以实现各种服务的高可用

4. failover的时候,做vip的漂移

6.keepalived的配置文件

第一段:global_defs,全局配置段
    global_defs {
       notification_email {
               237745635@qq.com
       }
       notification_email_from [email protected]
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id id1        <<< 当前主机的ID值,这个值必须是唯一的
    }

第二段:vrrp_instance,实例配置段(虚拟服务段)
    【该段是定义虚拟服务的vip等信息】
    vrrp_instance VI_1 {       <<< 指定实例的名称
        state MASTER           <<< 指定节点的状态,MASTER表示主,BACKUP表示备用节点
        interface eth0         <<< 指定将VIP绑定在哪个网卡上
        virtual_router_id 51   <<< 虚拟路由ID,用于标识哪些个节点是一组,同一组的主机的虚拟id需要相同
        priority 100           <<< 指定该节点的优先级(主这节点的优先级大于备节点)
        advert_int 1           <<< 指定备节点在几秒之内没有接收到主节点的心跳信息,就接管其业务和资源
        authentication {       <<< 指定keepalived集群中各个主备节点做认证的方式
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {   <<< 指定用于提供服务的ip地址(也就是VIP)
            10.220.5.233
        }
    }

第三段:virtual_server,虚拟主机配置段
    【该段主要是给lvs来用,用来定义后端RS节点】
    virtual_server 10.220.5.222 80 {    #指定实例对应的VIP
        delay_loop 6                    # 对后端节点做健康检查的时间间隔
        lb_algo rr                      # 指定负载均衡调度算法
        lb_kind DR                      # 指定所使用的lvs模型
        nat_mask 255.255.255.0
        persistence_timeout 50          # 同一IP的请求50秒内被分配到同一台真实主机
        protocol TCP                    # 用TCP协议对真实节点做健康检查

        real_server 10.220.5.190 80 {   # 指定一台真实服务器的IP和端口
            weight 1                    # 设置权重
            TCP_CHECK {                 # 用建立tcp连接的方式做健康检测
                connect_timeout 10      # 设置建立tcp连接的超时时间
                delay_before_retry 3    # 超时后多久重试
                nb_get_retry 3          # 重试次数
                connect_port 80         # 健康检查使用的端口号
            }
        }

real_server 10.220.5.191 80 {
    weight 1
    TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
    }
}
    }

7.修改配置文件需要注意的问题

1. 实例可以有一个,也可以有多个

2. 单实例中必须相同的配置

vrrp_instance VI_1

virtual_router_id 51

auth_type PASS

auth_pass 1111

virtual_ipaddress

3. 单实例中必须不相同的配置

router_id id1

state MASTER

priority 100

8.指定日志保存方式和位置

1. 修改keepalived的配置

    [[email protected] ~]# cat /etc/sysconfig/keepalived
    # Options for keepalived. See `keepalived --help‘ output and keepalived(8) and
    # keepalived.conf(5) man pages for a list of all options. Here are the most
    # common ones :
    #
    # --vrrp               -P    Only run with VRRP subsystem.
    # --check              -C    Only run with Health-checker subsystem.
    # --dont-release-vrrp  -V    Dont remove VRRP VIPs & VROUTEs on daemon stop.
    # --dont-release-ipvs  -I    Dont remove IPVS topology on daemon stop.
    # --dump-conf          -d    Dump the configuration data.
    # --log-detail         -D    Detailed log messages.
    # --log-facility       -S    0-7 Set local syslog facility (default=LOG_DAEMON)
    #

    KEEPALIVED_OPTIONS="-D -d -S 0"
    #KEEPALIVED_OPTIONS="-D"

2. 修改系统日志配置文件
    [[email protected] ~]# echo "local0.*             /var/log/ka.log" >>/etc/rsyslog.conf 

3. 重启服务
    [[email protected] ~]# systemctl restart rsyslog
    [[email protected] ~]# systemctl restart keepalived 

日志
    级别:指定触发日志的事件的重要等级
    日志设施:指定将日志记录在什么位置

9.keepalived对RS做健康检查的方式

    1. HTTP_GET:向后端的RS发送http请求,如果请求成功,说明后端节点正常(RS是web服务的时候比较常用)
    2. TCP:尝试与后端RS建立TCP连接,如果成功,说明后端节点正常
        【仅仅是检查RS系统是否正常工作,不能检查具体的业务】
    3. SMTP:对邮件服务器做健康检测
    4. MISC:通过脚本的方式实现健康检测

    TCP健康检测方式举例
        TCP_CHECK {                  # 通过TcpCheck判断RealServer的健康状态
            connect_timeout 10    # 连接超时时间
            nb_get_retry 3        # 重连次数
            delay_before_retry 3  # 重连时间间隔
            connect_port 80       # 检测端口
        }

    HTTP_GET健康检测方式举例
        HTTP_GET {
            url {
                path check/t.html     # 检查的uri地址
                digest 1362a91278f0   # 用keepalived自带的genhash生成

            connect_timeout 3         # 链接超时时间
            nb_get_retry 3            # 重连次数
            delay_before_retry 3      # 重连时间间隔
            connect_port 6500         # 检测端口
        }

    MISC健康检测方式举例
        MISC_CHECK {
            misc_path "/tmp/check.sh http://1.2.3.4:80/c/200.jsp"
            # 调用外部程序或者脚本的路径和参数

            misc_timeout 10
            # 脚本执行的超时时间

            misc_dynamic
            # 动态权重标志。
            # 脚本返回0 则检测成功,权重不变
            # 返回1表示失败,权重设置为0
        }

10.keepalived+lvs服务器集群实战

1.环境准备

centos7.5

VIP:172.20.10.11/28

客户端IP:172.20.10.3/28

KEEPALIVED+LVS1服务器端IP:172.20.10.2/28

KEEPALIVED+LVS2服务器端IP:172.20.10.5/28

WEB1服务器端IP:172.20.10.8/28

WEB2服务器端IP:172.20.10.9/28

2.关闭安全服务

[[email protected] ~]# setenforce 0
[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# iptables -F

3.配置KEEPALIVED+LVS1服务器端

相当的服务器配置需要保持相同。接下来的配置你需要配置两遍,即在每个服务端都需要配置一遍。

安装ipvsadm

[[email protected] ~]# yum install popt* libnl* kernel-devel ipvsadm -y

安装keepalived

[[email protected] ~]# yum install keepalived -y

配置主服务器端keepalived

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id id1
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.20.10.11/28
    }
}

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

    real_server 172.20.10.8 80 {
weight 1
            TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.20.10.9 80 {
        weight 1
            TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

配置好之后可以把这个文件使用scp传输到另外一台服务器上面

[[email protected] ~]# scp /etc/keepalived/keepalived.conf 172.20.10.5:/etc/keepalived/keepalived.conf
[email protected]172.20.10.5‘s password:
keepalived.conf                                                                        100% 1116   669.7KB/s   00:00    

配置从服务器端keepalived

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id id2
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
                     interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.20.10.11/28
    }
}

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

    real_server 172.20.10.8 80 {
                           weight 1
            TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.20.10.9 80 {
        weight 1
            TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
                   

4.重启keepalived

[[email protected] ~]# systemctl restart keepalied

5.检查ipvsadm

[[email protected] ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  172.20.10.11:80                     7       84        0    22131        0
  -> 172.20.10.8:80                      4       69        0    21009        0
  -> 172.20.10.9:80                      3       15        0     1122        0

6.检查VIP

检查主服务器端

[[email protected] ~]# 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:2d:5b:b8 brd ff:ff:ff:ff:ff:ff
    inet 172.20.10.2/28 brd 172.20.10.15 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 172.20.10.11/28 scope global secondary eth0        #VIP现在在主服务器端
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe2d:5bb8/64 scope link
       valid_lft forever preferred_lft forever

检查从服务器端

[[email protected] ~]# 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:a5:e9:a4 brd ff:ff:ff:ff:ff:ff
    inet 172.20.10.5/28 brd 172.20.10.15 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fea5:e9a4/64 scope link
       valid_lft forever preferred_lft forever

6.配置web服务器端

1.下载apache

[[email protected] ~]# yum install httpd -y

2.准备测试页面

[[email protected] ~]# echo "this is 172.20.10.8 for test" >/var/www/html/index.html 

3.启动apache

[[email protected] ~]# systemctl restart httpd
[[email protected] ~]# ss -tnl |grep 80
LISTEN     0      128         :::80                      :::*   

4.绑定VIP

[[email protected] ~]# ip a a 172.20.10.11/32 dev lo:0

5.arp抑制

[[email protected] ~]# echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
[[email protected] ~]# echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
[[email protected] ~]# echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
[[email protected] ~]# echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

11.浏览器测试

确认每台服务器每项服务重启之后,再次关闭每台服务器

防火墙

[[email protected] ~]# iptables -F

输入VIP地址

测试成功!

进行刷新测试

测试成功!

关闭一台172.20.10.8web服务器进行测试

[[email protected] ~]# systemctl stop httpd

查看ipvsadm规则

[[email protected] ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.20.10.11:80 rr
  -> 172.20.10.9:80               Route   1      0          0      

已自动移除172.20.10.8服务器

测试成功!

关闭172.20.10.2 keepalived主服务器进行测试

[[email protected] ~]# systemctl stop keepalived

查看keepalived主服务器端ipvsadm规则

[[email protected] ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

查看keepalived主服务器端VIP

[[email protected] ~]# 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:2d:5b:b8 brd ff:ff:ff:ff:ff:ff
    inet 172.20.10.2/28 brd 172.20.10.15 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever  #已经没有VIP
    inet6 fe80::20c:29ff:fe2d:5bb8/64 scope link
       valid_lft forever preferred_lft forever

查看从服务器ipvsadm规则

[[email protected] ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  172.20.10.11:80                     0        0        0        0        0
  -> 172.20.10.9:80                      0        0        0        0        0

从服务器端已经自动继承主服务器端ipvsadm规则

查看从服务器端是否有VIP

[[email protected] ~]# 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:a5:e9:a4 brd ff:ff:ff:ff:ff:ff
    inet 172.20.10.5/28 brd 172.20.10.15 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 172.20.10.11/28 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fea5:e9a4/64 scope link
       valid_lft forever preferred_lft forever

VIP已经自动继承到从服务器端

测试完成!

原文地址:https://www.cnblogs.com/kenken2018/p/9735947.html

时间: 2024-09-30 09:30:56

高可用集群之keepalived+lvs实战-技术流ken的相关文章

LVS+Keepalived高可用集群(CentOS7)

Keepalived高可用集群 什么是高可用集群? keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障. keepalived故障切换转移原理 keepalived是以VRRP协议为实现基础的,VRRP虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip

keepalived实现高可用集群方案

一.keepalived和VRRP协议介绍 keepalived是基于vrrp协议实现的一个高可用集群解决方案,可以利用keepalived来解决单点故障问题,使用keepalived实现的高可用集群方案中,一般有两台服务器,一个是MASTER(主服务器),另一个是BACKUP(备用服务器),这个集群中对外提供一个虚拟IP,MASTER服务器会定时发送特定信息给BACKUP服务器,当BACKUP服务器接收不到MASTER发送的消息时,BACKUP服务器会接管虚拟IP,继续提供服务. VRRP协议

Nginx高可用集群实战

一.简介  上一篇博文介绍了keepalived的高可用集群,其实使用nginx做前端代理,负载均衡照样可以实现双主或主备模式的高可用集群比起keepalived基于lvs的dr配置更为简单易学,下面是本人所理解的nginx高可用集群.此实验拓扑图类似keepalived拓扑,把图中keepalived字样换成nginx即可,我就不画了,有意者可重画. 实验拓扑图:       二.nginx主备模式高可用     配置nginx的upstream模块,让其反代到后端主机,后端主机配置和keep

Linux集群(keepalived介绍,Keepalived配置高可用集群,Keepa+mysql

一.Linux集群概述 根据功能划分为两大类:高可用和负载均衡 (1)高可用集群通常为两台服务器,台工作,另外一台作为准备,当提供服务的机器宕机,另外一台将接替继续提供服务. 实现高可用的开源软件有:heartbeat,keepalived (2)负载均衡集群:需要有一台服务器作为分发器,它负责吧用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量最少为2 实现负载均衡的开源软件有LVS,keepalived,haproxy,nginx,商业

linux企业常用服务---lvs+Keepalived高可用集群

部署前准备: iptables和selinux没配置,关掉 挂载系统镜像作为本地yum源,修改yum文件 源码包准备keepalived-1.2.13.tar.gz 环境介绍: 主服务器ip:192.168.100.157(keeplived+lvs) 从服务器ip:192.168.100.156(keeplived+lvs) 节点服务器ip:192.168.100.153-192.168.100.155(httpd) 集群vip:192.168.100.95 1.安装keepalived(在两

基于Keepalived实现LVS双主高可用集群

前言 前面说过基于heartbeat的LVS高可用方案,今天带来另一种解决方案:基于Keepalived实现LVS双主高可用集群.什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了, 也就是所谓的高可用或热备,用来防止单点故障的发生.本文将详细讲述Keepalived工作原理及高可用解决方案的实现. 相关介绍 Keepalived简介 Keepalived采用VRRP(virtual router redundancy protocol,虚拟路由冗余

负载均衡器HAProxy,高可用集群keepalived,keepalived+lvs

负载均衡器:nginx/haproxy/lvs/F5代理:正向代理:帮助客户端缓存服务器上的数据反向代理:帮助服务器缓存数据 HAProxy:1.安装[[email protected] bin]# yum install -y haproxy2.修改配置文件[[email protected] bin]# vim /etc/haproxy/haproxy.cfg 把# main frontend which proxys to the backends后面部分全部删除,增加以下内容:定义一个监

LVS+Keepalived+Nginx+Tomcat高可用集群搭建(转)

LVS+Keepalived+Nginx+Tomcat高可用集群搭建 最近公司重整架构,十几台服务器而且还要尽可能节约成本.我就谷歌了一下在几种集群之前进行比较最终采用了Keepalived+Nginx做负债均衡高可用.虽然之前也研究过集群,看过很多集群方面的原理和架构,但毕竟没有真正操作过以下案例是在虚拟机中完成实验其实对于高可用搭建来说只用给出Keepalived和Nginx的配置即可后面的一些安装搭建完全是本人项目需要可以不用理睬仅供参考. 本文只是实验搭建记录方便以后在服务器中实施搭建.

Keepalived+LVS+nginx搭建nginx高可用集群

nginx是一款非常优秀的反向代理工具,支持请求分发,负载均衡,以及缓存等等非常实用的功能.在请求处理上,nginx采用的是epoll模型,这是一种基于事件监听的模型,因而其具备非常高效的请求处理效率,单机并发能力能够达到上百万.nginx接收到的请求可以通过负载均衡策略分发到其下一级的应用服务器,这些服务器一般是以集群方式部署的,因而在性能不足的情况下,应用服务器可以通过加机器的方式扩展流量.此时,对于一些特大型的网站,性能的瓶颈就来自于nginx了,因为单机的nginx的并发能力是有上限的,