资讯专栏INFORMATION COLUMN

Netty Tcp 负载均衡(上)----Nginx

lookSomeone / 1793人阅读

摘要:为什么要负载均衡随着设备连接数增多,单台服务器支撑的长连接数有限,这个时候程序架构就需要改变,一般都会采取横向扩展,增加多台服务器程序。比如说一些等硬件设备或者因为前期没有考虑负载均衡而导致的遗留老项目。例如可以通过开启负载均衡功能来实现。

为什么要负载均衡

随着设备连接数增多,单台服务器支撑的TCP长连接数有限,这个时候程序架构就需要改变,一般都会采取横向扩展,增加多台服务器程序。怎么将TCP长连接均衡的路由到不同的服务器,这个时候就需要实现负载均衡了。

两种不同的场景和方案

目前笔者想到的两种应用场景是:

客户端实现比较简单,所有客户端都会连接同一个ip域名和端口。客户端不会去请求可用服务器列表,然后去根据具列表选择不同的服务器。比如说一些DTU等硬件设备或者因为前期没有考虑负载均衡而导致的遗留老项目。
解决方案:
在目标服务器上做TCP负载均衡,转发到不同的服务器上,但是这种方案需要解决负载均衡服务器的单点故障。例如可以通过Nginx开启TCP负载均衡功能来实现。

客户端本身就实现了请求可用服务器列表,然后根据列表去连接不同的服务器。

方案一:Nginx实现负载均衡

1. 安装Nginx
参考的资料:https://my.oschina.net/ouyush...
参考的资料:http://www.jiagoumi.com/work/...
(0)安装依赖的软件

(1)下载:wget http://nginx.org/download/ngi...

(2)解压:执行指令

tar -xzvf nginx-1.12.2.tar.gz -C 你的目录

(3)配置: 需要添加 with-stream参数 nginx tcp负载均衡需要

 ./configure --prefix=/opt/nginx-1.9.3 --with-http_stub_status_module --with-http_realip_module --with-http_ssl_module --with-pcre --with-http_realip_module --with-stream

(4)make

(5)make install
nginx会安装到特定的文件夹 /opt,如果一开始把源码包下载到改目录,编译安装时会提示类似错误

把源码包移到其它目录就能解决。

2.修改nginx.conf添加负载均衡配置
官方样例:

worker_processes auto;

error_log /var/log/nginx/error.log info;

events {
    worker_connections  1024;
}

stream {
    upstream backend {
        hash $remote_addr consistent;

        server backend1.example.com:12345 weight=5;
        server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
        server unix:/tmp/backend3;
    }

    upstream dns {
       server 192.168.0.1:53535;
       server dns.example.com:53;
    }

    server {
        listen 12345;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass backend;
    }

    server {
        listen 127.0.0.1:53 udp;
        proxy_responses 1;
        proxy_timeout 20s;
        proxy_pass dns;
    }

    server {
        listen [::1]:12345;
        proxy_pass unix:/tmp/stream.socket;
    }
}

自定义测试配置为:

#tcp load balance
stream{
        #更多更详细的参数,查看文档或网络
        upstream netty_test{
                server 192.168.0.26:6666 weight=1;
                server 192.168.0.26:6667 weight=1;
        }

        server{
                listen 6665;
                proxy_pass netty_test;
        }
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    ...

以上配置只是为了方便测试,因此配置的较为简陋,生产环境中,详细配置请看官方样例。
相关端口不要忘记开放,会存在防火墙导致无法连接的情况。

3.连接测试
启动两个netty服务器程序,在生产环境中会部署到不同的服务器,这里测试,在同一台PC上启动两个netty程序,端口分别为6666和6667。使用客户端连接192.168.0.26:6665,当建立4个连接时,客户端会被平均路由到 192.168.0.26:6666和6667两个server

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39882.html

相关文章

  • XXL-RPC v1.4.0,分布式服务框架

    摘要:路由更新不及时问题修复默认长度调整为客户端配置优化升级依赖版本,如等简介是一个分布式服务框架,提供稳定高性能的远程服务调用功能。拥有高性能分布式注册中心负载均衡服务治理等特性。 Release Notes 1、LRU路由更新不及时问题修复; 2、JettyClient Buffer 默认长度调整为5M; 3、Netty Http客户端配置优化; 4、升级依赖版本,如netty/min...

    only_do 评论0 收藏0
  • WebSocket协议 8 问

    摘要:是个不太干净协议。目前此协议的受众的也不仅仅是开发者。借助协议进行握手,握手成功后,就会变身为通道,从此与不再相见。如此操作,可以尽量避免普通请求被误认为协议。它包含四个事件和两个动作发送和关闭。有类似协议的帧格式,在此不做过多解释。 WebSocket是一种比较新的协议,它是伴随着html5规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持。它使用方面、应用广泛,已经渗透到前后端...

    jaysun 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<