当前位置: 首页> 财经> 股票 > 打造高可用集群的基石:深度解析Keepalived实践与优化

打造高可用集群的基石:深度解析Keepalived实践与优化

时间:2025/7/11 14:18:24来源:https://blog.csdn.net/syzx_/article/details/141198592 浏览次数:0次

高可用集群

集群类型

集群类型主要分为负载均衡集群(LB)、高可用集群(HA)和高性能计算集群(HPC)三大类。每种集群类型都有其特定的应用场景和优势。

1. 负载均衡集群(LB)

负载均衡集群主要用于提高系统的性能、响应效率和可靠性,通过将访问请求分散到多个服务器上,以减少单个服务器的负载压力,从而提高整体的处理能力和访问速度。在负载均衡集群中,LVS(Linux Virtual Server)和haproxy是两种常用的软件解决方案。

  • LVS(Linux Virtual Server)
    • LVS是一个开源的负载均衡器,它工作在OSI模型的第四层(传输层),通过IP负载均衡技术实现高效的请求分发。
    • LVS支持多种工作模式,包括NAT(网络地址转换)、DR(直接路由)和TUN(IP隧道)等,每种模式都有其特定的应用场景和优缺点。
    • LVS通过IPVS(IP Virtual Server)模块实现负载均衡,IPVS是LVS集群系统的核心软件,负责将客户端的请求转发到后端的真实服务器上。
  • haproxy
    • haproxy是一个高性能的TCP/HTTP反向代理服务器和负载均衡器,支持大量的并发连接和高可用性。
    • haproxy提供了灵活的负载均衡算法,如轮询、最少连接数、源地址哈希等,可以根据实际需求进行配置。
    • haproxy还支持SSL卸载、HTTP压缩、会话保持等高级功能,可以进一步提升系统的性能和安全性。

2. 高可用集群(HA)

高可用集群主要用于提高系统的可靠性和可用性,确保在部分服务器出现故障时,整个系统仍然能够持续提供服务。在高可用集群中,keepalived是一款常用的开源软件。

  • keepalived
    • keepalived通过虚拟路由冗余协议(VRRP)实现高可用性,它可以在主服务器出现故障时,自动将虚拟IP地址和服务切换到备份服务器上,从而确保服务的连续性。
    • keepalived还提供了多种健康检查机制,如ICMP Ping、TCP端口检测和HTTP GET等,用于监测后端服务器的运行状态。
    • keepalived的配置相对简单,易于管理和维护,是构建高可用集群的常用选择之一。

3. 高性能计算集群(HPC)

高性能计算集群主要用于处理大规模的计算任务,如科学计算、数据分析、工程仿真等。HPC集群通过将多个高性能计算机连接在一起,利用并行计算和分布式计算技术,提高整体的计算能力和处理速度。

  • HPC集群的特点
    • 高性能:HPC集群采用高性能的计算机和存储设备,能够提供卓越的计算能力和存储性能。
    • 可扩展性:HPC集群可以根据实际需求进行扩展,增加更多的计算节点和存储设备,以满足更大规模的计算任务。
    • 灵活性:HPC集群支持多种操作系统和应用程序,可以灵活配置和部署,以适应不同的计算需求。

实现高可用

提升系统高用性的解决方案:降低MTTR- Mean Time To Repair(平均故障时间)

解决方案:建立冗余机制

主备、主主

active/passive 主/备

active/active 双主

active --> HEARTBEAT --> passive

active <--> HEARTBEAT <--> active

VRRP虚拟路由冗余协议

解决单点故障

VIP

VMAC

工作方式:抢占、非抢占、延时抢占

keepalived部署

简介

