keepalived+lvs+负载均衡的windows实现

       关于这方面的文章网上一大堆,但是大部分都是写keepalived的配置问题,并没有说明白原理方面的东西,如果配置上稍微有点问题,都不知道问题出在什么地方,下面我写下keepalived的常用配置以及lvs的原理、负责均衡的工作原理。

1.keepalived和lvs是干什么的    
        LVS 是 Linux  Virtual Server ,Linux 虚拟服务器;是一个虚拟的 服务器集群 【多台机器 LB IP】;常用与实现外网对 一台虚拟主机的访问时,而虚拟主机负责将请求转移到真实的主机上面来,这样就实现了对外公开一个ip节点,内部有多个真实的服务器负责处理请求。
        keepalived主要用作realserver的健康状态的检查,和负责均衡主备机之间的failover的实现。主要用于上面lvs的辅助,上的多节点真实服务器处理同一个虚拟ip(lvs服务器)的请求时,如果真实服务器宕机,但是lvs并不能自动响应,不在将请求分配到这台真实的服务器节点上面来,而keepalived就实现了这样的功能,当真是的服务器节点宕机,keepalived的健康检查机制检查到了宕机的服务器不能再提供服务了,keepalived就将这个节点从虚拟ip(lvs服务器)上面剔除,保证对外提供的服务能够稳健的运行。
2.lvs的几种常见的模式(读懂这一部分需要有TCP封包的基础知识)

        DR模式(Direct Routing)【这个模式比较常用】

       (1)基本工作原理
                    1)client发送请求【package】到VIP(lvs服务器,下面统一用VIP,不再解释)
                    2)VIP收到请求之后会根据lvs设置的LB算法选择一个比较合理的realserver,把此请求的封包中的dest MAC地址(目的MAC地址)修改为realserver的MAC地址,将这个数据包广播到VIP所在的整个网段上面,ARP协议会将package发送到realserver上面(根据MAC地址),然后lvs服务器会将这个src ip-----> realserver之间的联系记录下来(为什么需要记录?因为client只能看见VIP并不能看见后面的realserver这个服务器,是lvs负责将请求转发到realserver服务器上面),此次链接没有断开之前,这个client发出的所有请求都将转发到这个realserver上面。
                    3)realserver收到package之后解析里面的dest ip(目的ip地址,对你没看到错就是解析这个ip,你要注意到这个时候解析到的这个ip地址是VIP的ip地址,因为client发出的请求是给VIP这个服务器的,而DR这个模式并没有将目的 ip转换为realserver的ip,所以这个模式的realserver需要配置一个环回适配器,下面的答疑环节还要解释这个问题,以及具体的配置方法都会给出)
                    4)因为realserver已经配置了VIP的环回适配器,所以当realserver收到这个package之后认为这个package是发送到本机的,然后realserver受理这个请求,然后将请求的结果发送出去(这个结果是通过环回适配器发送出去的,所以DR这个模式realserver和client是有直接通讯的【不太安全,但是比较快】)
        (2)注意事项:
                1)realserver必须绑定VIP的地址,就是每台realserver必须要配置环回适配器(将适配器的ip地址配置为VIP的地址)
                2)realserver和VIP必须在同一个网段(怎么判断是不是在同一个网段,可以去网上百度下子网掩码和ipv4,也可以看下我下面的博客)

         NAT模式:
        (1)基本原理:

                    1)client发送请求【package】到VIP;

                    2)VIP收到请求之后会根据lvs设置的LB算法选择一个比较合理的realserver,将收到 package的dest ip地址修改为realserver的ip地址;

                    3)realserver收到这个package之后,判断这个dest ip是本机ip就处理这个请求,然后将请求的结果发送到VIP;

                    4)VIP收到请求结果之后将请求结果的dest ip改为client ip,将src ip改为VIP;


           FULL NAT模式:

            (1)基本原理:

                     1)client发送请求【package】到VIP;

                    2)VIP收到请求之后会根据lvs设置的LB算法选择一个比较合理的realserver,将收到 package的dest ip地址修改为realserver的ip地址,将src ip修改为VIP的ip地址;

                   3)realserver收到这个package之后,判断是发送给自己的,然后就处理这个请求,将请求的结果发送到VIP上面;

                    4)VIP收到请求结果之后将请求结果的src ip修改为VIP的ip地址,将dest ip修改为clien的ip地址;

            

        IP TUNNEL模式:

                (1)基本原理:

                     1)client发送请求【package】到VIP;

                    2)VIP收到请求之后会根据lvs设置的LB算法选择一个比较合理的realserver,VIP会将收到的package重新包装到一个新的ip包里面,新的dest ip是realserver的ip地址;

                    3)realserver收到package之后,判断dest ip是本机,于是处理package,然后发现里面那层package的dest ip是VIP然后判断是不是本机(这里还是需要绑定VIP的ip地址到本机要不然直接就将封包丢弃了)

3.keepalived常用配置和说明
        keepalived的配置全都在keepalived.conf的配置文件中;
#全局定义块
global_defs {
    # 邮件通知配置
    notification_email {
        email1
        email2
    }#这个括号里面的内容是服务器故障的通知对象
    notification_email_from email       #指定发件人
    smtp_server host                    #指定smtp服务器地址
    smtp_connect_timeout num            #制定smtp服务器链接超时

    lvs_id string
    router_id string    ## 标识本节点的字条串,通常为hostname
}

