「刻意练习」一起动手搭建负载均衡

1. 配套故事

通俗易懂解释负载均衡(我的历史文章中有)

2. 实验工具

  • vmware
  • ubuntu 系统

如果没有实验工具的小伙伴,可在公众号内回复“工具”获取。

3. 刻意练习

3-1. 原理图


「刻意练习」一起动手搭建负载均衡


上图架构需要三台服务器:负载均衡服务器、web1、web2。

因此我们采用虚拟机克隆的方式,快速拥有多台虚拟机。

3-2. 克隆虚拟机

右键需要克隆的虚拟机:管理--克隆。按如下步骤操作即可:


「刻意练习」一起动手搭建负载均衡


「刻意练习」一起动手搭建负载均衡


「刻意练习」一起动手搭建负载均衡


「刻意练习」一起动手搭建负载均衡


「刻意练习」一起动手搭建负载均衡


重复上面步骤,再次克隆一台虚拟机,最终结果如下(web1和web2为克隆的虚拟机):

「刻意练习」一起动手搭建负载均衡

开启三个虚拟机后分别查看 ip 地址:


「刻意练习」一起动手搭建负载均衡


分别为:

负载均衡:192.168.153.132

web1:192.168.153.133

web2:192.168.153.134

现在使用 xshell 连接,方便后续操作:


「刻意练习」一起动手搭建负载均衡


3-3. 安装 nginx

三台服务器安装 nginx 即可。

安装 nginx 命令:

sudo apt install nginx


「刻意练习」一起动手搭建负载均衡


测试是否运行成功:


「刻意练习」一起动手搭建负载均衡


3-4. 配置

负载均衡配置:

vim /etc/nginx/nginx.conf


「刻意练习」一起动手搭建负载均衡


在 http 模块内写入 upstream 和 server 模块。

upstream中,ip 地址为要分发的服务器, weight 代表权重分发优先级,max_fails 为分发最大失败次数,fail_timeout为失败超时时间。

location 中指定分发的代理。

web1配置:

更改默认的html页面为以下内容,方便辨认访问的页面是哪台 web 服务器

sudo vim /var/www/html/index.nginx-debian.html


「刻意练习」一起动手搭建负载均衡


web2配置:

sudo vim /var/www/html/index.nginx-debian.html


「刻意练习」一起动手搭建负载均衡


3-5. 查看效果

在浏览器请求负载均衡服务器:

http://192.168.153.132/


「刻意练习」一起动手搭建负载均衡


「刻意练习」一起动手搭建负载均衡


因为我们前面设置的 weight 都为1,所以此处相当于轮询 web1 和 web2 服务器。

3-6. 更多配置参考

  • 轮询:每个请求按时间顺序逐一分配到不同的后端服务器,也是nginx的默认模式。轮询模式的配置很简单,只需要把服务器列表加入到upstream模块中即可。
upstream serverList {
server 1.2.3.4;
server 1.2.3.5;
server 1.2.3.6;
}
  • ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。
upstream serverList {
ip_hash
server 1.2.3.4;
server 1.2.3.5;
server 1.2.3.6;
}
  • url_hash:按访问url的hash结果来分配请求,相同的url固定转发到同一个后端服务器处理。
upstream serverList {
server 1.2.3.4;
server 1.2.3.5;
server 1.2.3.6;
hash $request_uri;
hash_method crc32;
}
  • fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream serverList {
server 1.2.3.4;
server 1.2.3.5;
server 1.2.3.6;
fair;
}

而在每一种模式中,每一台服务器后面的可以携带的参数有:

down: 当前服务器暂不参与负载
weight: 权重,值越大,服务器的负载量越大。
fail_timeout: max_fails次失败后暂停的时间。
max_fails:允许请求失败的次数,默认为1。
backup:备份机, 只有其它所有的非backup机器down或者忙时才会请求backup机器。

示例:

/**
下面是一个配置负载均衡的示例(只写了关键配置):
其中:
upstream:是负载的配置模块,serverList是名称,随便起
server_name:是客户端请求的域名地址
proxy_pass:是指向负载的列表的模块,如serverList
*/
upstream serverList {
server 1.2.3.4 weight=30;
server 1.2.3.5 down;
server 1.2.3.6 backup;
}

server {
listen 80;
server_name www.xxx.com;
root html;
index index.html index.htm index.php;
location / {
proxy_pass http://serverList;
proxy_redirect off;
proxy_set_header Host $host;
}
}

4. 常见问题

问题:安装软件慢?

答:修改 apt 源

(https://blog.csdn.net/qq_41822647/article/details/94444286)

问题:新安装的系统,无法ssh连接?

答:安装ssh和防火墙放开22端口

(https://blog.csdn.net/qq_36711453/article/details/83745409)

如果有其他问题,请在公众号后台留言~

「刻意练习」一起动手搭建负载均衡


往期精彩:

Hi,我是二毛,一个在大城市漂泊的程序员

【故事】VPN、反向代理到底skr啥



欢迎来到程序员二毛的世界,在这里你将走进程序员的生活,感受职场冷暖,体会生活感悟,并学习到有趣的编程技术。

包括但不限于Linux、数据库、计算机网络、PHP、数据结构算法、设计模式、实用工具资源等。

「刻意练习」一起动手搭建负载均衡


关注公众号《程序员二毛》,后台回复 1024 领取变强秘籍;点击“菜单栏-加群交流”可进入攻城狮交流群。

聊技术,说认知,谈人生,也许吃瓜围观的你,离激情交流、碰撞思想,就差一句“PHP是世界上最好的语言”!


「刻意练习」一起动手搭建负载均衡


分享到:


相關文章: