0
点赞
收藏
分享

微信扫一扫

nginx四层负载

什么是四层负载均衡

  • OSI七层模型中,四层是传输层,传输层使用端口到端口的通信方式
  • 四层负载均衡,就是在传输层做端口的转发(端口映射)

四层负载应用场景

1、四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性;如:nginx就无法保证自己的服务高可用,需要依赖LVS或者keepalive。 2、如:tcp协议的负载均衡,有些请求是TCP协议的(mysql、ssh),或者说这些请求只需要使用四层进行端口的转发就可以了,所以使用四层负载均衡。

nginx四层负载

负载均衡软件:

  • nginx
  • 四层负载(nginx 1.9版本以后有stream模块,才可以做四层负载)
  • stream
  • 七层负载
  • upstream
  • LVS
  • 四层负载
  • HAproxy
  • 四层负载
  • 七层负载

四层负载均衡配置

环境准备

主机名

WANIP

LANIP

角色

应用

lb01

10.0.0.5

172.16.1.5

七层负载

nginx

lb02

10.0.0.6

172.16.1.6

四层负载

nginx

web01

10.0.0.7

172.16.1.7

web网站

nginx、php

web02

10.0.0.8

172.16.1.8

web网站

nginx、php

db01

10.0.0.51

172.16.1.51

数据库

MariaDB

部署四层负载

# 1.添加nginx官方源
[root@lb02 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

# 2.安装nginx
[root@lb02 ~]# yum install -y nginx


# 3.配置四层负载
stream {
upstream backend {
server 172.16.1.5:80;
}
server {
listen 90;
proxy_pass backend;
}
}
#### 要加在http层上面
http{
...
}

nginx四层负载_负载均衡

使用stream做端口转发

实现22端口转发

# 在10.0.0.6机器上开456端口,映射到10.0.0.8的22端口
ssh 10.0.0.6 -p 456

# 主配置文件,添加include
[root@lb02 streamd.d]# vim /etc/nginx/nginx.conf
user nginx;
worker_processes auto;

error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
...
}

include /etc/nginx/stream.d/*.conf;

http {
...
}


# 实现456映射22端口需求(stream.d下只能有一个模块)
[root@lb02 nginx]# vim /etc/nginx/stream.d/456_22.conf
stream {
upstream web02_ssh {
server 172.16.1.8:22;
}
server {
listen 456;
proxy_pass web02_ssh;
}


upstream backend {
server 172.16.1.5:80;
}
server {
listen 90;
proxy_pass backend;
}
}

nginx四层负载_nginx_02

nginx四层负载_mysql_03

nginx四层负载_负载均衡_04

nginx四层负载_负载均衡_05

映射数据库端口

stream {
upstream web02_ssh {
server 172.16.1.8:22;
}
server {
listen 456;
proxy_pass web02_ssh;
}


upstream backend {
server 172.16.1.5:80;
}
server {
listen 90;
proxy_pass backend;
}

upstream db01_mysql {
server 172.16.1.51:3306;
}
server {
listen 3307;
proxy_pass db01_mysql;
}
}

# 重启nginx 查看端口
[root@lb02 stream.d]# systemctl reload nginx
[root@lb02 stream.d]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:456 0.0.0.0:* LISTEN 1256/nginx: master
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 1256/nginx: master

nginx四层负载_mysql_06

# 检查能否连接 
[root@web01 wordpress]# mysql -uwp_user -p123 -h10.0.0.6 -P3307

nginx四层负载_nginx_07

redis端口转发

[root@lb02 stream.d]# cat stream.conf
stream {
upstream redis_6379 {
server 172.16.1.51:6379;
}

server {
listen 7777;
proxy_pass redis_6379;
}
}

[root@db01 ~]# redis-cli -a 123 -h 10.0.0.6 -p 7777
10.0.0.6:7777> KEYS *
(empty list or set)


举报

相关推荐

0 条评论