搭建说明
四层负载均衡,只是基于IP+端口的转发,工作在网络层,并不接触到应用层,因此跟以往的七层负载均衡不太相同。
以往的负载均衡都是工作在应用层,由ngx_http_upstream_module
模块实现,实现四层负载均衡的模块是:ngx_stream_core_module
模块,很明显,它工作在http模块之外,所以才能称为四层负载均衡。
官网说明:https://nginx.org/en/docs/stream/ngx_stream_core_module.html
本次实践搭建:
- 四层+MySQL服务器负载均衡。
- 四层+7层+web服务器负载均衡
四层+MySQL服务器负载均衡
环境准备
主机 |
IP |
角色 |
备注 |
lb4_01 |
192.168.110.144 |
四层负载均衡服务器 |
在此服务器中搭建 |
db01 |
192.168.110.137 |
数据库服务器1 |
配置好数据库 |
db02 |
192.168.110.143 |
数据库服务器2 |
配置好数据库 |
在Nginx主配置文件中,添加以下内容:
1 2 3 4 5 6 7
| vim /etc/nginx/nginx.conf
stream { include /etc/nginx/stream_conf.d/*.conf; }
|
创建stream配置文件
1 2 3 4 5 6 7 8 9 10 11 12
| mkdir -p /etc/nginx/stream_conf.d cd /etc/nginx/stream_conf.d vim lb4_db.conf
upstream mysql{ server 192.168.110.137:3306; server 192.168.110.143:3306; } server { listen 3306; proxy_pass mysql; # 与七层负载均衡不同,此处不加http:// }
|
四层+7层+web服务器负载均衡
环境准备
主机 |
IP |
角色 |
lb4_01 |
192.168.110.144 |
四层负载均衡服务器 |
lb7_01 |
192.168.110.135 |
七层负载均衡服务器 |
lb7_02 |
192.168.110.136 |
七层负载均衡服务器 |
lb4_01
1 2 3 4 5 6 7 8 9 10 11
| cd /etc/nginx/stream_conf.d vim lb4_web.conf
upstream proxy_7 { server 192.168.110.135:80; server 192.168.110.136:80; } server { listen 80; # 注意:当Nginx中配置了多个监听事项时,不要造成端口冲突。 proxy_pass proxy_7; }
|
lb7_01/lb7_02
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| upstream static{ server sweb01 weight=1; server sweb02 weight=1; } upstream default{ server web01 weight=1; } upstream dynamic{ server web02 weight=1; }
server{ listen 80; server_name blog; location /{ proxy_pass http://default; proxy_set_header Host $http_host; } location /static/{ proxy_pass http://static; proxy_set_header Host $http_host; } location /dynamic/{ proxy_pass http://dynamic; proxy_set_header Host $http_host; } }
|
多层负载架构下获取真实客户端IP
lb4_01
开启proxy_protocol协议。
proxy protocol是HAProxy的作者Willy Tarreau于2010年开发和设计的一个Internet协议,通过为tcp添加一个很小的头信息,来方便的传递客户端信息(协议栈、源IP、目的IP、源端口、目的端口等),在网络情况复杂又需要获取用户真实IP时非常有用。其本质是在三次握手结束后由代理在连接中插入了一个携带了原始连接四元组信息的数据包。
1 2 3 4 5 6 7 8 9
| upstream proxy_7 { server 192.168.110.135:80; server 192.168.110.136:80; } server { listen 80; proxy_pass proxy_7; proxy_protocol on; }
|
lb7_01/lb7_02
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| upstream www { server 172.16.1.7:80; server 172.16.1.8:80; } server { listen 80 proxy_protocol; server_name blog; set_real_ip_from 192.168.110.0/24; real_ip_header proxy_protocol; , location / { proxy_pass http://www; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_protocol_server_addr; proxy_set_header X-Forwarded-For $proxy_protocol_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
|