Keepalived + LVS实现高可用

devtools/2024/12/22 22:00:02/

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  

#修复好后自动添加回来


http://www.ppmy.cn/devtools/97370.html

相关文章

kafka开启kerberos

一、基本环境准备 创建票据创建Kerberos主体&#xff08;Principal&#xff09;&#xff1a; 使用kadmin.local或kadmin命令为Zookeeper和Kafka服务创建Kerberos主体。例如&#xff1a; 注意有几台机器创建几个 kadmin.local -q "addprinc -randkey zookeeper/dshield…

使用C#禁止Windows系统插入U盘(除鼠标键盘以外的USB设备)

试用网上成品的禁用U盘的相关软件&#xff0c;发现使用固态硬盘改装的U盘以及手机等设备&#xff0c;无法被禁止&#xff0c;无奈下&#xff0c;自己使用C#手搓了一个。 基本逻辑&#xff1a; 开机自启&#xff1b;启动时&#xff0c;修改注册表&#xff0c;禁止系统插入USB存…

微信小程序的四种弹窗使用

​ 在做小程序的过程中&#xff0c;弹窗也算是非常实用的功能了&#xff0c;这几天写的几个功能就用到了弹窗&#xff0c;也可能是初学者的问题&#xff0c;比较菜&#xff0c;想找一个可以带图片的自定义的弹窗&#xff0c;&#xff0c;这里简单介绍一下官方封装好的四个弹窗…

leetcode108.把升序数组转换成二叉搜索树

题目描述 [-10,-3,0,5,9] 转换成如下二叉搜索树&#xff1a; 解题的核心原理是&#xff1a;二叉搜索树的中序遍历结果是一个升序数组&#xff0c;所以根节点的数值&#xff0c;也位于数组的中部。 class Solution {public TreeNode sortedArrayToBST(int[] nums) {return h…

设计模式实战:数据分析系统的设计与实现

在数据驱动的业务环境中,数据分析系统是决策支持的核心工具。为了构建一个高效、灵活的数据分析系统,我们可以结合多种设计模式,如策略模式、装饰模式和模板方法模式。本文将详细介绍这些模式在数据分析系统中的应用,帮助开发者设计出可扩展且易于维护的系统。 系统设计流…

【TCP】核心机制:延时应答、捎带应答和面向字节流

文章目录 延时应答捎带应答面向字节流粘包问题方案一&#xff1a;指定分隔符方案二&#xff1a;指定数据的长度 TCP 报头首部长度保留&#xff08;6 位&#xff09;选项序号确认序号 延时应答 尽可能降低可靠传输带来的性能影响 提升性能>让滑动窗口变大 如果我们立即返回 …

05--kubernetes组件与安装

前言&#xff1a;终于写到kubernetes&#xff08;k8s&#xff09;&#xff0c;容器编排工具不止k8s一个&#xff0c;它的优势在于搭建集群&#xff0c;也是传统运维和云计算运维的第一道门槛&#xff0c;这里会列出两种安装方式&#xff0c;详细步骤会在下文列出&#xff0c;文…

docker部署LNMP

docker部署LNMP nginx 1.22 172.111.0.10 docker-nginx mysql 8.0.30 172.111.0.20 docker-mysql php 8.1.27 172.111.0.30 docker-php docker&#xff1a;单节点部署&#xff0c;只能在一台机器上部署&#xff0c;如果跨机器容器无法操作&#xff0c;无法通信。 做高可用…