当前位置: 首页 > ds >正文

完整实验命令解析:从集群搭建到负载均衡配置

  • 文档按 “集群初始化→网络配置→服务部署→负载均衡” 流程

一、集群基础配置(初始化节点)

#1. 配置 /etc/hosts(主机名映射)[root@centos7 ~ 10:50:43]# vim /etc/hosts[root@centos7 ~ 10:56:41]# cat /etc/hosts127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4::1         localhost localhost.localdomain localhost6 localhost6.localdomain6​########### cluster ################10.1.8.10   lb.lyk.cloud        lb10.1.8.11   web1.lyk.cloud  web110.1.8.12   web2.lyk.cloud  web210.1.8.13   web3.lyk.cloud  web310.1.8.20   router.lyk.cloud    router10.1.8.21   client1.lyk.cloud   client110.1.1.21   client2.lyk.cloud   client2​​#2. 上传并优化 sethost 脚本(批量配置节点)[root@centos7 bin 11:24:42]# cd /usr/local/bin/[root@centos7 bin 11:24:53]# rz -Erz waiting to receive.[root@centos7 bin 11:24:58]# mv sethost_for_exam_node.sh sethost[root@centos7 bin 11:25:09]# vim sethost ​#3. sethost 脚本内容解析(批量配置的核心),脚本里的每个函数和命令都是为了 “自动给节点配 IP、改主机名”:[root@centos7 bin 11:29:46]# cat sethost #!/bin/bash​# 以 root 身份运行[ $UID -ne 0 ] && echo 'Please run as root.' && exit 1 ​# 指定接口名称DNSinterface=ens33dns=223.5.5.5​# 指定域名称domain=lyk.cloud​# 脚本使用说明usage (){echo "Usage: $0 10-14 20 21"exit 1}​# 设置 IP 地址function set_ip () {if [ $# -eq 0 ]; thenusage   elsenmcli connection modify ${interface} ipv4.method manual ipv4.addresses 10.1.8.$1/24 ipv4.gateway 10.1.8.2 ipv4.dns $dns nmcli connection up ${interface} &>/dev/nullfi}​​# 设置主机名function set_hostname () {# 获取主机名case $1 in10)HOSTNAME=lb.$domain;;1[1-3])HOSTNAME=web$[ $1 - 10 ].$domain;;20)HOSTNAME=router.$domain;;21)HOSTNAME=client1.$domain;;*)usage;;esac# 设置主机名hostnamectl set-hostname $HOSTNAME}​# 定义 main 函数调用功能函数function main() {set_ip $1​set_hostname $1​# 显示修改结果bash -c 'clear;hostname;echo;ip -br a;echo'​# 关机打快照while truedoecho -ne "Press the \033[1;31mEnter\033[0;39m key, and the system will shut down in 5 seconds.";readecho -e "Press \033[1;35mCTRL+C\033[0;39m to cancel the shutdown."for i in {5..1}doecho "The system will shut down in $i seconds."sleep 1doneecho "Shutdown system Now." && init 0done }​# 执行 main 函数main $*​[root@centos7 bin 11:29:57]# chmod +x sethost ​#4. 用 sethost 批量初始化节点​#进入虚拟机执行,sethost 10,看能不能创建地址  #init 0 重启 #保存快照#克隆,回车,回车 分别命名创建lb web1 web2 web3 client1 client2 router 虚拟机 ​

二、特殊节点网络配置(打通跨网段通信)

三台主机特殊配置

  • LB 和 router添加vm1(仅主机)

  • client2修改vim仅主机

特殊三台独立设置

#1. 给 lb 配置双网卡(连接两个网段)[root@lb ~ 11:53:21]# nmcli cNAME        UUID                                  TYPE      DEVICE 有线连接 1  83d688eb-f1f8-39fc-811f-f0ab0cec674e  ethernet  ens36  ens33       555eece5-af4c-45ae-bab9-c07e68d0e649  ethernet  ens33  ​[root@lb ~ 11:53:31]# nmcli connection modify 83d688eb-f1f8-39fc-811f-f0ab0cec674e connection.id ens36 ipv4.method manual ipv4.addresses 10.1.1.10/24​[root@lb ~ 12:25:12]# nmcli connection up ens36连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/21)​[root@lb ~ 12:25:27]# ip -br alo               UNKNOWN        127.0.0.1/8 ::1/128 ens33            UP             10.1.8.10/24 fe80::20c:29ff:fe55:d621/64 ens36            UP             10.1.1.10/24 fe80::74d0:4a10:3b40:b67b/64 ​[root@lb ~ 12:25:36]# init 0​
  • 核心目的:lb 需要同时连接两个网段(10.1.8.0/24 共享网、10.1.1.0/24 仅主机网),所以添加第二块网卡 ens36,配 10.1.1.10,实现跨网段访问。

  • sethost 批量初始化节点

