keepalived+LVS(UDP端口+TCP端口)

本文详细介绍了Keepalived如何通过VRRP协议实现LVS服务的高可用性,包括其工作原理、体系结构模块、部署步骤,以及如何配置主备服务器和RealServer,以确保系统的稳定性和可靠性。
摘要由CSDN通过智能技术生成
概念

Keepalived概述

Keepalived起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能-----判断LVS负载调度器,节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集中

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

1.1Keepalived的工作原理

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。

在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

1.2Keepalived体系主要模块及其作用

keepalived体系架构中主要有三个模块,分别是core、check和vrrp。

core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。

vrrp模块:是来实现VRRP协议的。

check模块:负责健康检查,常见的方式有端口检查及URL检查。

1.3 VRRP (虚拟路由冗余协议)

vrrp会把多台路由器组成一个虚拟路由组vrid,VRRP会生成一个虚拟路由(包含虚拟IP和虚拟MAC,局域网内用户不关心哪个是主哪个是备,他们只用虚拟路由器的的虚拟IP作为他们的网关)实际上虚拟IP是承载再master路由器,也就是说实际的数据通过master进行转发,backup是通过优先级来决定哪个是master路由,优先级最大的那台就是master,backup只是用来监听master定时发来的vrrp报文,如果超时未收到master发来的vrrp报文 backup就会抢占master 虚拟IP也就会一漂移到backup上

实例部署
2.1部署准备

centos 7.6

虚拟VIP:172.18.1.88

主服务器:172.18.1.29

被服务器:172.18.1.30

后端服务器1:172.18.1.67(主)

后端服务器2:172.18.1.68(备)

关闭防火墙

systemctl stop firewalld

关闭selinux

使用root用户

vi /etc/sysconfig/selinux

将SELINUX=enforcing修改成SELINUX=disabled

或直接执行

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux 
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

临时关闭selinux的

setenforce 0

查看

sestatus

安装keepalived服务

yum -y install keepalived ipvsadm
2.2主服务器配置

/etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id lvs01          #router_id 机器标识,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
   
   #指定发送VRRP组播消息使用的IPV4组播地址。默认是224.0.0.18
   vrrp_mcast_group4 224.0.0.136
}

vrrp_instance VI_1 {            #vrrp实例定义部分
    state MASTER               #设置lvs的状态,MASTER和BACKUP两种,必须大写 
    interface ens192               #设置对外服务的接口
    virtual_router_id 100        #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示 
    priority 100               #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
    advert_int 1              #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {           #设置验证类型和密码
        auth_type PASS         #主要有PASS和AH两种
        auth_pass 5Ne4c$&g         #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
    }
    virtual_ipaddress {         #设置虚拟ip地址,可以设置多个,每行一个
        172.18.1.88
    }
}

virtual_server 172.18.1.88 15566 {       #设置虚拟服务器,需要指定虚拟ip和服务端口
    delay_loop 6                 #健康检查时间间隔
    lb_algo rr                  #负载均衡调度算法
    lb_kind DR                   #负载均衡转发规则
    persistence_timeout 50        #设置会话保持时间,对动态网页非常有用
    protocol TCP               #指定转发协议类型,有TCP和UDP两种
    
    real_server 172.18.1.28 15566 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1               #设置权重,数字越大权重越高
      TCP_CHECK {              #realserver的状态监测设置部分单位秒
         connect_timeout 10       #连接超时为10秒
         retry 3             #重连次数
         delay_before_retry 3        #重试间隔
         connect_port 15566         #连接端口为80,要和上面的保持一致
      }
    }
    real_server 172.18.1.29 15566 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1               #设置权重,数字越大权重越高
      TCP_CHECK {              #realserver的状态监测设置部分单位秒
         connect_timeout 10       #连接超时为10秒
         retry 3             #重连次数
         delay_before_retry 3        #重试间隔
         connect_port 15566         #连接端口为80,要和上面的保持一致
      }
    }
}

virtual_server 172.18.1.88 15566 {       #设置虚拟服务器,需要指定虚拟ip和服务端口
    delay_loop 6                 #健康检查时间间隔
    lb_algo rr                  #负载均衡调度算法
    lb_kind DR                   #负载均衡转发规则
    persistence_timeout 50        #设置会话保持时间,对动态网页非常有用
    protocol UDP               #指定转发协议类型,有TCP和UDP两种

    real_server 172.18.1.28 15566 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1               #设置权重,数字越大权重越高
      UDP_CHECK {              #realserver的状态监测设置部分单位秒
         connect_timeout 10       #连接超时为10秒
         retry 3             #重连次数
         delay_before_retry 3        #重试间隔
         connect_port 15566         #连接端口为80,要和上面的保持一致
      }
    }
}

virtual_server 172.18.1.88 15566 {       #设置虚拟服务器,需要指定虚拟ip和服务端口
    delay_loop 6                 #健康检查时间间隔
    lb_algo rr                  #负载均衡调度算法
    lb_kind DR                   #负载均衡转发规则
    persistence_timeout 50        #设置会话保持时间,对动态网页非常有用
    protocol UDP               #指定转发协议类型,有TCP和UDP两种

    real_server 172.18.1.29 15566 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1               #设置权重,数字越大权重越高
      UDP_CHECK {              #realserver的状态监测设置部分单位秒
         connect_timeout 10       #连接超时为10秒
         retry 3             #重连次数
         delay_before_retry 3        #重试间隔
         connect_port 15566         #连接端口为80,要和上面的保持一致
      }
    }
2.3备服务器配置

/etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id lvs01          #router_id 机器标识,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
   
   #指定发送VRRP组播消息使用的IPV4组播地址。默认是224.0.0.18
   vrrp_mcast_group4 224.0.0.136
}

vrrp_instance VI_1 {            #vrrp实例定义部分
    state MASTER               #设置lvs的状态,MASTER和BACKUP两种,必须大写 
    interface ens192               #设置对外服务的接口
    virtual_router_id 100        #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示 
    priority 90              #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
    advert_int 1              #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {           #设置验证类型和密码
        auth_type PASS         #主要有PASS和AH两种
        auth_pass 5Ne4c$&g         #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
    }
    virtual_ipaddress {         #设置虚拟ip地址,可以设置多个,每行一个
        172.18.1.88
    }
}

virtual_server 172.18.1.88 15566 {       #设置虚拟服务器,需要指定虚拟ip和服务端口
    delay_loop 6                 #健康检查时间间隔
    lb_algo rr                  #负载均衡调度算法
    lb_kind DR                   #负载均衡转发规则
    persistence_timeout 50        #设置会话保持时间,对动态网页非常有用
    protocol TCP               #指定转发协议类型,有TCP和UDP两种
    
    real_server 172.18.1.28 15566 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1               #设置权重,数字越大权重越高
      TCP_CHECK {              #realserver的状态监测设置部分单位秒
         connect_timeout 10       #连接超时为10秒
         retry 3             #重连次数
         delay_before_retry 3        #重试间隔
         connect_port 15566         #连接端口为80,要和上面的保持一致
      }
    }
    real_server 172.18.1.29 15566 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1               #设置权重,数字越大权重越高
      TCP_CHECK {              #realserver的状态监测设置部分单位秒
         connect_timeout 10       #连接超时为10秒
         retry 3             #重连次数
         delay_before_retry 3        #重试间隔
         connect_port 15566         #连接端口为80,要和上面的保持一致
      }
    }
}

virtual_server 172.18.1.88 15566 {       #设置虚拟服务器,需要指定虚拟ip和服务端口
    delay_loop 6                 #健康检查时间间隔
    lb_algo rr                  #负载均衡调度算法
    lb_kind DR                   #负载均衡转发规则
    persistence_timeout 50        #设置会话保持时间,对动态网页非常有用
    protocol UDP               #指定转发协议类型,有TCP和UDP两种

    real_server 172.18.1.28 15566 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1               #设置权重,数字越大权重越高
      UDP_CHECK {              #realserver的状态监测设置部分单位秒
         connect_timeout 10       #连接超时为10秒
         retry 3             #重连次数
         delay_before_retry 3        #重试间隔
         connect_port 15566         #连接端口为80,要和上面的保持一致
      }
    }
}

virtual_server 172.18.1.88 15566 {       #设置虚拟服务器,需要指定虚拟ip和服务端口
    delay_loop 6                 #健康检查时间间隔
    lb_algo rr                  #负载均衡调度算法
    lb_kind DR                   #负载均衡转发规则
    persistence_timeout 50        #设置会话保持时间,对动态网页非常有用
    protocol UDP               #指定转发协议类型,有TCP和UDP两种

    real_server 172.18.1.29 15566 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1               #设置权重,数字越大权重越高
      UDP_CHECK {              #realserver的状态监测设置部分单位秒
         connect_timeout 10       #连接超时为10秒
         retry 3             #重连次数
         delay_before_retry 3        #重试间隔
         connect_port 15566         #连接端口为80,要和上面的保持一致
      }
    }
2.4配置 Real Server

在 Real Server 2台服务器的网卡上配置 lo 为 VIP。配置脚本如下

SNS_VIP和keepalived中的VIP保持一至,255.255.255.255不要修改就这样

vim /etc/keepalived/lvs-dd

#!/bin/sh
VIP=172.18.1.88
. /etc/rc.d/init.d/functions
case $1 in
        start)
        echo "lo:0 port starting"
        # 为脕脧应lvs碌梅梅垄鹿媒眉卤戮碌脴o陆涌脷习贸ip
        ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        # 脧脰arp脟脟
        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
        ;;

        stop)
        echo "lo:0 port closing"
        ifconfig lo:0 down
        echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;

        *)
        echo "Usage: $0 {start | stop}"
        exit 1
esac
测试:

因为后台程序并不是nginx活tomcat界面,故使用命令telnet和nc测试

telnet 172.18.1.88 15566
nc -uzv 172.18.1.88 15566
注:

1.在VIP设备不会监听15566端口

2.后台服务器不可与keepalived同一台设备

总结:

通过搭建Keepalived+LVS(DR)这两个服务,可以进一步健康检查、持久化、连接超时等参数来优化负载均衡和故障恢复。无论是Keepalived双机热备还是Keepalived+LVS(DR),都需要确保网络配置正确、Keepalived服务正常运行以及实时监控服务状态。这样可以实现高可用性和负载均衡,提高系统的稳定性和可靠性。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值