vrrp协议的软件实现,设计目的是为了高可用ipvs服务

 负载均衡是一种在真实集群之间分配 IP 流量的方法 服务器,提供一个或多个高可用性虚拟服务。在设计负载均衡拓扑时,必须考虑负载均衡器本身以及后面的真实服务器的可用性。

        Keepalived 为负载均衡和高可用性提供了框架。 负载均衡框架依赖于众所周知且广泛使用的 Linux 虚拟服务器 (IPVS) 内核模块,提供第 4 层负载均衡。 Keepalived 实现了一组健康检查器,以动态和自适应的方式 根据服务器池的运行状况维护和管理负载均衡的服务器池。 高可用性是通过虚拟冗余路由协议实现的 (VRRP)。VRRP是路由器故障切换的基础砖块。keepalived也 实现了一组到 VRRP 有限状态机的钩子 提供低级和高速协议交互。每个Keepalived 框架可以单独使用,也可以一起使用,以提供弹性基础设施。

简而言之,Keepalived 提供了两个主要功能:

  • LVS系统的健康检查
  • 实施 VRRPv2 堆栈以处理负载均衡器故障切换

架构

用户空间核心组件:

vrrp stack:VIP消息通告

checkers:监测real server

system call:实现 vrrp 协议状态转换时调用脚本的功能

SMTP:邮件组件

IPVS wrapper:生成IPVS规则

Netlink Reflector:网络接口

WatchDog:监控进程

控制组件:提供keepalived.conf 的解析器,完成Keepalived配置

IO复用器:针对网络目的而优化的自己的线程抽象

内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

特点

  • 部署简单,只需要配置一个配置文件即可
  • 加入了虚拟路由冗余协议,可以保证业务或网络不间断稳定运行

核心功能

  • 健康检查

        1、采用tcp三次握手,icmp请求,http请求,udp 、

        2、echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活

  • 故障切换

        1、主要应用在配置了主备的服务器上,使用虚拟路由冗余协议维持主备之间的心跳

        2、当主服务器出现问题时,由备服务器承载对应的业务,从而在最大限度上减少损失,并提供服务的稳定性

环境部署

四台主机 vip:100

realserver1:110

realserver2:120

KA1:10

KA2:20

关闭selinux、防火墙

[root@realserver1 ~]# getenforceDisabled[root@realserver1 ~]# systemctl status firewalld

realserver1/2中安装httpd

[root@realserver1 ~]# yum install httpd -y[root@realserver1 ~]# echo 192.168.86.110 > /var/www/html/index.html[root@realserver1 ~]# systemctl enable --now httpd[root@realserver2 ~]# echo 192.168.86.120 > /var/www/html/index.html

安装配置服务

KA1/2中

[root@Ka1 ~]# yum install keepalived -y

配置文件都是以块(block)的形式组成,每一个块的内容都包含在{ }中

主配置文件

[root@Ka1 ~]# vim /etc/keepalived/keepalived.conf

修改全局配置

! Configuration File for keepalived
global_defs {
notification_email {
594233887@qq.com #keepalived 
timiniglee-zln@163.com
}
notification_email_from keepalived@KA1.timinglee.org
smtp_server 127.0.0.1         
smtp_connect_timeout 30         
router_id KA1.timinglee.org     vrrp_skip_check_adv_addr vrrp_strict 
vrrp_garp_interval 0 
vrrp_gna_interval 0 
vrrp_mcast_group4 224.0.0.18 
}

vrrp_gna_interval 0  后面有0

vrrp_route_id--必须唯一


vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 100priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.86.100/24 dev eth0 label eth0:1}
}

修改后重启

[root@Ka1 ~]# systemctl enable --now keepalived.service

把配置复制到另一台

[root@Ka1 ~]# scp /etc/keepalived/keepalived.conf root@192.168.86.20:/etc/keepalived/keepalived.conf

修改优先级、state

vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 100

测试效果--抓包命令

