DNS负载均衡入门教程:从零开始,10分钟搞定流量分发
本文介绍了一种无需硬件负载均衡器,仅通过修改DNS记录实现网站流量分发的方法。核心步骤包括:1)准备域名和至少2台服务器;2)在DNS解析中添加多条A记录指向不同服务器IP;3)设置适当的TTL值(推荐600秒)。通过DNS轮询机制,用户请求会自动分配到不同服务器上。文章还解释了加权轮询、TTL缓存机制等进阶用法,并提供了验证方法和常见问题解决方案。这种方案适合入门级负载均衡需求,成本低且易于实施
目标:不需要任何负载均衡硬件,只改几条DNS记录,就能让你的网站扛住更多访问。
第0步:你需要先懂这3个概念
在动手之前,只需理解3个东西:
| 概念 | 大白话解释 | 举个例子 |
|---|---|---|
| 域名 | 网站的名字,比如 www.myapp.com |
你的门牌号 |
| IP地址 | 服务器的真实地址,比如 1.1.1.1 |
你家的实际位置 |
| DNS解析 | 把域名翻译成IP的过程 | 查地图,找到你家在哪 |
DNS负载均衡的核心就一句话:
同一个域名,对应多个IP地址。DNS在翻译时,轮流返回不同的IP,把用户分散到不同服务器上。
第1步:准备工作
你需要:
- ✅ 一个域名(已购买,比如
myapp.com) - ✅ 至少2台服务器(可以是云服务器、VPS,哪怕是同一台机器的不同端口也行,但建议真实的2台)
- ✅ 能修改DNS记录的权限(域名管理后台)
假设你有2台服务器:
服务器A:1.1.1.1
服务器B:2.2.2.2
第2步:修改DNS记录(核心操作)
以阿里云云解析DNS为例(其他平台操作类似):
操作步骤:
- 登录 阿里云控制台 → 进入云解析DNS
- 找到你的域名
myapp.com,点击解析设置 - 点击添加记录,填写:
第一条记录(服务器A):
| 字段 | 值 |
|---|---|
| 记录类型 | A |
| 主机记录 | www |
| 记录值 | 1.1.1.1 |
| TTL | 600(10分钟,后面会解释为什么) |
第二条记录(服务器B):
| 字段 | 值 |
|---|---|
| 记录类型 | A |
| 主机记录 | www |
| 记录值 | 2.2.2.2 |
| TTL | 600 |
- 点击确认,保存。
就这么简单。你已经完成了DNS负载均衡的配置。
第3步:理解刚才做了什么
现在你的DNS记录长这样:
www.myapp.com → 1.1.1.1
www.myapp.com → 2.2.2.2
当用户在浏览器输入 www.myapp.com 时:
用户 → DNS服务器 → 收到两个IP → 轮流返回一个 → 用户连接对应服务器
↓
第一次 → 返回 1.1.1.1(服务器A)
第二次 → 返回 2.2.2.2(服务器B)
第三次 → 返回 1.1.1.1(服务器A)
... 循环往复
这就是最基础的轮询(Round Robin)策略。
第4步:理解TTL——最容易踩的坑
TTL(Time To Live)决定DNS记录在别人电脑里缓存多久。
| TTL值 | 含义 | 影响 |
|---|---|---|
| 3600(1小时) | 缓存1小时 | 省DNS查询,但切换慢 |
| 600(10分钟) | 缓存10分钟 | 平衡,推荐入门使用 |
| 60(1分钟) | 缓存1分钟 | 切换快,但DNS查询多,增加延迟 |
🚨 重要:
如果你把服务器A关掉了,但TTL是1小时,那么在接下来1小时内,仍有用户会被导向已关停的服务器A。
入门建议:TTL设为60~600秒之间。
第5步:验证是否生效
打开终端(Windows用CMD或PowerShell,Mac用Terminal),输入:
nslookup www.myapp.com
多次执行,观察返回的IP是否在变化:
第1次:1.1.1.1
第2次:2.2.2.2
第3次:1.1.1.1
第4次:2.2.2.2
✅ 如果IP在交替变化,恭喜你,DNS负载均衡已经生效了。
第6步:进阶——加权轮询(让强服务器多干活)
如果服务器A比服务器B强2倍,你可以设置权重:
| 记录类型 | 主机记录 | 记录值 | 权重 |
|---|---|---|---|
| A | www | 1.1.1.1 | 2 |
| A | www | 2.2.2.2 | 1 |
效果:每3个用户中,2个去服务器A,1个去服务器B。
⚠️ 注意:不是所有DNS服务商都支持权重。阿里云、Cloudflare支持,但部分免费DNS不支持。
第7步:常见问题排查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 多次nslookup返回同一个IP | 本地DNS缓存了结果 | 换个DNS查询:nslookup www.myapp.com 8.8.8.8 |
| 改了DNS记录但没生效 | TTL还没过期 | 等待TTL时间,或把TTL改小 |
| 一台服务器挂了还有用户访问 | DNS不知道它挂了 | 手动删除那条A记录,或使用支持健康检查的DNS服务 |
| 用户刷新后跳到另一台服务器 | DNS轮询,本来就会变 | 这是正常行为。如需固定,用Cookie或Session |
一张图总结整个流程
用户访问 www.myapp.com
│
▼
┌─────────────┐
│ DNS 服务器 │
│ │
│ A记录: │
│ 1.1.1.1 ←─┤── 轮流返回
│ 2.2.2.2 ←─┘
└──────┬──────┘
│
┌────────────┼────────────┐
▼ ▼
服务器A (1.1.1.1) 服务器B (2.2.2.2)
处理一半请求 处理另一半请求
下一步学什么?
当你掌握了这些,可以继续探索:
| 方向 | 学什么 | 难度 |
|---|---|---|
| 健康检查 | 让DNS自动剔除挂掉的服务器 | ⭐⭐ |
| 地理位置路由 | 让北京用户连北京服务器,上海用户连上海服务器 | ⭐⭐⭐ |
| DNS + Nginx 组合 | DNS管跨机房,Nginx管单机房内分配 | ⭐⭐⭐ |
| Cloudflare / Route 53 | 用专业DNS服务替代自建DNS | ⭐⭐ |
现在,去改你的DNS记录吧。10分钟后,你的网站就能扛住2倍的流量了。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)