#web虚拟机 执行web1 web2 web3分别进入虚拟机界面 分别执行sethost 11 sethost 12 sethost 13​# 1. 给web1-3配置:分别进入3台web虚拟机,执行​sethost 11  # web1→IP=10.1.8.11,主机名=web1.lyk.cloudsethost 12  # web2→IP=10.1.8.12,主机名=web2.lyk.cloudsethost 13  # web3→IP=10.1.8.13,主机名=web3.lyk.cloud# 3. 给client1配置:进入client1虚拟机,执行sethost 21  # client1→IP=10.1.8.21,主机名=client1.lyk.cloud​
#2. 给 router 配置双网卡(路由节点核心)​#router 虚拟机 执行nmcli connection modify   .....(ens36的UUID)  connection.id ens36 ipv4.method manual ipv4.addresses 10.1.1.20/24​nmcli connection up ens36​ip -br a​init 0​-- 作用:router 是两个网段的 “桥梁”,ens33 连 8 段(10.1.8.20),ens36 连 1 段(10.1.1.20),后续开启路由功能后,能让 8 段和 1 段互通。
#client1 虚拟机 执行sethost 21​#3. 给 client2 配置 1 段 IP(仅主机网客户端)​​#client2 虚拟机 执行nmcli cnmcli connection modify ens33 ipv4.addresses 10.1.1.21/24hostnamectl set-hostname client2.lyk.cloudbashhostnameip -br ainit 0​

执行

#给除了router的虚拟机都打快照

####

#4. 配置 router 路由功能(打通跨网段)​#Xshell执行[C:\~]$ ssh root@10.1.8.20#开启路由[root@router ~ 12:58:24]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf[root@router ~ 12:59:13]# sysctl -pnet.ipv4.ip_forward = 1​#设置防火墙[root@router ~ 13:00:01]# firewall-cmd --add-masquerade --permanent success​[root@router ~ 12:59:15]# systemctl enable firewalld.service --now​[root@router ~ 12:59:32]# firewall-cmd --set-default-zone=trusted success​​[root@router ~ 13:01:17]# init 0​#返回虚拟机 **保存router快照**​关键作用:没有这步,1 段的 client2 无法访问 8 段的 web 节点;开启后,router 能转发两个网段的数据包,实现跨网段通信。
#5. 配置 client2 网关(指向 router)​[C:\~]$ ssh root@10.1.1.21​[root@client2 ~ 13:04:09]# ip rdefault via 10.1.8.2 dev ens33 proto static metric 100 10.1.1.0/24 dev ens33 proto kernel scope link src 10.1.1.21 metric 100 10.1.8.2 dev ens33 proto static scope link metric 100 [root@client2 ~ 13:04:31]# nmcli connection modify ens33 ipv4.gateway 10.1.1.20[root@client2 ~ 13:05:05]# nmcli connection up ens33 连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)​[root@client2 ~ 13:05:13]# ip rdefault via 10.1.1.20 dev ens33 proto static metric 100 10.1.1.0/24 dev ens33 proto kernel scope link src 10.1.1.21 metric 100​[root@client2 ~ 13:05:34]# init 0​#返回虚拟机 **保存client2快照**

三、部署 Web 服务(集群业务节点)

#1. 在 web1-3 上安装 Nginx 并配置首页​[root@web1-3 ~]#​# 部署 webyum install -y nginxecho Welcome to $(hostname) > /usr/share/nginx/html/index.html systemctl enable nginx.service --now​--作用:让 web1-3 成为 Web 服务器,各自的首页显示自己的主机名,后续测试负载均衡时能区分 “请求被分发到哪台 web​#2. 测试 Web 服务是否正常[root@client1 ~ 15:23:23]# curl 10.1.8.11Welcome to web1.lyk.cloud[root@client1 ~ 15:24:49]# curl 10.1.8.12Welcome to web2.lyk.cloud[root@client1 ~ 15:24:51]# curl 10.1.8.13Welcome to web3.lyk.cloud​​​#3. 给 web1-3 配置虚拟主机(多端口服务)[root@web1-3 ~]# cat > /etc/nginx/conf.d/vhost-test.conf <<'EOF'server {listen       81;root         /test;}EOF[root@web1-3 ~]# systemctl restart nginx​# 准备测试文件[root@web1-3 ~]# mkdir /test[root@web1-3 ~]# echo hello txt from $(hostname -s) > /test/index.txt[root@web1-3 ~]# echo hello html from $(hostname -s) > /test/index.html​#4. 测试虚拟主机是否正常[root@client1 ~ 15:24:54]# curl http://web1:81/hello html from web1[root@client1 ~ 15:27:29]# curl http://web2:81/hello html from web2[root@client1 ~ 15:27:34]# curl http://web3:81/hello html from web3​