#VRRP 实例定义块
vrrp_sync_group string { 
    group {
        string
        string
    }
}

vrrp_instance string {
    state MASTER|BACKUP         #指定该keepalived的初始状态
    virtual_router_id num        
    interface string            #vrrp实例绑定的接口

    mcast_src_ip @IP             #指定发送组播数据包的源IP地址。默认是绑定VRRP实例的接口的主IP地址。
    priority num                #指定优先级,优先级高的将成为MASTER。
    advert_int num                #指定发送VRRP通告的间隔。单位是秒。
    nopreempt                    #设置为不抢占。默认是抢占的,当高优先级的机器恢复后,会抢占低优先级的机器成为MASTER,而不抢占,则允许低优先级的机器继续成为MASTER,即使高优先级的机器已经上线。如果要使用这个功能,则初始化状态必须为BACKUP。
    smtp_alert                   
    authentication {
        auth_type PASS|AH
        auth_pass string
    }

    virtual_ipaddress {  # Block limited to 20 IP addresses @IP
        @IP             #这里填写VIP服务器的对外的IP地址
        @IP
    }
}

#虚拟服务器定义块
virtual_server (@IP PORT)|(fwmark num) { 
    delay_loop num                        #健康检查的时间间隔。
    lb_algo rr|wrr|lc|wlc|sh|dh|lblc      #LVS调度算法。
    lb_kind NAT|DR|TUN                    #lvs工作模式,具体的原理见上面
    persistence_timeout num               #持久化超时时间,单位是秒。默认是6分钟。
    protocol TCP|UDP                      #4层协议。
    real_server @IP PORT { 
        weight num                        #给服务器指定权重。默认是1.
        notify_down /path/script.sh       #当服务器健康检查失败时,执行的脚本。
        TCP_CHECK { 
            connect_port num 
            connect_timeout num
        }
    }

    real_server @IP PORT {
        weight num
        MISC_CHECK {
            misc_path /path_to_script/script.sh(or misc_path “/path_to_script/script.sh <arg_list>”)
        }
    }

    real_server @IP PORT {
        weight num
        HTTP_GET|SSL_GET {
            url { 
                # You can add multiple url block path alphanum
                digest alphanum
            }
            connect_port num
            connect_timeout num 
            nb_get_retry num 
            delay_before_retry num
        }
    }
}
4.答疑:
        1)为什么windows的真实主机需要配置IP地址为VIP的环回适配器?
            答:lvs的工作模式需要,lvs中DR,IP TUNNER工作模式,lvs服务器转发到realserver的package中的dest ip为VIP的IP地址,所以在windows中需要配置这个ip;而且在windows中需要执行下面的脚本
        
netsh interface ipv4 set interface "realserver网络接口名称" weakhostreceive=enabled
netsh interface ipv4 set interface "realserver网络接口名称" weakhostsend=enabled
netsh interface ipv4 set interface "环回网络接口名称" weakhostreceive=enabled
netsh interface ipv4 set interface "环回网络接口名称" weakhostsend=enabled
        2)为什么需要在windows上面执行上面的脚本
            答:因为在上面的lvs工作模式下,realserver收到封包之后,需要确认封包是传给本机的,这个时候接收封包的接口是realserver网络接口,而收到的封包是传送给VIP的,windows在默认情况下环回接口和真实接口是不能通信的,也就是说不输入上面的命令,realserver是没有办法识别封包是传送给本机的,当执行上面的脚本之后,realserver的真实接口和环回接口可以正常的通信了,就可以接收封包了。



    
实现基于 Keepalived + LVS 的高可用集群,您可以按照下面的步骤操作: 1. 安装 KeepalivedLVS 您需要在每个服务器上安装 KeepalivedLVSKeepalived 是一个实现 VRRP 协议的工具,用于实现服务器之间的故障切换。LVS 是一个 Linux 负载均衡器,可以将流量分发到多个后端服务器上。 2. 配置 LVS配置 LVS 之前,您需要先确定负载均衡器的 IP 地址和后端服务器的 IP 地址。您可以在 LVS配置虚拟 IP 地址,然后将请求转发到后端服务器上。 3. 配置 Keepalived配置 Keepalived 之前,您需要确定一个主节点和多个备份节点。主节点将拥有虚拟 IP 地址,并将请求转发到后端服务器上。如果主节点发生故障,备份节点将接管虚拟 IP 地址,并继续转发请求。 在每个节点上,您需要配置 Keepalived配置文件,以实现 VRRP 协议和故障切换。在主节点上,您需要将 VRRP 的优先级设置为最高,以确保它成为主节点。在备份节点上,您需要将优先级设置为较低,以确保它只在主节点发生故障时接管虚拟 IP 地址。 4. 测试集群 在完成上述步骤后,您需要测试集群是否正常工作。您可以使用 curl 或浏览器访问虚拟 IP 地址,以确保请求能够正确地转发到后端服务器上。 以上就是基于 KeepalivedLVS 的高可用集群实现的大致步骤。需要注意的是,配置过程可能会因环境而异,您需要根据实际情况进行适当的调整。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值