LVS高可用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41455420/article/details/79846503

LVS高可用

1、LVS高可用概念

lvs作为负载均衡器,所有请求都先到达lvs,可见lvs处于非常重要的位置,如果lvs服务器宕机后端web服务将无法提供服务,影响严重。
为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。

2、keepalived+lvs实现主备

2.1、什么是keepalived

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

2.2、keepalived工作原理

keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到VRRP包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和VRRP。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。VRRP模块是来实现VRRP协议的。

2.3、keepalived+lvs实现主备过程

2.3.1、初始状态

这里写图片描述

2.3.2、主机宕机

这里写图片描述

2.3.3、主机恢复

这里写图片描述

2.4、准备环境

vip:192.168.101.100
lvs-director192.168.101.8  主lvs
lvs-director192.168.101.9  备lvs

nginx1:192.168.101.3                安装nginx
nginx2:192.168.101.4                安装nginx

tomcat1:192.168.101.5           安装tomcat
tomcat2:192.168.101.6           安装tomcat

2.5、安装keepalived

分别在主备lvs上安装keepalived

2.6、配置keepalived

2.6.1、主lvs

修改主lvs下/etc/keepalived/keepalived.conf文件

! Configuration File for keepalived

global_defs {
   notification_email {
    #xxxx@itcast.com                                   # 发生故障时发送的邮箱
   }
   #notification_email_from xxxx@itcast.com             # 使用哪个邮箱发送
   #smtp_server xxx.com                                  # 发件服务器
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER             # 标示为主lvs
    interface eth0           # HA检测端口
    virtual_router_id 51     # 主备的virtual_router_id 必须相同
    priority 100             # 优先级,备lvs要比主lvs稍小
    advert_int 1             # VRRP Multicast 广播周期秒数
    authentication {         # 定义认证
        auth_type PASS       # 认证方式为口令认证
        auth_pass 1111       # 定义口令
    }
    virtual_ipaddress {      # 定义vip
        192.168.101.100        # 多个vip可换行添加
    }
}

virtual_server 192.168.101.100 80 {
    delay_loop 6       # 每隔6秒查看realserver状态
    lb_algo wlc        # 调度算法为加权最小连接数
    lb_kind DR         # lvs工作模式为DR(直接路由)模式
    nat_mask 255.255.255.0
    persistence_timeout 50  # 同一IP 的连接50秒内被分配到同一台realserver(测试时建议改为0)
    protocol TCP            # 用TCP监测realserver的状态

    real_server 192.168.101.3 80 {       # 定义realserver
        weight 3                       # 定义权重
        TCP_CHECK {  # 注意TCP_CHECK和{之间的空格,如果没有的话只会添加第一个realserver
            connect_timeout 3          # 三秒无响应超时
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 192.168.101.4 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}
2.6.2、准备lvs

修改备lvs下/etc/keepalived/keepalived.conf文件
配置备lvs时需要注意:需要修改state为BACKUP , priority比MASTER低,virtual_router_id和master的值一致

! Configuration File for keepalived

global_defs {
   notification_email {
    #xxxx@itcast.com                                   # 发生故障时发送的邮箱
   }
   #notification_email_from xxxx@itcast.com             # 使用哪个邮箱发送
   #smtp_server xxx.com                                  # 发件服务器
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP             # 标示为备lvs
    interface eth0           # HA检测端口
    virtual_router_id 51     # 主备的virtual_router_id 必须相同
    priority 99              # 优先级,备lvs要比主lvs稍小
    advert_int 1             # VRRP Multicast 广播周期秒数
    authentication {         # 定义认证
        auth_type PASS       # 认证方式为口令认证
        auth_pass 1111       # 定义口令
    }
    virtual_ipaddress {      # 定义vip
        192.168.101.100        # 多个vip可换行添加
    }
}

virtual_server 192.168.101.100 80 {
    delay_loop 6       # 每隔6秒查看realserver状态
    lb_algo wlc        # 调度算法为加权最小连接数
    lb_kind DR         # lvs工作模式为DR(直接路由)模式
    nat_mask 255.255.255.0
    persistence_timeout 50  # 同一IP 的连接50秒内被分配到同一台realserver(测试时建议改为0)
    protocol TCP            # 用TCP监测realserver的状态

    real_server 192.168.101.3 80 {       # 定义realserver
        weight 3                       # 定义权重
        TCP_CHECK {  # 注意TCP_CHECK和{之间的空格,如果没有的话只会添加第一个realserver
            connect_timeout 3          # 三秒无响应超时
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 192.168.101.4 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

2.7、测试

2.7.1、启动
  • director Server启动:
    注意:使用keepalived就不用手动配置启动lvs,在主、备lvs上启动keepalived即可。
    主备lvs(192.168.101.8、192.168.101.9)都启动keepalived。
    service keepalived start

  • real server启动:
    192.168.101.3、192.168.101.4启动nginx和lvs的realserver配置

cd /usr/local/nginx/sbin
./nginx -c /usr/local/nginx/conf/nginx-lvs.conf
启动lvs的realserver配置:service lvsdr start
注意:real server的lvs配置需要使用lvsdr脚本。
  • tomcat 启动
2.7.2、初始状态

查看主lvs的eth0设置:
vip绑定在主lvs的eth0上。

这里写图片描述

查询lvs状态:

这里写图片描述

查看备lvs的eth0设置:
vip没有绑定在备lvs的eth0上。

这里写图片描述

访问http://192.168.101.100,可以正常负载。

2.7.3主机宕机

将主lvs的keepalived停止或将主lvs关机(相当于模拟宕机),查看主lvs的eth0:
eth0没有绑定vip

这里写图片描述

查看备lvs的eth0:
vip已经漂移到备lvs。

这里写图片描述

访问http://192.168.101.100,可以正常负载。

2.7.4主机恢复

将主lvs的keepalived启动。
查看主lvs的eth0:

查看备lvs的eth0:
vip漂移到主lvs。

这里写图片描述

查看备lvs的eth0:
eth0没有绑定vip

这里写图片描述

访问http://192.168.101.100,可以正常负载。

3、keepalived+lvs实现双主

上边主备方案是当前只有一台lvs工作,这造成资源浪费,可以采用双主结构,让两台lvs当前都进行工作,采用dns轮询方式,当用户访问域名通过dns轮询每台lvs,双主结构需要两个vip,这两个vip要绑定域名。

同样,在每台lvs上安装keepalived软件,当keepalived检测到其中一个lvs宕机则将宕机的vip漂移到活动lvs上,当lvs恢复则vip又重新漂移回来。

3.1、初始状态

每台lvs绑定一个vip,共两个vip,DNS设置域名对应这两个vip,通过DNS轮询每次解析到不同的vip上即解析到不同的lvs上。

这里写图片描述

3.2、其中一个主机宕机

其中一个主机宕机,每台lvs上安装的keepalived程序会检测到对方宕机,将宕机一方的vip漂移至活动的lvs服务器上,这样DNS轮询全部到一台lvs继续对外提供服务。

这里写图片描述

3.3、主机恢复

当主机恢复又回到初始状态,每个vip绑定在不同的lvs上。

这里写图片描述

4、lvs扩展

前端使用1到2台lvs作为负载基本可以满足中小型网站的并发要求,当lvs的负载成为瓶颈此时就需要对lvs进行优化、扩展。

  • 方案1:LVS-ospf集群
    OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。
    LVS(DR)通过ospfd,做lvs集群,实现一个VIP,多台LVS同时工作提供服务,这种方案需要依赖三层交换机设备实现。

这里写图片描述

用户请求(VIP:42.xx.xx.100)到达三层交换机之后,通过对原地址、端口和目的地址、端口的hash,将链接分配到集群中的某一台LVS上,LVS通过内网(10.101.10.x)向后端转发请求,后端再将数据返回给用户。
LVS-ospf集群模式的最大优势就在于:

1.LVS调度机自由伸缩,横向线性扩展(最大8台,受限于三层设备允许的等价路由数目maximum load-balancing);
2.LVS机器同时工作,不存在备机,提高利用率;
3.做到了真正的高可用,某台LVS机器宕机后,不会影响服务

  • 方案2:DNS轮询

上面讲的是一组双主结构,可以采用多组双主结构达到横向扩展lvs的目的,此方案需要每台lvs都绑定一个vip(公网ip),DNS设置域名轮询多个vip,如下图:

这里写图片描述

  • 方案3:使用硬件负载均衡设置

如果资金允许可以购买硬件设置来完成负载均衡,性能不错的有F5、Array等都可以满足超高并发的要求。

喜欢就点赞评论+关注吧

这里写图片描述

感谢阅读,希望能帮助到大家,谢谢大家的支持!

猜你喜欢

转载自blog.csdn.net/qq_41455420/article/details/79846503