当前位置: 代码网 > 服务器>服务器>Linux > keepalived+LVS(UDP端口+TCP端口)

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

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

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服务正常运行以及实时监控服务状态。这样可以实现高可用性和负载均衡,提高系统的稳定性和可靠性。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com