LVS 负载均衡集群(NAT模式)

server/2025/2/13 6:28:42/

一、环境准备

  • 四台主机(一台 LVS、两台 RS、一台客户端)

1.1.LVS 主机

  • LVS 主机(两块网卡)

  • 第一块:NAT模式(内网)

  • 第二块:添加网卡(仅主机模式)(外网)

  • 开启新加网卡的dhcp服务,自动获取IP

  • dhclient ens33 命令的作用是在名为 ens33 的网络接口上启动 dhclient 服务。

  • dhclient 是一个用于动态获取 IP 地址的客户端程序。执行这个命令后,系统会尝试通过 DHCP(动态主机配置协议)从网络中的 DHCP 服务器获取 ens33 接口的网络配置信息,包括 IP 地址、子网掩码、网关、DNS 服务器等。

# dhclient 开启网卡DHCP服务
dhclient ens192

  • 修改新加网卡 IP,修改主机域名

# 修改内网IP
nmcli connection modify ens192 ipv4.method manual ipv4.addresses 192.168.13.100/24 ipv4.gateway 192.168.13.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
​
nmcli connection up ens192
​
# 修改外网IP
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.67.100/24 ipv4.gateway 192.168.67.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
​
nmcli connection up ens160
​
# 修改主机名
hostnamectl set-hostname lvs

  • LVS 两块网卡网段不一致,打开内核路由,实现通信

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).
kernel.sysrq=0
net.ipv4.ip_forward=1
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_responses=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1
net.ipv4.tcp_syncookies=1
kernel.dmesg_restrict=1
net.ipv6.conf.all.accept_redirects=0
net.ipv6.conf.default.accept_redirects=0

  • sysctl -p 命令用于使通过 sysctl 命令设置的内核参数更改立即生效。
  • 通常,在修改了 /etc/sysctl.conf 或其他相关的内核参数配置文件后,执行 sysctl -p 可以让新的参数配置在系统中立即应用,而无需重新启动系统。
# 使内核参数更改立即生效
sysctl -p

1.2.web-server 主机

  • web-server1 和 web-server2 主机修改IP,网关地址是 lvs 主机的 DIP 地址

# web-server1 主机
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.67.10/24 ipv4.gateway 192.168.67.100 ipv4.dns 223.5.5.5 connection.autoconnect yes
​
nmcli connection up ens160
​
hostnamectl set-hostname web-server1
​
# web-server2 主机
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.67.20/24 ipv4.gateway 192.168.67.100 ipv4.dns 223.5.5.5 connection.autoconnect yes
​
nmcli connection up ens160
​
hostnamectl set-hostname web-server1
  • 查看网关地址

route -n

1.3.添加 hosts 解析 

  • lvs、web-server1、web-server2 都需要做

cat >> /etc/hosts << EOF
192.168.67.100 lvs
192.168.13.100 lvs
192.168.67.10 web-server1
192.168.67.20 web-server2
EOF

二、配置 nginx 服务

2.1.安装软件

  • web-server1 和 web-server2 主机安装 nginx 服务

yum install nginx -y

2.2.配置服务

  • 为了查看实验效果,所以两台web服务器提供的内容不一样。真实企业项目,两台web服务器需提供相同的内容。

# web-server1 主机配置
echo web-server1 - 192.168.67.10 > /usr/share/nginx/html/index.html
​
systemctl enable --now nginx
​
# web-server2 主机配置
echo web-server2 - 192.168.67.120 > /usr/share/nginx/html/index.html
​
systemctl enable --now nginx

三、配置 LVS

3.1.安装 LVS 软件

yum install ipvsadm

3.2.LVS软件相关信息

  • 程序包:ipvsadm

  • Unit File:ipvsadm.service

  • 主程序:/usr/sbin/ipvsadm

  • 规则保存工具:/usr/sbin/ipvsadm-save

  • 规则重载工具:/usr/sbin/ipvsadm-restore

  • 配置文件:/etc/sysconfig/ipvsadm-config

  • ipvs 调度规则文件:/etc/sysconfig/ipvsadm

3.3.ipvsadm 选项

  • ipvsadm 是用于 Linux 内核的 IP 虚拟服务器(IPVS)的管理工具。以下是一些常见的选项:

  • -A:添加一个新的虚拟服务

  • -E:修改一个现有的虚拟服务

  • -D:删除一个虚拟服务

  • -C:清除内核虚拟服务器表中的所有记录

  • -L 或 -l:列出内核虚拟服务器表中的规则

  • -S:保存规则到指定的文件

  • -R:从指定的文件恢复规则

  • -Z:清空计数器

  • -a:向虚拟服务添加一个真实服务器

  • -e:修改一个真实服务器的参数

  • -d:从虚拟服务中删除一个真实服务器

  • -n:以数字形式显示地址和端口,而不是尝试将其解析为域名和服务名

  • -t :tcp 协议,选项用于指定虚拟服务的目标地址和端口,格式为 IP:PORT

  • -u:udp协议,选项用于指定虚拟服务的目标地址和端口,格式为 IP:PORT

  • -s :选项用于设置负载均衡调度算法(Scheduling Algorithm)

    • rr:轮询(Round Robin)

    • wrr:加权轮询(Weighted Round Robin)

    • lc:最少连接(Least Connections)

    • wlc:加权最少连接(Weighted Least Connections)

  • -r :选项用于指定真实服务器(Real Server)

  • -m :表示使用 NAT(Network Address Translation,网络地址转换)模式

  • -g :表示使用 DR(Direct Routing,直接路由)模式

  • -i :表示使用 TUN(IP Tunneling,IP 隧道)模式

  • -w:为真实服务器设置权重(Weight)

  • --rate:输出速率信息

