1 -【 高性能 Nginx 服务器 】- 9 Nginx 1.9+ 四层负载均衡

1 网络模型

OSI中的层 功能 TCP/IP协议族
应用层 文件传输、电子邮件、文件服务、虚拟终端 TFTP、HTTP、SNMP、FTP、SMTP、DNS、RIP、Telnet
表示层 数据格式化、代码转换、数据加密 没有协议
会话层 解除或建立与别的接点的联系 没有协议
传输层 提供端对端的接口 TCPUDP
网络层 为数据包选择路由 IP、ICMP、OSPF、BGP、IGMP、ARP、RARP
数据链路层 传输有地址的帧以及错误检测功能 SLIP、CSLIP、PPP、MTU、ARP、RARP
物理层 以二进制数据形式再物理媒体上传输数据 ISO2110、IEEE802、IEEE802.2

在这里插入图片描述

2 Socket

什么是 Socket

Socket 就是为网络服务提供的一种机制
通讯的两端都有 Sokcet
网络通讯其实就是 Sokcet 间的通讯
数据在两个 Sokcet 间通过IO传输

TCP 与 UDP 在概念上的区别:

udp

  • 是面向无连接,将数据及源的封装成数据包中,不需要建立连接
  • 每个数据报的大小在限制64k内
  • 因无连接,是不可靠协议
  • 不需要建立连接,速度快

tcp

  • 建议连接,形成传输数据的通道.
  • 在连接中进行大数据量传输,以字节流方式
  • 通过三次握手完成连接,是可靠协议
  • 必须建立连接,效率会稍低

3 HTTP 协议组成部分

http 协议基于 TCP 协议封装成超文本传输协议,http 分为请求与响应,http 协议分为请求参数和方法类型、请求头、请求体,响应分为 响应状态、响应头、响应体等。

4 四层负载均衡与七层负载均衡区别

四层负载均衡:在网络模型中的传输层中,基于主要是基于 tcp 协议报文实现负载均衡(比如 LVShaproxy 就是四层负载均衡器),使用改写报文的源地址和目的地址。

七层负载均衡:在网络模型中应用层中,基于 URL 或者 HTTP 协议实现负载均衡,Web 服务器。

5 安装软件

5.1 环境准备

  • CentOS7
  • Nginx1.9 开始支持 tcp 层的转发,通过 stream 实现的,而 socket 也是基于 tcp 通信

stream模块默认不安装的,需要手动添加参数:–with-stream,官方下载地址:download,根据自己系统版本选择nginx1.9或以上版本
./configure --add-module=…/yaoweibin-nginx_tcp_proxy_module-121c026

5.2 下载软件

cd /usr/local

1、下载 Nginx

扫描二维码关注公众号,回复: 10122297 查看本文章
wget http://nginx.org/download/nginx-1.9.10.tar.gz

作用:实现反向代理、负载负载库

2、下载 nginx_tcp_proxy_module 插件

wget https://github.com/yaoweibin/nginx_tcp_proxy_module/tarball/master

3、解压 nginx_tcp_proxy_module 插件

tar -zxvf master

nginx 支持 TCP 转发和负载均衡的支持

5.3 编译 Nginx

1. 解压 nginx 文件

tar -zxvf nginx-1.9.10.tar.gz

2. 进入到 Nginx 目录

cd nginx-1.9.10

3. 下载 tcp.patch 最新补丁

patch -p1 <  ../yaoweibin-nginx_tcp_proxy_module-b8a3028/tcp.patch

如果报错

-bash: patch: 未找到命令

执行下面命令安装即可

yum -y install patch

4. 编译 Nginx

./configure --add-module=../yaoweibin-nginx_tcp_proxy_module-b8a3028

5. make && make install

make && make install

如果报错:

In file included from ../yaoweibin-nginx_tcp_proxy_module-b8a3028/ngx_tcp.h:32:0,
                 from ../yaoweibin-nginx_tcp_proxy_module-b8a3028/ngx_tcp.c:5:
../yaoweibin-nginx_tcp_proxy_module-b8a3028/ngx_tcp_upstream.h:144:9: error: unknown type name ‘ngx_resolver_addr_t’
         ngx_resolver_addr_t *addrs;
         ^
make[1]: *** [objs/addon/yaoweibin-nginx_tcp_proxy_module-b8a3028/ngx_tcp.o] Error 1
make[1]: Leaving directory `/usr/local/nginx-1.9.10'
make: *** [build] Error 2

在这里插入图片描述

解决:
修改第三方模块包里的头文件,ngx_tcp_upstream.h 的第 144 行将ngx_resolver_addr_t 改为 ngx_addr_t

cd /usr/local/yaoweibin-nginx_tcp_proxy_module-b8a3028/
vi ngx_tcp_upstream.h

在这里插入图片描述

修改为:

ngx_addr_t

在这里插入图片描述

6. 继续 make && make install

make && make install

7. 修改 Nginx.conf 配置文件

worker_processes  1;

events {
    worker_connections  1024;
}

### 修改为TCP模块
tcp {
    
    ### 定义多个上游服务器
    upstream test {
        ### 定义TCP模块上游服务器
        server 192.168.153.1:8001;
	    server 192.168.153.1:8002;
    }
	
    server {
        listen       9999;
        server_name  192.168.153.11;
		### 反向代理upstream
        proxy_pass test;
    }

}

8. 启动 Nginx 服务器

/usr/local/nginx/sbin/nginx

9. 创建两个 Sokcet 服务器端

在这里插入图片描述

启动服务:
在这里插入图片描述

Ngxin 连接反向代理 TCP 服务器

在这里插入图片描述

连接:

在这里插入图片描述

发现连接到 8002 这台服务器:
在这里插入图片描述

测试

客户端发送消息,对应的服务器接收到消息:
在这里插入图片描述

在这里插入图片描述

发布了675 篇原创文章 · 获赞 214 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/weixin_42112635/article/details/104964990