搭建LVS(DR模式)+Keepalive高可用集群

一. 集群概述

  1. 什么是集群?
    ① .一组通过高速网络互联的计算组,并以单一系统的模式加以管理
    ② . 将很多服务器集中起来一起,提供同一种服务,在客户端看起来就像是只有一个服务器
    ③ .可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益
    ④ .任务调度是集群系统中的核心技术

  2. 集群的目的
    ① .提高性能。如计算密集型应用,如:天气预报、核试验模拟
    ②. 降低成本。相对百万美元级的超级计算机,价格便宜
    ③. 提高可扩展性。只要增加集群节点即可
    ③. 增强可靠性。多个节点完成相同功能,避免单点失败

  3. 集群分类
    ① .高性能计算集群HPC:通过以集群开发的并行应用程序,解决复杂的科学问题。
    .负载均衡(LB)集群:客户端访问负载可以在计算机集群中尽可能平均地分摊处理。
    ③ .高可用(HA)集群:当集群中的一个系统发生故障时,集群软件迅速做出反应,将该系统的任务分配到集群中其它正在工作的系统上执行。

二 .LVS概述

  1. LVS介绍
    ①. Linux虚拟服务器(LVS)是章文嵩在国防科技大学就读博士期间创建的
    ②. LVS可以实现高可用、可伸缩的web、Mail、Cache和Media等网络服务
    ③. 最终目标是利用Linux操作系统和LVS集群软件实现 一个高可用、高性能、低成本的服务器应用集群

  2. LVS集群组成
    ①. 前端:负载均衡层,由一台或多台负载调度器构成
    ②. 中间:服务器群组层,由一组实际运行应用服务的服务器组成
    ③. 底端:数据共享存储层,提供共享存储空间的存储区域

  3. LVS 工作模式
    ①. VS/NAT:通过网络地址转换实现的虚拟服务器。Director将用户请求报文的目的地址改成选定的Real Server地址后,转发给Real Server。大并发访问时,调度器的性能成为瓶颈。
    ②. VS/DR:直接使用路由技术实现虚拟服务器。通过改写请求报文的MAC地址,将请求发至Real Server,Real Server直接响应客户端。
    ③. VS/TUN:通过隧道方式实现虚拟服务器。Director采用隧道技术将请求发至Real Server后,Real Server直接响应客户端。

三. keepalived概述

  1. 调度器出现单点故障,如何解决?
    ①. keepalived实现了高可用集群
    ②. keepalived最初是为了LVS设计的,专门监控各服务器节点的状态
    ③. keepalived后来加入了vrrp功能,防止单点故障

  2. keepalived运行原理
    ①.keepalived检测每个节点服务器状态
    ②.服务器节点异常或工作出现故障,keepalived将故障节点从集群系统中剔除
    ③. 故障节点恢复后,keepalived再讲其加入到集群系统当中
    ④. 所有工作自动完成,无需人工干预

四. 搭建LVS(DR模式)+Keepalive高可用集群

目的:使用Keepalived为LVS调度器提供高可用功能,防止调度器单点故障,为用户提供Web服务