四、配置 HAProxy 负载均衡(TCP+HTTP 模式)

#1. 安装并备份 HAProxy 配置[root@lb ~ 15:32:55]# yum install -y haproxy​[root@lb ~ 15:33:43]# cp /etc/haproxy/haproxy.cfg{,.ori}​--作用:HAProxy 是专业的负载均衡工具,能把客户端请求分发到多台后端服务器,减轻单台压力。​​#2. 配置 HAProxy 基础 HTTP 负载均衡(80 端口)[root@lb ~ 15:36:27]# vim /etc/haproxy/haproxy.cfg#在最后添加代码frontend front_webbind *:80use_backend  back_web​backend back_webbalance     roundrobinserver web1 10.1.8.11:80 checkserver web2 10.1.8.12:80 checkserver web3 10.1.8.13:80 check​​[root@lb ~ 15:36:27]# systemctl start haproxy​--核心目的:客户端访问 lb 的 80 端口时,HAProxy 会按 “轮询” 规则把请求分给 web1-3 的 80 端口,实现 HTTP 请求的负载均衡。​#3. 测试 HTTP 负载均衡(client1-2 验证)​#client1测试  (10.1.8.21)[root@client1 ~ 15:27:37]# curl http://lb.lyk.cloud/Welcome to web1.lyk.cloud[root@client1 ~ 15:37:56]# curl http://lb.lyk.cloud/Welcome to web2.lyk.cloud[root@client1 ~ 15:38:04]# curl http://lb.lyk.cloud/Welcome to web3.lyk.cloud​#client2测试  (10.1.1.21)[root@client2 ~ 15:38:58]# curl http://lb.lyk.cloud/Welcome to web1.lyk.cloud[root@client2 ~ 15:38:59]# curl http://lb.lyk.cloud/Welcome to web2.lyk.cloud[root@client2 ~ 15:39:03]# curl http://lb.lyk.cloud/Welcome to web3.lyk.cloud​--作用:验证负载均衡是否生效 —— 单次访问能轮询到不同 web 节点,批量访问时每台节点的请求数基本相等(30 次),说明 “轮询算法” 正常。

for循环测试

[root@client2 ~ 15:39:03]# for i in {1..90}
> do
> curl http://lb.lyk.cloud/
> doneWelcome to web1.lyk.cloud
Welcome to web2.lyk.cloud
Welcome to web3.lyk.cloud
Welcome to web1.lyk.cloud
Welcome to web2.lyk.cloud
Welcome to web3.lyk.cloud
Welcome to web1.lyk.cloud
Welcome to web2.lyk.cloud
Welcome to web3.lyk.cloud
......#sort输出结果进行排序
[root@client2 ~ 15:42:35]# for i in {1..90}; do curl http://lb.lyk.cloud/; done | sort
Welcome to web1.lyk.cloud
....       web1...
Welcome to web2.lyk.cloud
....       web2...
Welcome to web3.lyk.cloud
....       web3...#-s 是 curl 的选项,表示 “静默模式”(不显示进度条等冗余信息,只输出响应内容)
[root@client2 ~ 15:42:35]# for i in {1..90}; do curl -s http://lb.lyk.cloud/; done | sort#uniq -c 统计每种相同内容的出现次数,并在内容前显示计数
[root@client2 ~ 15:44:16]# for i in {1..90}; do curl -s http://lb.lyk.cloud/; done | sort | uniq -c30 Welcome to web1.lyk.cloud30 Welcome to web2.lyk.cloud30 Welcome to web3.lyk.cloud--关键:
--  uniq -c 必须配合 sort 使用才有效(因为它只统计相邻的重复行),通过 sort 先将相同内容排在一起,才能准确统计总次数。
[root@lb ~ 15:36:27]# systemctl start haproxy#4. 配置 HAProxy URL 路由(按文件类型转发)
[root@lb ~ 15:37:33]# vim /etc/haproxy/haproxy.cfg    # 重新编辑配置
#把刚添加的删除#echo添加
[root@lb ~ 15:59:15]# echo '
> ########### web 代理 ###########
> frontend front_web
>     bind *:80
>     default_backend  back_web
>     acl test url_reg -i \.txt$
>     use_backend test if test
> 
> backend back_web
>     balance     roundrobin
>     server web1 10.1.8.11:80 check
>     server web2 10.1.8.12:80 check
>     server web3 10.1.8.13:80 check
> 
> backend test								# 处理.txt请求,转发到web的81端口
>     balance    roundrobin
>     server test1 10.1.8.11:81 check
>     server test2 10.1.8.12:81 check
>     server test3 10.1.8.13:81 check
> ' >> /etc/haproxy/haproxy.cfg[root@lb ~ 15:59:49]# systemctl enable haproxy.service --now