[root@Ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18

解决VIP不能通信

global_defs {notification_email {1540509690@qq.com}notification_email_from keepalived@timinglee.orgsmtp_server 127.0.0.1smtp_connect_timeout 30router_id ka1.timinglee.orgvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0vrrp_mcast_group4 224.0.0.18vrrp_iptables
}

日志

生成日志

[root@ka1 ~]# vim /etc/sysconfig/keepalived

指定0-7

KEEPALIVED_OPTIONS="-D -S 6"

[root@ka1 ~]# systemctl restart keepalived.service[root@ka1 ~]# vim /etc/rsyslog.conf# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
local6.*                                                /var/log/keepalived.log

查看是否生成

[root@ka1 ~]# systemctl restart rsyslog.service[root@ka1 ~]# systemctl restart keepalived.service测试[root@ka1 ~]# ll /var/log/keepalived.log
-rw------- 1 root root 8168 Aug 11 21:11 /var/log/keepalived.log

独立配置子文件

创建子配置目录

[root@Ka1 ~]# mkdir -p /etc/keepalived/conf.d[root@Ka1 ~]# vim /etc/keepalived/conf.d/192.168.86.100.conf

修改主配置文件

[root@Ka1 ~]# vim /etc/keepalived/keepalived.conf
#vrrp_instance VI_1 {
#    state MASTER
#    interface eth0
#    virtual_router_id 100
#    priority 100
#    advert_int 1
#    authentication {
#        auth_type PASS
#        auth_pass 1111
#    }
#    virtual_ipaddress {
#        192.168.86.100/24 dev eth0 label eth0:1
#    }
#}
include "/etc/keepalived/conf.d/*.conf"

注释掉上面的加入指向子配置文件路径

include "/etc/keepalived/conf.d/*.conf"

在子配置文件写配置

[root@Ka1 ~]# cat /etc/keepalived/conf.d/192.168.86.100.confvrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 100priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.86.100/24 dev eth0 label eth0:1}}[root@Ka1 ~]#

 

然后重启服务

[root@Ka1 ~]# systemctl restart keepalived.service[root@Ka1 ~]# systemctl restart rsyslog.service

Keepalived企业应用示例

抢占模式和非抢占模式

默认为抢占模式,推荐使用非抢占模式

[root@Ka1 ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 100priority 100advert_int 1nopreempt          #设置非抢占模式authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.86.100/24 dev eth0 label eth0:1}
}#include "/etc/keepalived/conf.d/*.conf"

重启keepalived

延时抢占

[root@Ka1 ~]# vim /etc/keepalived/keepalived.confpreempt_delay 5s   #设置延迟5s抢占

VIP单播配置

[root@Ka1 ~]# vim /etc/keepalived/keepalived.conf

禁用vrrp_strict

10:

    unicast_src_ip 192.168.86.10unicast_peer {192.168.86.20}

20:

    unicast_src_ip 192.168.86.20unicast_peer {192.168.86.10}

效果:

[root@Ka1 ~]# tcpdump -i eth0 -nn src host 192.168.86.10 and dst 192.168.86.20tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes14:46:13.904625 IP 192.168.86.10 > 192.168.86.20: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20

邮件通知

[root@ka1 ~]# yum install mailx -y[root@ka1 ~]# vim /etc/mail.rc[root@ka1 ~]# echo hello world | mail -s test 2584896723@qq.com

set from=2584896723@qq.comset smtp=smtp.qq.comset smtp-auth-user=2584896723@qq.comset smtp-auth-password=rbdnzxqskffidjjjset smtp-auth=loginset ssl-verify=ignore

QQ邮箱-->账号与安全-->安全设置

[root@ka1 ~]# vim /etc/keepalived/mail.sh#! /bin/bashmail_dst="2584896723@qq.com"send_message(){mail_sub="$HOSTNAME to be $1 vip move"mail_msg="`date +%F\ %T`:vrrp move $HOSTNAME chage $1"echo $mail_msg | mail -s "$mail_sub" $mail_dst}case $1 inmaster)send_message master;;backup)send_message backup;;fault)send_message fault;;*);;esac

[root@ka1 ~]# chmod +x /etc/keepalived/mail.sh[root@ka1 ~]# vim /etc/keepalived/keepalived.conf#按如下添加的配置notify_master "/etc/keepalived/mail.sh master"notify_backup "/etc/keepalived/mail.sh backup"notify_fault "/etc/keepalived/mail.sh fault"

实现master/master的keepalived双主架构

ka1第二个

ka2第二个

实现IPVS的高可用性(LVS+keepalived)

[root@realserver2 ~]# vim /etc/sysctl.d/arp.confnet.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2[root@realserver2 ~]# sysctl -p
[root@realserver2 ~]# sysctl --system


[root@ka1 ~]# vim /etc/keepalived/keepalived.confvirtual_server 192.168.86.100 80 {delay_loop 6lb_algo wrrlb_kind DR.#persistence_timeout 50protocol TCPreal_server 192.168.86.110 80 {weight 1HTTP_GET {url {path /status_code 200}connect_timeout 3nb_get_retry 3delay_before_retry 3}}}

    real_server 192.168.86.110 80 {weight 1SSL_GET {url {path /status_code 200}connect_timeout 3nb_get_retry 2delay_before_retry 2}}
###############################################################real_server 192.168.86.120 80 {weight 1SSL_GET {url {path /status_code 200}connect_timeout 3nb_get_retry 2delay_before_retry 2}}
}