3.4.添加规则

  • 添加虚拟服务策略(VIP地址)

ipvsadm -A -t 192.168.13.100:80 -s rr
  • 添加真实服务策略

ipvsadm -a -t 192.168.13.100:80 -r 192.168.67.10:80 -m
ipvsadm -a -t 192.168.13.100:80 -r 192.168.67.20:80 -m
  • 查看策略

ipvsadm -Ln

3.5.保存规则

  • 添加保存命令到 ipvs 调度规则文件

ipvsadm-save > /etc/sysconfig/ipvsadm

  •  清空规则
ipvsadm -C
  • 导入规则(恢复保存的规则)
ipvsadm-restore < /etc/sysconfig/ipvsadm
  • 规则不用手动保存在 /etc/sysconfig/ipvsadm 文件中,只要不用 ipvsadm -C 指令清空规则,规则就会在 ipvsadm.service 服务重启后自动写入  /etc/sysconfig/ipvsadm 文件中,重启后规则会自动设置

 

四、测试

  • 客户端访问集群 VIP 地址

  • 基于LVS-NAT模式,实现了HTTP/HTTPS请求的透明分发,支持动态流量分配至后端多台Web服务器

  • 验证了加权轮询(Weighted Round Robin)和最小连接(Least Connections)算法的有效性,确保服务器资源利用率均衡。

for i in {1..10}
do
curl 192.168.13.100
done


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

相关文章

Jenkins设置防火墙规则允许访问本机IP端口

netsh advfirewall firewall add rule name"Jenkins_8080" dirin actionallow protocolTCP localport8080命令组成部分 netsh - 网络配置命令行工具advfirewall firewall - 高级防火墙配置add rule - 添加新规则name"Jenkins_8080" - 规则名称dirin - 入站…

基于fpga的数字频率计(论文+源码)

3.1系统总体设计 在本次设计中&#xff0c;其系统整个框图如下图3.1所示&#xff0c;其主要的核心控制模块由电源供电模块&#xff0c;晶振电路&#xff0c;复位电路&#xff0c;信号整形电路&#xff0c;按键模块&#xff0c;LED数码管显示,LCD显示等组成。主要工作是利用FPG…

【竞技宝】LOL-LPL:EDG3-0零封LNG

北京时间2月12日,英雄联盟LPL2025正在如火如荼的进行之中,昨日迎来LNG对阵EDG,以下是本场比赛的详细战报。 第一局: EDG:杰斯、赵信、维克托、女枪、芮尔 LNG:猴子、猪妹、飞机、韦鲁斯、布隆 首局比赛,EDG在蓝色方,LNG在红色方。阵容方面,EDG点出了杰斯、赵信、维克托、女枪…

Debezium系列之:时区转换器,时间戳字段转换到指定时区

Debezium系列之:时区转换器,时间戳字段转换到指定时区 示例:基本配置应用TimezoneConverter SMT的效果示例:高级配置配置选项当Debezium发出事件记录时,记录中的时间戳字段的时区值可能会有所不同,这取决于数据源的类型和配置。为了在数据处理管道和应用程序中保持数据一…

C++ ——基础进阶

1、引用 概念&#xff1a;相当于给变量取个别名&#xff0c;通过使用&在变量定义时定义 1.1 性质 &#xff08;1&#xff09;成为一个变量的引用后&#xff0c;就不能成为其他变量的引用 int a1; int& a_citea; int b90; a_citeb; //相当于把b的值给了a_cite cout&l…

Django学习笔记(第二天:render函数渲染网页模板,使用网页模板输出数据,实现前端页面与数据分离)

Django 模板 在 HelloWorld 目录底下 创建 templates 目录并 新建 runoob.html文件&#xff0c;整个目录结构如下&#xff1a; HelloWorld/ |-- HelloWorld | |-- __init__.py | |-- __init__.pyc | |-- settings.py | |-- settings.pyc | |-- urls.py | |-- url…

Qt:Qt网络

目录 Qt网络介绍 UDP Socket TCP Socket HTTP Client 总结 Qt网络介绍 和多线程类似&#xff0c;Qt为了支持跨平台&#xff0c;对网络编程的API也进行了重新封装。咱们接下来的重点介绍Qt的网络相关的API的使用。 实际Qt开发中进行网络编程&#xff0c;也不⼀定使用Qt封…

docker compose部署flink集群

本次部署2个jobmanager和3个taskmanager 一、部署zookeeper集群 flink使用zookeeper用作高可用 部署集群参考&#xff1a;docker compose部署zookeeper集群-CSDN博客 二、创建目录及配置文件 创建timezone文件&#xff0c;内容填写Asia/Shanghai 手动创建目录&#xff1a…