Nginx代理gRPC反向代理和负载均衡配置

2 篇文章 0 订阅

1. 前言

根据nginx官网信息,nginx从1.13.10开始原生支持gRPC,所以必须使用1.13.10以上的版本进行NGINX+gRPC框架的部署。

nginx作为老牌负载均衡软件对gRPC进行了支持,之前已经可以代理gRPC的TCP连接,新版本之后,还可以终止、检查和跟踪 gRPC 的方法调用:

  1. 发布 gRPC 服务,然后使用 nginx应用 HTTP/2 TLS 加密、速率限制、基于 IP 的访问控制列表和日志记录;
  2. 通过单个端点发布多个 gRPC 服务,使用 nginx检查并跟踪每个内部服务的调用;
  3. 使用 Round Robin, Least Connections 或其他方法在集群分配调用,对 gRPC 服务集群进行负载均衡;

2. 编译安装nginx

安装环境: centos 7.3

2.1 安装步骤

注意:
如果不指定nginx安装路径--prefix=/opt/nginx,则默认安装路径为:/usr/local/nginx

nginx源码编译及安装步骤如下:

  1. 从nginx官网上获取版本号不低于1.13.10的源码包(nginx-1.17.9.tar.gz),本文以1.17.9为例。
  2. 解压nginx源码包nginx-1.17.9.tar.gz,得到nginx的源码;
  3. 进入nginx源码目录中,执行如下命令:
    # 首先需要先安装nginx 编译所需的基本依赖:
    yum -y install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel
    
    # 编译和安装nginx
    ./configure --with-http_gzip_static_module --with-http_ssl_module --with-http_stub_status_module --with-stream --with-http_v2_module
    make
    make install
    
    使用nginx反向代理和负载均衡grpc服务,以下模块是必须安装的:
    1. http_ssl
    2. http_v2
2.2 检验是否安装成功

执行以下命令,验证nginx是否安装成功。如下所示:显示nginx安装成功,安装的nginx版本号为1.17.9。

[root@ljj]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.17.9
2.3 启动nginx

在nginx安装正常的情况下,执行以下操作构建nginx示例:

  1. 进入到nginx的安装目录下,检查nginx配置文件是否正确:

    [root@ljj]# ./sbin/nginx -t
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    
  2. 如果配置文件检查正常,运行nginx程序:

    [root@ljj]# ./sbin/nginx
    
  3. 检查nginx运行状态及端口占用情况:

    [root@ljj]# ps -ef|grep nginx
    root     27242     1  0 16:33 ?        00:00:00 nginx: master process ./sbin/nginx
    nobody   27243 27242  0 16:33 ?        00:00:00 nginx: worker process
    root     27251 20758  0 16:34 pts/6    00:00:00 grep --color=auto nginx
    [root@ljj]# 
    [root@ljj]# netstat -anpo|grep 80
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      27242/nginx: master  off (0.00/0/0)
    

    从上述结果能够看出,nginx运行状态正常,并且其监听的端口号为80(默认配置)。

  4. 在远端机器上打开一个web网页,输入nginx服务的IP和端口号,测试nginx是否能够正常提供web服务。正常情况下,远端机器会显示如下的web页面:
    在这里插入图片描述
    如果出现上图,说明NGINX的示例构建成功。

3. 配置反向代理和负载均衡

3.1 Nginx 负载均衡详解

首先给大家说下upstream这个配置的,这个配置是写一组被代理的服务器地址,然后配置负载均衡的算法。

upstream mysvr { 
    server 192.168.10.121:3333;
    server 192.168.10.122:3333;
}
server {
    ....
    location  ~*^.+$ {         
        proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表         
    }
}
3.2 Nginx内置负载均衡策略
  1. 热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....

    upstream mysvr { 
    	server 127.0.0.1:7878; 
    	server 192.168.10.121:3333 backup;  #热备     
    }
    
  2. 轮询:nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABAB....

    upstream mysvr { 
    	server 127.0.0.1:7878;
    	server 192.168.10.121:3333;       
    }
    
  3. 加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....

    upstream mysvr { 
    	server 127.0.0.1:7878 weight=1;
    	server 192.168.10.121:3333 weight=2;
    }
    
  4. ip_hash:nginx会让相同的客户端ip请求相同的服务器。

    upstream mysvr { 
    	server 127.0.0.1:7878; 
    	server 192.168.10.121:3333;
    	ip_hash;
    }
    
  5. 关于nginx负载均衡配置的几个状态参数讲解。
    1- down:表示当前的server暂时不参与负载均衡。
    2- backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
    3- max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
    4- fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

    upstream mysvr { 
    	server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2;
    	server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;    
    }
    
3.2 grpc反向代理和负载均衡配置实例

Nginx 使用 HTTP 服务器监听 gRPC 流量,并使用 grpc_pass 指令代理流量。 为 Nginx 创建以下代理配置,在端口 8089 上侦听未加密的 gRPC 流量并将请求转发到端口1508015081上的服务器,默认采用轮询的负载均衡策略,所有8089端口上的请求会以轮询的方式分别发送给1508015081上的服务。

nginx.conf配置文件修改如下:

upstream grpcservers {
    server 10.12.12.13:15080; # 后端 11800 地址
    server 10.12.12.14:15081; # 后端 11801 地址
}

server {
    listen 8089  http2;
 
    location / {
        grpc_pass grpc://grpcservers;
        error_page 502 = /error502grpc;
    }
 
    location = /error502grpc {
        internal;
        default_type application/grpc;
        add_header grpc-status 14;
        add_header grpc-message "unavailable";
        return 204;
    }
}
4. 参考:
  1. https://juejin.im/post/5e196d3be51d451cad410f6e
  2. https://www.cnblogs.com/huangweimin/articles/8512253.html
  3. https://blog.csdn.net/liitdar/article/details/79803128
  4. https://www.runoob.com/w3cnote/nginx-proxy-balancing.html
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx反向代理负载均衡配置可以在同一台服务器上实现,也可以在多台服务器上实现。 以下是一个简单的nginx反向代理负载均衡配置示例: ```nginx # upstream定义后端服务器,可以是多个 upstream backend { server backend1.example.com; server backend2.example.com; } # 反向代理配置 server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } # 负载均衡配置 upstream backend { server backend1.example.com weight=5; server backend2.example.com weight=10; server backend3.example.com weight=5; } server { listen 80; server_name example.com; location / { # ip_hash表示使用客户端IP进行hash负载均衡 # least_conn表示使用最少连接数负载均衡 # round_robin表示使用轮询负载均衡 # 具体使用哪种负载均衡算法可以根据实际需求选择 # max_fails和fail_timeout表示当节点失败次数和失败时间超过设定值时,将该节点暂时从负载均衡池中剔除 # backup表示将该节点设置为备份节点,只有当其他节点都不可用时才会使用 # 具体参数可以参考nginx官方文档 # https://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # 下面是负载均衡相关配置 # ip_hash; # least_conn; # round_robin; # server backend1.example.com max_fails=3 fail_timeout=30s; # server backend2.example.com max_fails=3 fail_timeout=30s; # server backend3.example.com max_fails=3 fail_timeout=30s backup; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值