[root@ka2 ~]# vim /etc/keepalived/keepalived.confvirtual_server 192.168.86.100 80{delay_loop 6lb_algo wrrlb_kind DR#persistence_timeout 50protocol TCPreal_server 192.168.86.110 80 {weight 1SSL_GET {url {path /status_code 200}connect_timeout 3nb_get_retry 2delay_before_retry 2}}
##################################################################real_server 192.168.86.120 80 {weight 1SSL_GET {url {path /status_code 200}connect_timeout 3nb_get_retry 2delay_before_retry 2}}}


[root@ka2 ~]# curl 172.25.254.110
172.25.254.110[root@ka2 ~]# systemctl restart keepalived.service

实现其他应用的高可用性 VRRP Script(keepalived+haproxy)

利用脚本实现主从角色切换

[root@ka1 ~]# vim /etc/keepalived/test.sh
#! /bin/bash
[ ! -f /mnt/lee ][root@ka1 ~]# sh /etc/keepalived/test.sh[root@ka1 ~]# echo $?
​0[root@ka1 ~]# touch /mnt/lee[root@ka1 ~]# chmod +x /etc/keepalived/test.sh[root@ka1 ~]# sh /etc/keepalived/test.sh

[root@ka1 ~]# vim /etc/keepalived/keepalived.confvrrp_script check_file {script "/etc/keepalived/test.sh"interval 1weight -30fall 2rise 2timeout 2
}...track_script {check_file}...

[root@ka1 ~]# systemctl restart keepalived.service[root@ka1 ~]# ls /mnt/lee/mnt/lee

keepalived+haproxy实现高可用

[root@ka1 ~]# yum install haproxy -y

两台主机都做

[root@ka1 ~]# vim /etc/sysctl.conf# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.#For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_nonlocal_bind=1[root@ka1 ~]# sysctl -pnet.ipv4.ip_nonlocal_bind = 1[root@ka1 ~]# systemctl enable --now haproxy.service

listen webclusterbind 192.168.86.100:80mode httpbalance roundrobinserver web1 192.168.86.110:80 check inter 3 fall 2 rise 5server web2 192.168.86.120:80 check inter 3 fall 2 rise 5

[root@ka1 ~]# vim /etc/sysctl.d/arp.confnet.ipv4.conf.all.arp_ignore=0net.ipv4.conf.all.arp_announce=0net.ipv4.conf.lo.arp_ignore=0net.ipv4.conf.lo.arp_announce=0

检测HAproxy状态

[root@ka2 ~]# killall -0 haproxy
[root@ka2 ~]# echo $?
0
[root@ka2 ~]# 

检测脚本

[root@ka1 ~]# vim /etc/keepalived/test.sh[root@ka1 ~]# cat /etc/keepalived/test.sh
#!/bin/bash
killall -0 haproxy[root@ka1 ~]# 

关键字:打造高可用集群的基石:深度解析Keepalived实践与优化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: