Keepalived+LVS高可用集群

2023年 10月 1日 72.5k 0

keepalived介绍

keepalived 软件起初是专为 LVS 负载均衡软件设计的,用来管理并监控 LVS集群中各个服务节点的状态,后来又加入了可以实现高可用的 VRRP 功能。因此,keepalived 除了能够管理 LVS集群外,还可以为其他服务(例如:Nginx、Haproxy、MySQL等)实现高可用。

keepalived工具介绍

  • 管理 LVS 负载均衡软件:
    Keepalived可以通过读取自身的配置文件,实现通过更底层的接口直接管理LVS的配置以及控制服务的启动,停止功能。

  • 支持故障自动切换:
    Keepalived可以实现任意两台主机之间,例如Master和Backup主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是LVS负载均衡,Nginx反向代理这样的服务器。
    Keepalived高可用功能实现的简单原理为,两台主机同时安装好Keepalived软件并启动服务,开始正常工作时,由角色为Master的主机获得所有资源并对用户提供服务,角色为Backup的主机作为Master主机的热备;当角色为Master的主机失效或出现故障时,角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务;而当角色为Master的主机故障修复后,又会自动接管回它原来处理的工作,角色为Backup的主机则同时释放Master主机失效时它接管的工作,此时,两台主机将恢复到最初启动时各自的原始角色及工作状态。

  • 实现 LVS 负载调度器、节点服务器的高可用性(HA):
    一般企业集群需要满足的三个特点:负载均衡、健康检查、故障切换,使用 LVS + Keepalived 完全可以满足需求。

  • Keepalived体系主要模块:

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

    core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
    vrrp模块:是来实现VRRP协议的。
    check模块:负责健康检查,常见的方式有端口检查及URL检查。

    keepalived脑裂及解决办法:

    Keepalive脑裂:

    主备调度器通过内网交换机连接,如果交换机挂了,则此时主调度器仍存活,但备份调度器收不到主调度器的VRRP信息,备调度器就会工作,两台调度器就会同时工作,出现脑裂现象。

    主备调度器同时工作,如果web是无状态应用,那么客户端无论从哪一个调度器进行访问,页面内容相同。但如果是有状态应用,则两台调度器同时工作,会导致客户端显示的页面资源不一致。

    脑裂原因:

    高可用服务器对之间心跳线链路发生故障,导致无法正常通信。如心跳线坏了(包括断了,老化)
    因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)
    因心跳线间连接的设备故障(网卡及交换机)
    因仲裁的机器出问题(采用仲裁的方案)
    高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输
    Keepalived配置里同一 VRRP实例如果 virtual_router_id两端参数配置不一致也会导致裂脑问题发生。
    vrrp实例名字不一致、优先级一致。

    脑裂应对策略:

    主备调度器多连一条线,即使交换机挂了,这两个还可以通信。
    通过第三方监控软件,当发现两台调度器同时工作,则杀掉主调度器。
    自己写一个脚本,例如crontab和while死循环执行,当监控到备调度器工作了,就杀掉主调度器的keepalived服务。

    keepalived+LVS 高可用部署示例:

    当主服务器宕机或服务出现问题时,备服务器抢占转发

    配置负载调度器(192.168.88.100):

    1.#关闭防火墙
    systemctl disable --now firewalld
    setenforce 0
     
    2.yum安装ipvsadm和keepalived
    yum install ipvsadm keepalived.x86_64  -y
     
     
    3.加载模块
    modprobe ipvsadm
    cat /proc/net/ip_vs   #查看ip_vs版本信息
     
    4.调整 proc 响应参数,关闭Linux 内核的重定向参数响应
    vim /etc/sysctl.conf
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.ens33.send_redirects = 0
     
    sysctl -p    #刷新加载
     
    5.编写keepalived配置文件:
     
    global_defs {						#定义全局参数
    --10行--修改,邮件服务指向本地
    	smtp_server 127.0.0.1
    --12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
    	router_id LVS_01
    --14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
    	#vrrp_strict
    }
     
    vrrp_instance VI_1 {				#定义VRRP热备实例参数
    --20行--修改,指定热备状态,主为MASTER,备为BACKUP
        state MASTER
    --21行--修改,指定承载vip地址的物理接口
        interface ens33
    --22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	
        virtual_router_id 10
    	#nopreempt		#如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
    --23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
        priority 100
        advert_int 1					#通告间隔秒数(心跳频率)
        authentication {				#定义认证信息,每个热备组保持一致
    		auth_type PASS				#认证类型
    --27行--修改,指定验证密码,主备服务器保持一致
            auth_pass 123456
        }
        virtual_ipaddress {				#指定群集vip地址
            192.168.10.200
        }
    }
     
    --36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
    virtual_server 192.168.10.200 80 {
        delay_loop 6					#健康检查的间隔时间(秒)
        lb_algo rr						#指定调度算法,轮询(rr)
    --39行--修改,指定群集工作模式,直接路由(DR)
        lb_kind DR
        persistence_timeout 0			#连接保持时间(秒)  修改为0以便查看效果
        protocol TCP					#应用服务采用的是 TCP协议
    --43行--修改,指定第一个Web节点的地址、端口
        real_server 192.168.10.133 80 {
            weight 1					#节点的权重
    --45行--删除,添加以下健康检查方式		
            TCP_CHECK {
    			connect_port 80			#添加检查的目标端口
    			connect_timeout 3		#添加连接超时(秒)
    			nb_get_retry 3			#添加重试次数
    			delay_before_retry 3	#添加重试间隔
    		}
    	}
     
    	real_server 192.168.10.134 80 {		#添加第二个 Web节点的地址、端口
            weight 1
            TCP_CHECK {
    			connect_port 80
    			connect_timeout 3
    			nb_get_retry 3
    			delay_before_retry 3
    		}
    	}
    ##删除后面多余的配置##
    }
     
    6.启动服务:
    ipvsadm-save >/etc/sysconfig/ipvsadm
    systemctl start ipvsadm.service
    systemctl restart keepalived
    

    ff8c815a7c644e6ab94c428fd2f2f7d5.png

    配置负载调度器(192.168.88.100):

    把keepalived.conf文件远程拷贝过来,更改备服务器参数
     
    scp keepalived.conf 192.168.88.102:`pwd`
     ## 在master主机使用scp  注意我这里是相对路径
     
         notification_email_from Alexandre.Cassen@firewall.loc
         10    smtp_server 127.0.0.1
         11    smtp_connect_timeout 30
         12    router_id LVS_02         #更改id
         13    vrrp_skip_check_adv_addr
         14    #vrrp_strict
         15    vrrp_garp_interval 0
         16    vrrp_gna_interval 0
         17 }
         18
         19 vrrp_instance VI_1 {
         20     state BACKUP           #备服务器为backup
         21     interface ens33
         22     virtual_router_id 51
         23     priority 90             #优先级90
         24     advert_int 1
         25     authentication {
         26         auth_type PASS
         27         auth_pass 1111
         28     }
    

    4b218ab0b01747e8a992fe4584de7d7e.png

    配置web服务器:

    1. #关闭防火墙
    systemctl stop firewalld
    setenforce 0
     
    2. #配置web服务器网页,自定
     
     
    4. #配置虚拟vip
    vim /etc/sysconfig/network-scripts/ifcfg-lo:0
    DEVICE=lo:0
    ONBOOT=yes
    IPADDR=192.168.88.200
    NETMASK=255.255.255.255
     
    5. #重启网络服务,开启虚拟网卡
    systemctl restart network
    ifup lo:0
    ifconfig lo:0
     
    6. #设置路由
    route add -host 192.168.88.200 dev lo:0
    route -n
     
    7. #调整 proc 响应参数
    #添加系统只响应目的IP为本地IP的ARP请求
    #系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
    vim /etc/sysctl.conf
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    net.ipv4.conf.default.arp_ignore = 1
    net.ipv4.conf.default.arp_announce = 2
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
     
    8. #刷新proc参数
    sysctl -p
     
    两台配置一样。。。。。。。
     
    想要快速测试调度结果,需要关闭web服务的长连接
    

    测试:

    5388c30119f74ec8bf2006adf10d92d9.png

    f2fbeaf5f81f422bbdf435ea384d11a9.png

    39d8093d3829469896e09ce306038ce0.png

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论