实验拓扑,如下:
搭建LVS(DR模式)+Keepalive高可用集群_第1张图片
步骤一: 配置网络环境

  1. 配置web服务器网络参数 (两台web服务器都配置,这里以web1为例)
    [root@web1 ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.100/24 connection.autoconnect yes
    [root@web1 ~]# nmcli connection up eth0
    
    [root@web1 ~]# cd /etc/sysconfig/network-scripts/
    [root@web1 ~]# cp ifcfg-lo{,:0}
    [root@web1 ~]# vim ifcfg-lo:0   #配置web1的VIP地址,子网掩码必须是32(也就全是255)
    DEVICE=lo:0
    IPADDR=192.168.4.15            //虚拟vip地址
    NETMASK=255.255.255.255        //子网掩码
    NETWORK=192.168.4.15           //网络地址
    BROADCAST=192.168.4.15         //广播地址
    ONBOOT=yes
    NAME=lo:0
    
    [root@web1 ~]# vim /etc/sysctl.conf
    #手动写入如下4行内容
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_announce = 2
    #当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应
    #本机不要向外宣告自己的lo回环地址是192.168.4.15
    #写入这四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应。
    
    [root@web1 ~]# systemctl stop NetworkManager
    [root@web1 ~]# systemctl disable NetworkManager
    [root@web1 ~]# systemctl restart network
    [root@web1 ~]# ifconfig
    [root@web1 ~]# systemctl stop firewalld
    [root@web1 ~]# setenforce 0
  1. 配置proxy主机网络参数(不配置VIP,由keepalvied自动配置)
    [root@proxy ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.5/24 connection.autoconnect yes
    [root@proxy ~]# nmcli connection up eth0

    [root@proxy2 ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.6/24 connection.autoconnect yes
    [root@proxy2 ~]# nmcli connection up eth0

步骤二:配置后台web服务

  1. 安装软件,自定义Web页面(web1和web2主机)
    [root@web1 ~]# yum -y install httpd
    [root@web1 ~]# echo "192.168.4.100" > /var/www/html/index.html
    [root@web2 ~]# yum -y install httpd
    [root@web2 ~]# echo "192.168.4.200" > /var/www/html/index.html
  1. 启动Web服务器软件(web1和web2主机)
    [root@web1 ~]# systemctl start httpd ; systemctl enable httpd
    [root@web2 ~]# systemctl start httpd ; systemctl enable httpd

步骤三:调度器安装Keepalived与ipvsadm软件(两台LVS调度器执行相同的操作)

    [root@proxy ~]# yum install -y keepalived
    [root@proxy ~]# systemctl enable keepalived
    [root@proxy ~]# yum install -y ipvsadm
    [root@proxy ~]# ipvsadm -C
    
    [root@proxy2 ~]# yum install -y keepalived
    [root@proxy2 ~]# systemctl enable keepalived
    [root@proxy2 ~]# yum install -y ipvsadm
    [root@proxy2 ~]# ipvsadm -C

步骤四:部署Keepalived实现LVS-DR模式调度器的高可用

  1. LVS1调度器设置Keepalived,并启动服务(在192.168.4.5主机操作)
    [root@proxy ~]# vim /etc/keepalived/keepalived.conf
    global_defs {
      notification_email {
        [email protected]                   //设置报警收件人邮箱
      }
      notification_email_from ka@localhost    //设置发件人
      smtp_server 127.0.0.1                   //定义邮件服务器
      smtp_connect_timeout 30
      router_id  lvs1                         //设置路由ID号(实验需要修改)
    }
    vrrp_instance VI_1 {
      state MASTER                            //主服务器为MASTER
      interface eth0                          //定义网络接口
      virtual_router_id 51                    //主辅VRID号必须一致
      priority 100                            //服务器优先级
      advert_int 1
      authentication {
        auth_type pass
        auth_pass 1111                        //主辅服务器密码必须一致
      }
      virtual_ipaddress {                     //配置VIP(实验需要修改)
    192.168.4.15 
     }   
    }
    virtual_server 192.168.4.15 80 {           //设置ipvsadm的VIP规则(实验需要修改)
      delay_loop 6
      lb_algo rr                               //设置LVS调度算法为RR
      lb_kind DR                               //设置LVS的模式为DR(实验需要修改)
      #persistence_timeout 50                  //(实验需要注释)
      #注意这样的作用是保持连接,开启后,客户端在一定时间内始终访问相同服务器
      protocol TCP
      real_server 192.168.4.100 80 {           //设置后端web服务器真实IP(实验需要修改)
        weight 1                               //设置权重为1
        TCP_CHECK {                            //对后台real_server做健康检查(实验需要修改)
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
        }
      }
     real_server 192.168.4.200 80 {            //设置后端web服务器真实IP(实验需要修改)
        weight 2                               //设置权重为1
        TCP_CHECK {                            //对后台real_server做健康检查(实验需要修改)
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
        }
      }
    }
    [root@proxy1 ~]# systemctl start keepalived
    [root@proxy1 ~]# ipvsadm -Ln                     #查看LVS规则
    [root@proxy1 ~]# ip a  s                         #查看VIP配置
    [root@proxy1 ~]# iptables -F
  1. LVS2调度器设置Keepalived,并启动服务(在192.168.4.6主机操作)
  [root@proxy ~]# vim /etc/keepalived/keepalived.conf
    global_defs {
      notification_email {
        [email protected]                   //设置报警收件人邮箱
      }
      notification_email_from ka@localhost    //设置发件人
      smtp_server 127.0.0.1                   //定义邮件服务器
      smtp_connect_timeout 30
      router_id  lvs2                         //设置路由ID号(实验需要修改)
    }
    vrrp_instance VI_1 {
      state BACKUP                            //从服务器为BACKUP
      interface eth0                          //定义网络接口
      virtual_router_id 51                    //主辅VRID号必须一致
      priority 50                             //服务器优先级
      advert_int 1
      authentication {
        auth_type pass
        auth_pass 1111                        //主辅服务器密码必须一致
      }
      virtual_ipaddress {                     //配置VIP(实验需要修改)
    192.168.4.15 
     }   
    }
    virtual_server 192.168.4.15 80 {           //设置ipvsadm的VIP规则(实验需要修改)
      delay_loop 6
      lb_algo rr                               //设置LVS调度算法为RR
      lb_kind DR                               //设置LVS的模式为DR(实验需要修改)
      #persistence_timeout 50                  //(实验需要注释)
      #注意这样的作用是保持连接,开启后,客户端在一定时间内始终访问相同服务器
      protocol TCP
      real_server 192.168.4.100 80 {           //设置后端web服务器真实IP(实验需要修改)
        weight 1                               //设置权重为1
        TCP_CHECK {                            //对后台real_server做健康检查(实验需要修改)
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
        }
      }
     real_server 192.168.4.200 80 {            //设置后端web服务器真实IP(实验需要修改)
        weight 2                               //设置权重为1
        TCP_CHECK {                            //对后台real_server做健康检查(实验需要修改)
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
        }
      }
    }
    [root@proxy1 ~]# systemctl start keepalived
    [root@proxy1 ~]# ipvsadm -Ln                     #查看LVS规则
    [root@proxy1 ~]# ip a  s                         #查看VIP配置
    [root@proxy1 ~]# iptables -F

步骤五:客户端测试

客户端使用curl命令反复连接http://192.168.4.15,查看访问的页面是否会轮询到不同的后端真实服务器。

你可能感兴趣的:(搭建LVS(DR模式)+Keepalive高可用集群)