这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记
实验环境
实验所用的是centos7 准备了四个虚拟机
| 主机名 | ip | 角色 |
|---|---|---|
| nginx | 192.168.204.101 | 负载均衡节点 |
| node1 | 192.168.204.102 | 后端服务1 |
| node2 | 192.168.204.103 | 后端服务2 |
| server1 | 不重要 同一网段即可 | 客户端 |
node1
node2
四层负载均衡
所谓四层负载均衡,是通过传输层协议(TCP/IP)来实现的。也就是通过报文中的目标地址和端口,再根据负载均衡器(nginx)设置的负载均衡算法,决定最终真实的目标服务器。
实验思路
先对node1和node2进行简单的网站搭建(一个能显示自己是哪个节点的html),然后对nginx进行四层负载均衡的配置并监听80端口,然后客户端访问nginx节点的80端口,观察负载均衡的效果是否实现。
nginx配置
[root@nginx ~]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
stream {
upstream servers{
#默认是轮询模式,这里设置为最短连接,请求会被转发到连接数最少的服务器上。
least_conn;
server 192.168.204.102:80;
server 192.168.204.103:80;
}
server{
listen 8080;
proxy_pass servers;
}
}
效果
[root@nginx ~]# for i in {1..10};do curl 192.168.204.101:8080;done
<p1>node2</p1>
<p1>node1</p1>
<p1>node2</p1>
<p1>node1</p1>
<p1>node2</p1>
<p1>node1</p1>
<p1>node2</p1>
<p1>node1</p1>
<p1>node2</p1>
<p1>node1</p1>
七层负载均衡
七层即应用层,就是基于 URL 等应用层信息的负载均衡。比如通过URL的匹配规则去进行负载均衡。
实验思路
在服务器上先去手动解析两个域名,都去指向nginx,然后nginx节点接受的请求中就会有不同的URL了,然后根据匹配规则负载均衡到node1和node2。
客户端解析域名
[root@server1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.204.101 node1.zyf.com node2.zyf.com
配置nginx
[root@nginx ~]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
upstream node1{
server 192.168.204.102;
}
server {
listen 80;
server_name node1.zyf.com;
location / {
proxy_pass http://node1;
}
}
upstream node2{
server 192.168.204.103;
}
server {
listen 80;
server_name node2.zyf.com;
location / {
proxy_pass http://node2;
}
}
}
效果
[root@server1 ~]# curl node1.zyf.com
<p1>node1</p1>
[root@server1 ~]# curl node2.zyf.com
<p1>node2</p1>
总结
四层负载均衡是建立在ip层的,进行负载均衡的时候需要占用端口,当服务变多的时候,端口和服务之间的关系就会越来越复杂,造成了运维成本的提高。
七层负载均衡是根据一些应用层上的信息,避免了端口的问题,但是层数越高对数据的封装越多,负载均衡时对数据处理的成本就增加了。
没有最好的策略,根据业务场景选择合适的就行。