测试

[root@client1 ~ 15:38:05]# for n in {1..90}; do curl http://10.1.8.10 -s; done | sort |uniq -c30 Welcome to web1.lyk.cloud30 Welcome to web2.lyk.cloud30 Welcome to web3.lyk.cloud[root@client2 ~ 15:58:25]# for n in {1..90}; do curl http://10.1.1.10 -s; done | sort |uniq -c30 Welcome to web1.lyk.cloud30 Welcome to web2.lyk.cloud30 Welcome to web3.lyk.cloud[root@client1 ~ 16:00:12]# for n in {1..90}; do curl http://10.1.8.10/index.txt -s; done | sort |uniq -c
......

tcp 模式

#5. 配置 HAProxy TCP 模式(SSH 负载均衡)
#之前环境没变
[root@lb ~ 16:12:58]# echo '
> ########### ssh 代理 ###########
> listen ssh
>   mode tcp
>   bind *:1022
>   balance  roundrobin
>   server web1 10.1.8.11:22   check
>   server web2 10.1.8.12:22   check
>   server web3 10.1.8.13:22   check
> ' >> /etc/haproxy/haproxy.cfg[root@lb ~ 16:15:14]# systemctl restart haproxy.service--作用:客户端通过ssh root@lb -p 1022登录时,HAProxy 会轮询把 SSH 连接转发到 web1-3 的 22 端口,不用记多台 web 的 IP,简化 SSH 登录[root@client1 ~ 16:16:41]# for i in {1..90}; do curl -s http://lb.lyk.cloud/index.txt; done | sort | uniq -c30 hello txt from web130 hello txt from web230 hello txt from web3[root@client2 ~ 16:00:21]# for i in {1..90}; do curl -s http://lb.lyk.cloud/index.txt; done | sort | uniq -c30 hello txt from web130 hello txt from web230 hello txt from web3#6. 测试 SSH 负载均衡,每次轮流显示
[root@client2 ~ 16:21:24]# ssh root@lb -p 1022 hostname
web1.lyk.cloud
[root@client2 ~ 16:21:37]# ssh root@lb -p 1022 hostname
web2.lyk.cloud
[root@client2 ~ 16:21:38]# ssh root@lb -p 1022 hostname
web3.lyk.cloud#每次轮流登录web1 web2 web3
[root@client2 ~ 16:18:40]# ssh root@lb -p 1022
Warning: Permanently added '[lb]:1022,[10.1.8.10]:1022' (ECDSA) to the list of known hosts.
Last login: Fri Aug 22 15:09:29 2025 from 10.1.8.1
[root@web1 ~ 16:19:03]# ssh root@lb -p 1022
Warning: Permanently added '[lb]:1022,[10.1.8.10]:1022' (ECDSA) to the list of known hosts.
Last login: Fri Aug 22 15:13:13 2025 from 10.1.8.1
[root@web2 ~ 16:19:24]# ssh root@lb -p 1022
Warning: Permanently added '[lb]:1022,[10.1.8.10]:1022' (ECDSA) to the list of known hosts.
Last login: Fri Aug 22 15:13:22 2025 from 10.1.8.1
[root@web3 ~ 16:19:42]# 

五、用 Nginx 实现负载均衡(替代 HAProxy)

