使用 官方文档 提供的 多 BE 共享同一个可供集群外部访问的 IP,
在 fe.conf 中配置
priority_networks = 172.16.188.188/32 # 内网IP
enable_arrow_flight_sql = true
arrow_flight_sql_port = 8070
在 be.conf 中配置
public_host = doris.xxx.com # Nginx域名
arrow_flight_sql_proxy_port = 80
arrow_flight_sql_port = 8050
同时 设置了 Nginx,配置文件
upstream arrowflight {
server 172.16.188.188:8050;
}
server {
listen 80 http2;
listen [::]:80 http2;
server_name doris.xxx.com;
#ssl_certificate /etc/nginx/cert/myCA.pem;
#ssl_certificate_key /etc/nginx/cert/myCA.key;
location / {
grpc_pass grpc://arrowflight;
grpc_set_header X-Real-IP $remote_addr;
grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
grpc_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
#proxy_http_version 1.1;
#proxy_set_header Connection "";
}
}
在外网机器上,运行 python 代码
import adbc_driver_manager
import adbc_driver_flightsql.dbapi as flight_sql
conn = flight_sql.connect(
uri=f"grpc+tcp://doris.xxx.com:80",
db_kwargs={
adbc_driver_manager.DatabaseOptions.USERNAME.value: "doris user",
adbc_driver_manager.DatabaseOptions.PASSWORD.value: "doris pwd",
}, autocommit=True, )
cursor = conn.cursor()
cursor.execute("SELECT 1")
print(cursor.fetchallarrow().to_pandas())
代码始终报错
adbc_driver_manager.InternalError: INTERNAL: [FlightSQL] unexpected HTTP status code received from server: 400 (Bad Request); transport: received unexpected content-type "text/html" (Internal; Prepare)
感觉是 Nginx 配置问题,但又找不到解决办法,如何解决?