【已解决】通过 nginx 转发到 fe 的 9030 端口出现报错: [MysqlChannel.fetchOnePacket():276] receive packet sequence id[88] want to get[1]

Viewed 123

问题描述:
1、直接链接fe 的9030 端口是可以成功,但是通过nginx 转发到 fe的9030 ,应用就无法链接

这个是直接telent fe 的端口,正常的
image.png

这个是telnet nginx 的端口,不正常
image.png

nginx 的配置

image.png

fe 的warn 日志

2024-04-11 16:37:57,007 WARN (mysql-nio-pool-0|168) [MysqlChannel.fetchOnePacket():276] receive packet sequence id[88] want to get[1]

如上问题,麻烦帮忙看看

2 Answers
upstream dorisdbs {
    server fe1:9030; # 第一个Doris前端服务地址
    server fe2:9030; # 第二个Doris前端服务地址
    # 可以继续添加更多的前端服务
}

server {
    listen 80; # 监听公网的80端口,也可以改为443并配置SSL
    server_name ip; # 你的域名或IP地址

    location / {
        proxy_pass http://dorisdbs; # 将请求转发到upstream定义的Doris前端服务群集
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        # 如果Doris FE使用的是HTTP以外的协议,需要调整proxy_pass和相关的配置
    }
}

试试这样配置nginx

注意,Doris前端服务默认使用的是非HTTP协议,通常是专有的二进制协议,因此直接使用HTTP代理可能不适用。但对于Doris的查询服务,通常不需要通过Nginx代理,因为Doris自身已经提供了高可用和负载均衡功能。
如果确实需要通过Nginx实现某种定制的代理行为(比如负载均衡或特殊的路由策略),可能需要通过Nginx的TCP/UDP代理功能,而不是HTTP代理。
因此,实际配置时,请根据Doris的具体使用场景和Nginx的官方文档进行设置。

尝试使用了楼主提供的配置文件,执行结果不同。
按照官网的指导重新配置了一遍,问题已解决,但是两个配置文件好像没什么区别。

现在正常的 nginx 配置文件

#user  nobody;
worker_processes  5;

events {
    worker_connections  1024;
}

stream {
  upstream mysqld {
      hash $remote_addr consistent;
      server doris-01:9030 weight=1 max_fails=2 fail_timeout=60s;
      ##注意:如果是多个FE,加载此处
  }
  ###这里是配置代理的端口,超时时间等
  server {
      listen 9030;
      proxy_connect_timeout 300s;
      proxy_timeout 300s;
      proxy_pass mysqld;
  }

}



http {
    include      /usr/local/nginx/conf.d/*.conf;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
	
        location /movie {
            alias /usr/local/nginx/html/movie/;
	}


    }

}

之前的配置文件

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

stream { 
upstream mysqld {
      #hash $remote_addr consistent;
      server 10.12.10.138:9030 weight=1 max_fails=2 fail_timeout=60s;
      ##注意:如果是多个FE,加载此处
 }



upstream mysql_8030 {
      hash $remote_addr consistent;
      server 10.12.10.138:8030 weight=1 max_fails=2 fail_timeout=60s;
      ##注意:如果是多个FE,加载此处
 }



 
 server {
      listen 9030;
      proxy_connect_timeout 30000s;
      proxy_timeout 30000s;
      proxy_pass mysqld;
      proxy_protocol on;
  }


  server {
      listen 8030;
      proxy_connect_timeout 30000s;
      proxy_timeout 30000s;
      proxy_pass mysql_8030;
  }



upstream mysqld_new {
      hash $remote_addr consistent;
      server doris-01:9030 weight=1 max_fails=2 fail_timeout=60s;
      ##注意:如果是多个FE,加载此处
 }



upstream mysql_8030_new {
      hash $remote_addr consistent;
      server doris-01:8030 weight=1 max_fails=2 fail_timeout=60s;
      ##注意:如果是多个FE,加载此处
 }




 server {
      listen 19030;
      proxy_connect_timeout 30000s;
      proxy_timeout 30000s;
      proxy_pass mysqld_new;
      proxy_protocol on;
  }


  server {
      listen 18030;
      proxy_connect_timeout 30000s;
      proxy_timeout 30000s;
      proxy_pass mysql_8030_new;
  }



}





http {
    include      /usr/local/nginx/conf.d/*.conf;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
	
        location /movie {
            alias /usr/local/nginx/html/movie/;
	}


    }

}