#1. 切换到 Nginx 负载均衡(停止 HAProxy)
[root@lb ~ 16:45:50]# systemctl disable haproxy.service --now
[root@lb ~ 16:45:50]# yum install -y nginx--作用:除了 HAProxy,Nginx 也能实现负载均衡,这里测试用 Nginx 替代 HAProxy 的 HTTP 负载功能#2. 配置 Nginx 负载均衡(upstream 模块)
[root@lb ~ 16:45:50]# vim /etc/nginx/conf.d/proxy.conf
[root@lb ~ 16:52:19]# cat /etc/nginx/conf.d/proxy.conf
upstream web {server 10.1.8.11:80;server 10.1.8.12:80;server 10.1.8.13:80;
}
server {listen       80;server_name  www.lyk.cloud;root         /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location / {# 添加如下语句proxy_pass http://web;}
}[root@lb ~ 16:52:26]# systemctl restart nginx.service 

测试

#3. 测试 Nginx 负载均衡(client1-2 验证)[root@client1 ~ 16:53:21]# curl http://www.lyk.cloud
Welcome to web1.lyk.cloud
[root@client1 ~ 16:54:06]# curl http://www.lyk.cloud
Welcome to web2.lyk.cloud
[root@client1 ~ 16:54:08]# curl http://www.lyk.cloud
Welcome to web3.lyk.cloud[root@client1 ~ 16:54:09]# for i in {1..90};do curl -s 10.1.8.10 ;done|sort|uniq -c30 Welcome to web1.lyk.cloud30 Welcome to web2.lyk.cloud30 Welcome to web3.lyk.cloud[root@client2 ~ 16:22:39]# echo "10.1.8.10 www.lyk.cloud www" >> /etc/hosts
[root@client2 ~ 16:54:33]# curl http://www.lyk.cloud
Welcome to web1.lyk.cloud
[root@client2 ~ 16:54:43]# curl http://www.lyk.cloud
Welcome to web2.lyk.cloud
[root@client2 ~ 16:54:44]# curl http://www.lyk.cloud
Welcome to web3.lyk.cloud[root@client2 ~ 16:54:45]# for i in {1..90};do curl -s 10.1.8.10 ;done|sort|uniq -c30 Welcome to web1.lyk.cloud30 Welcome to web2.lyk.cloud30 Welcome to web3.lyk.cloud

总结:整个实验的核心逻辑

  1. 搭集群:用sethost脚本批量初始化节点,配置主机名和 IP,统一集群标识。

  2. 通网络:给 lb 和 router 配双网卡,开启 router 的路由功能,让 8 段和 1 段能跨网段通信。

  3. 布服务:在 web1-3 上部署 Nginx,提供 Web 服务(80 端口首页 + 81 端口测试文件)。

  4. 做负载:先用 HAProxy 实现 “HTTP 负载(80 端口)+URL 路由(.txt 转 81 端口)+SSH 负载(1022 端口)”,再用 Nginx 实现 HTTP 负载,验证不同工具的负载均衡能力。

http://www.xdnf.cn/news/18709.html

相关文章:

  • Java:类及方法常见规约
  • Unity中删除不及时的问题
  • 牛客面经2 京东社招-002
  • PyTorch框架之图像识别模型与训练策略
  • 25.深入对象
  • 寻找AI——高保真还原设计图生成App页面
  • 华为/思科/H3C/锐捷操作系统操作指南
  • 鸿蒙应用网络开发实战:HTTP、WebSocket、文件下载与网络检测全攻略
  • 微信小程序和uni-app面试问题总结
  • 网络模型深度解析:CNI、Pod通信与NetworkPolicy
  • Spring Boot 实时广播消息
  • Java集合(Collection、Map、转换)
  • git实战(7)git常用命令速查表
  • GitHub发布革命性工具:GitHub Spark,用自然语言打造全栈智能应用
  • 商品与股指类ETF期权买卖五档Tick分钟级历史行情数据分析
  • Node.js 和 Express 面试问题总结
  • 目标跟踪 YOLO11 单目标跟踪
  • Maven仓库与Maven私服架构
  • Spring Boot 实现 POJO 级联封装复杂属性
  • React Hooks UseRef的用法
  • 高速CANFD收发器ASM1042在割草机器人轮毂电机通信系统中的适配性研究
  • 终结系统裸奔:Debian老旧版本安全加固终极指南
  • 梯度下降(线性回归为例)
  • 总结:Maven多仓库多镜像源配置
  • 【KO】前端面试五
  • MySQL存储过程详解
  • 【8位数取中间4位数】2022-10-23
  • 利用Prometheus监控服务器相关数据
  • 本地文件夹即时变身 Web 服务器(文件服务器)
  • 01数据结构-归并排序和计数排序