Keepalived + LVS实现高可用

1、简介

LVS和Keepalived是Linux操作系统下实现高可用的负载均衡解决方案的重要工具。通过协同工作,它们能够实现一种高性能、高可用的负载均衡服务,使得用户能够透明地访问到集群中的服务。同时,它们还提供了强大的监控和故障切换功能,保证了系统的稳定性和可靠性。因此,对于需要实现负载均衡和高可用性的系统来说,LVS和Keepalived无疑是一个值得考虑的选择。

2、keepalived配置说明

2.1虚拟服务器的配置结构

virtual_server IP port {

...

real_server {

...

}

real_server {

...

}

}

2.2 虚拟服务器的配置

virtual_server IP port { #VIP和PORT

delay_loop <INT>                                                       #检查后端服务器的时间间隔

lb_algo rr|wrr|lc|wlc|lblc|sh|dh                                     #定义调度方法

lb_kind NAT|DR|TUN                                                  #集群的类型,注意要大写

persistence_timeout <INT>                                         #持久连接时长

protocol TCP|UDP|SCTP                                            #指定服务协议,一般为TCP

sorry_server <IPADDR> <PORT>                              #所有RS故障时,备用服务器地址

real_server <IPADDR> <PORT> {                              #RS的IP和PORT

weight <INT>                                                               #RS权重

notify_up <STRING>|<QUOTED-STRING>                #RS上线通知脚本

notify_down <STRING>|<QUOTED-STRING>            #RS下线通知脚本

HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... } #定义当前主机健康状态检测方法

           }

}

#注意:括号必须分行写,两个括号写在同一行,如: }} 会出错

2.3 应用层检测:HTTP_GETSSL_GET

HTTP_GET|SSL_GET {

url {

path <URL_PATH>                               #定义要监控的URL

status_code <INT>                               #判断上述检测机制为健康状态的响应码,一般为 200

}

connect_timeout <INTEGER>        #客户端请求的超时时长, 相当于haproxy的timeout server

nb_get_retry <INT>                         #重试次数

delay_before_retry <INT>               #重试之前的延迟时长

connect_ip <IP ADDRESS>            #向当前RS哪个IP地址发起健康状态检测请求

connect_port <PORT>                    #向当前RS的哪个PORT发起健康状态检测请求

bindto <IP ADDRESS>                   #向当前RS发出健康状态检测请求时使用的源地址

bind_port <PORT>                         #向当前RS发出健康状态检测请求时使用的源端口

}

2.4 传输层检测:TCP_CHECK

TCP_CHECK {

connect_ip <IP ADDRESS>          #向当前RS的哪个IP地址发起健康状态检测请求

connect_port <PORT>                  #向当前RS的哪个PORT发起健康状态检测请求

bindto <IP ADDRESS>                  #发出健康状态检测请求时使用的源地址

bind_port <PORT>                        #发出健康状态检测请求时使用的源端口

connect_timeout <INTEGER>       #客户端请求的超时时长

                                                       #等于haproxy的timeout server

}

3、 实现LVS+keepalived的高可用性负载均衡集群

3.1 实验环境

主机名

IP

VIP

角色

Ka1

192.168.182.145

高可用负载均衡器

Ka2

192.168.182.146

高可用负载均衡器

Webserver1

192.168.182.151

192.168.182.100

后端服务器

Webserver2

192.168.182.152

192.168.182.100

后端服务器

client

192.168.182.154

客户端

3.2 准备web服务器并使用脚本绑定VIP至web服务器lo网卡

#准备两台后端服务器主机

[root@webserver1 ~]# echo webserver1 - 192.168.182.151 > /var/www/html/index.html

[root@webserver1 ~]# systemctl start httpd.service

[root@webserver2 ~]# echo webserver2 - 192.168.182.152 > /var/www/html/index.html

[root@webserver2 ~]# systemctl start httpd.service

#后端服务器做arp抑制

[root@webserver1 ~]# vim /etc/sysctl.conf

net.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@webserver2 ~]# vim /etc/sysctl.conf

net.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

#使用ipvsadm工具

[root@ka2 ~]# dnf install ipvsadm

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

virtual_server 192.168.182.100 80 {

        delay_loop 6               #检查后端服务器的时间间隔

        lb_algo wrr                  #定义调度方法

        lb_kind DR                #集群的类型,注意要大写

        protocol TCP               #指定服务协议

        real_server 192.168.182.151 80 {                    #真实服务器的IP和端口

                weight 1

                HTTP_GET {

                        url {

                                path /                          #重试之前的延迟时长

                                status_code 200         #判断上述检测机制为健康状态的响应码,一般为 200

                        }

                        connect_timeout 3         #客户端请求的超时时长, 相当于haproxy的timeout server

                        nb_get_retry 2                 #重试次数

                        delay_before_retry 2      #重试之前的延迟时长

                }

        }

        real_server 192.168.182.152 80 {

                weight 1

                HTTP_GET {

                        url {

                                path /

                                status_code 200

                        }

                        connect_timeout 3

                        nb_get_retry 2

                        delay_before_retry 2

                }

        }

}

[root@ka1 ~]# systemctl restart keepalived.service

[root@ka2 ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.182.100:80 wrr

  -> 192.168.182.151:80           Route   1      0          0        

  -> 192.168.182.152:80           Route   1      0          0

Ka1ka2主机相同配置

3.3 模拟测试:

[root@webserver1 ~]# systemctl stop httpd.service

[root@ka2 ~]# ipvsadm -Ln                 #它会自动将故障服务器剔除

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.182.100:80 wrr

  -> 192.168.182.152:80           Route   1      0          0  

#修复好后自动添加回来

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现基于 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高可用集群实现的大致步骤。需要注意的是,配置过程可能会因环境而异,您需要根据实际情况进行适当的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值