Keepalived+Lvs DR模式搭建

server/2024/12/18 2:23:59/

负载均衡集群搭建

DR模式lvs搭建

一.节点规划

DR模式需要三台虚拟机,三台虚拟机只需要有“公网”IP,但在这种模式下又多了一个VIP。对应的机器和IP如下:

IP

主机名

节点

192.168.77.170

Dir

调度器dir

192.168.77.171

Rs1

真实服务器rs1

192.168.77.172

Rs2

真实服务器rs2

192.168.77.128

Vip地址

二.基础准备

1.修改主机名

调度器dir节点:

Hostnamectl set-hostname dir

bash

真实服务器rs1节点:

Hostnamectl set-hostname rs1

bash

真实服务器rs2节点:

Hostnamectl set-hostname rs2

bash

2.关闭防火墙和selinux服务

Systemctl stop firewalld

Systemctl disable firewalld

Setenforce 0

3.配置网卡

三个节点都需要配置

Vi /etc/sysconfig/network-scripts/ifcfg-ens33

Dir节点:

Rs1节点:

Rs2节点:

三.搭建dr模式lvs

1.把三台服务器上的iptables规则清空并保存

iptables -F;iptables -t nat -F;service iptables save

#若弹出错误需要安装iptables-services

Yum -y install iptables-services

2.在dir服务器上安装ipvsadm

安装ipvsadm服务

Yum -y install ipvsadm

启动ipvsadm服务

Systemctl start ipvsadm

#弹出错误需创建一个文件

Touch /etc/sysconfig/ipvsadm

3.在rs1、rs2节点上安装nginx

安装nginx服务

Yum -y install nginx

给rs1,rs2设置默认主页,方便区分

[root@rs1 ~]#echo “rs1” > /usr/share/nginx/html/index.html

[root@rs2 ~]#echo “rs2” > /usr/share/nginx/html/index.html

启动nginx服务

Systemctl start nginx

Systemctl enable nginx #设置自启动

4.在dir上编写shell脚本,内容如下:

[root@dir ~]# cat /usr/local/sbin/lvs_dr.sh

#! /bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

ipv=/usr/sbin/ipvsadm

vip=192.168.77.128

rs1=192.168.77.171

rs2=192.168.77.172

·  ipv:指向 ipvsadm 命令的路径,用于管理 LVS 配置。

·  vip:虚拟 IP 地址(VIP),即访问者访问的公共 IP 地址。

·  rs1rs2:代表后端的两台真实服务器(Real Server),它们负责处理客户端请求

#注意这里的网卡名字

ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip dev ens33:2

#清空当前的 IPVS 配置表,确保新的配置生效

$ipv -C

#添加一个监听在 VIP:80 端口上的虚拟服务,使用加权轮询调度算法

$ipv -A -t $vip:80 -s wrr

#将两台真实服务器添加到虚拟服务中,设置为 LVS 负载均衡调度

$ipv -a -t $vip:80 -r $rs1 -g -w 1

$ipv -a -t $vip:80 -r $rs2 -g -w 1

5.在两台rs上编写shell脚本,内容如下:

[root@rs1 ~]# cat /usr/local/sbin/lvs_rs.sh

#/bin/bash

vip=192.168.77.128

#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端

#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

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

6.分别在三台机器上执行各自脚本

[root@dir ~]# bash /usr/local/sbin/lvs_dr.sh

[root@rs1 ~]# bash /usr/local/sbin/lvs_rs.sh

[root@rs2 ~]# bash /usr/local/sbin/lvs_rs.sh

#可能会提示找不到命令

这种情况需要安装net-tools

Yum -y install net-tools

7.测试

可以先用ip a命令查看vip是否存在

Dir节点:

Rs1节点:

Rs2节点:

执行完三个脚本后,就可以测试了。但这次不可以直接在dir上用curl命令直接测试了,因为VIP在三台机器上都有设置。所以只能用浏览器来测试结果,如下图所示:

Keepalived+Lvs DR模式搭建

一.节点规划

LVS架构中,不管是NAT模式还是DR模式,当后端的RS宕掉时,调度器依然会把请求转发到宕掉的RS上,这样的结果并不是我们想要的。其实,keepalived就可以解决该问题,它不仅仅有高可用的功能,还有负载均衡的功能。在调度器上只要安装了keepalived,就不用再安装ipvsadm了,也不用去编写LVS相关的脚本了,也就是说keepalived已经嵌人了LVS功能。完整的keepalived+LVS架构需要有两台调度器实现高可用,提供调度服务的只需要一台,另外一台作为备用。

IP

主机名

节点

192.168.77.180

Master

Keepalived(调度器)主节点

192.168.77.181

Slave

Keepalived从节点

192.168.77.182

Web1

真实服务器rs1

192.168.77.183

Web2

真实服务器rs2

192.168.77.128

Vip地址

二.基础准备

1.修改主机名

master节点:

Hostnamectl set-hostname master

bash

slave节点:

Hostnamectl set-hostname slave

bash

Web1节点:

Hostnamectl set-hostname web1

Bash

Web2节点:

Hostnamectl set-hostname web2

bash

2.关闭防火墙和selinux服务

Systemctl stop firewalld

Systemctl disable firewalld

Setenforce 0

三.搭建keepalived+lvs DR模式

1.在主从节点上安装keepalived和ipvsadm

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

[root@master ~]# yum -y install ipvsadm

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

[root@slave ~]# yum -y install ipvsadm

2.修改主备服务器配置

服务器配置:

[root@master ~]# cat /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {

    state MASTER

    interface ens33

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.77.128

    }

}

virtual_server 192.168.77.128 80 {             #VIP

    delay_loop 3         #每隔10秒查询realserver状态

    lb_algo wlc                                 #lvs算法

    lb_kind DR                                 #DR模式

    persistence_timeout 60            #(同一IP的连接60秒内被分配到同一台realserver)

    protocol TCP        #用TCP协议检查realserver状态

    real_server 192.168.77.182 80 {          #真实服务器ip

        weight 100            #权重

        TCP_CHECK {

            connect_timeout 10             # 10秒无响应超时(连接超时时间)

            nb_get_retry 3                     #失败重试次数

            delay_before_retry 3     #失败重试的间隔时间

            connect_port 80           #连接的后端端口

        }

}

     real_server 192.168.77.183 80 {

        weight 100

        TCP_CHECK {

            connect_timeout 10

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

    }

}

服务器配置:

[root@slave ~]# cat /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {

    state BACKUP

    interface ens33

    virtual_router_id 51

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.77.128             

    }

}

virtual_server 192.168.77.128 80 {             #VIP

    delay_loop 3         #每隔10秒查询realserver状态

    lb_algo wlc                                 #lvs算法

    lb_kind DR                                 #DR模式

    persistence_timeout 60            #(同一IP的连接60秒内被分配到同一台realserver)

    protocol TCP        #用TCP协议检查realserver状态

    real_server 192.168.77.182 80 {          #真实服务器ip

        weight 100            #权重

        TCP_CHECK {

            connect_timeout 10             # 10秒无响应超时(连接超时时间)

            nb_get_retry 3                     #失败重试次数

            delay_before_retry 3     #失败重试的间隔时间

            connect_port 80           #连接的后端端口

        }

}

     real_server 192.168.77.183 80 {

        weight 100

        TCP_CHECK {

            connect_timeout 10

            nb_get_retry 3

            delay_before_retry 3

            connect_port 80

        }

    }

}

主备配置完成后启动keepalived服务,设置开机自启,查看下运行状态:

Systemctl start keepalived

Systemctl enable keepalived

Systemctl status keepalived

查看ip地址是否有vip

可见master机器上的ens33网卡上面已经出现了我们配置的虚拟ip:192.168.77.128,在slave机器上查看,并未发现虚拟ip说明配置正确,否则两台机器都有虚拟ip的话就出现了脑裂现象。

3.web服务器配置

Web1和web2节点安装nginx:

[root@web1 ~]# yum -y install nginx

[root@web2 ~]# yum -y install nginx

设置nginx网页访问界面,方便测试:

[root@web1 ~]# echo "rs1" > /usr/share/nginx/html/index.html

[root@web2 ~]# echo "rs2" > /usr/share/nginx/html/index.html

启动nginx服务并设置自启动:

[root@web1 ~]# systemctl start nginx

[root@web1 ~]# systemctl enable nginx

[root@web2 ~]# systemctl start nginx

[root@web2 ~]# systemctl enable nginx

查看是否有80端口

Netstat -ntpl

编写执行脚本:

Web1节点:

[root@web1 ~]# cat /usr/local/sbin/lvs_rs.sh

#/bin/bash

vip=192.168.77.128

#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端

#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

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

Web2节点:

[root@web2 ~]# cat /usr/local/sbin/lvs_rs.sh

#/bin/bash

vip=192.168.77.128

#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端

#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

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

编写完成后执行脚本:

[root@web1 ~]# bash /usr/local/sbin/lvs_rs.sh

[root@web2 ~]# bash /usr/local/sbin/lvs_rs.sh

查看IP地址:

可以看到vip地址已经绑定到网卡上。

4.测试
(1).观察vip地址在哪台机器上:

可以看到此时vip也就是我们的虚拟ip在master上

(2).客户端浏览器访问vip:

连续刷新几次:

由此可见负载均衡效果已经实现

(3).关闭master上的keepalived服务,再次访问vip

可见,再次访问vip仍能访问,负载均衡仍能实现

此时查看slave上的ip:

我们发现此时vip已经自动跳到了slave机器上

(4).关闭web1站点服务,再次访问VIP

web01站点关闭后,再次访问vip我们发现仍能访问到业务。说明我们的高可用集群试验成功。

到此实验完毕!

然而在真实工作场景下,这两台web服务器里面的资源是一致的,我们这里为了能够更好的展示lvs负载均衡的效果,就将两台服务器的内容进行了修改。


http://www.ppmy.cn/server/151055.html

相关文章

phpSpider如何处理网页内容的动态加载问题

phpSpider处理网页内容的动态加载问题,主要采取以下几种策略: 一、分析并直接请求API 现代网站中,很多动态加载的内容是通过后端的API接口以JSON或XML等格式返回的。phpSpider可以通过分析网页的请求,找到这些API接口的URL&…

解读CVPR2024-论文分享|RepViT: Revisiting Mobile CNN From ViT Perspective

论文标题 RepViT: Revisiting Mobile CNN From ViT Perspective 论文链接: https://arxiv.org/abs/2307.09283 论文作者 Ao Wang, Hui Chen, Zijia Lin, Jungong Han, Guiguang Ding 内容简介 这篇论文探讨了在资源受限的移动设备上,轻量级视觉变…

Unity NTPComponent应用, 实现一个无后端高效获取网络时间的组件

无后端高效获取网络时间的组件 废话不多说,直接上源码m_NowSerivceTime 一个基于你发行游戏地区的时间偏移, 比如北京时区就是 8, 巴西就是-3,美国就是-5using Newtonsoft.Json; 如果这里报错, 就说明项目没有 NewtonsoftJson插件…

D94【python 接口自动化学习】- pytest进阶之fixture用法

day94 pytest的fixture详解 学习日期:20241210 学习目标:pytest基础用法 -- pytest的fixture详解 学习笔记: fixture的介绍 fixture是 pytest 用于将测试前后进行预备、清理工作的代码处理机制。 fixture相对于setup和teardown来说有以…

.Net WebAPI(一)

文章目录 项目地址一、WebAPI基础1. 项目初始化1.1 创建简单的API1.1.1 get请求1.1.2 post请求1.1.3 put请求1.1.4 Delete请求 1.2 webapi的流程 2.Controllers2.1 创建一个shirts的Controller 3. Routing3.1 使用和创建MapControllers3.2 使用Routing的模板语言 4. Mould Bind…

【深度学习项目】目标检测之YOLO系列-V5(三)

介绍 YOLOv5 是由 Ultralytics 公司开发的一个目标检测模型,它不是由原始 YOLO 系列的作者 Joseph Redmon 提出的。尽管如此,YOLOv5 在社区中非常受欢迎,并且由于其易于使用、快速迭代和良好的性能而被广泛采用。 主要特点 模型大小与速度的…

使用 mkcert 工具自签发 https 证书并进行本地受信

介绍 mkcert 是一个用于创建本地受信任的 SSL/TLS 证书的简单工具,特别适合开发者在本地环境中使用。它解决了为开发和测试目的创建自签名证书时遇到的信任问题。以下是关于 mkcert 的详细介绍: 特点 易用性:只需一条命令即可生成证书&…

【数据结构——查找】二分查找(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二分查找的算法。 相关知识 为了完成本关任务,你需要掌握:1.根据键盘输入的一组有序数据建立顺序表,2.顺序表的输…