alibaba/nacos

分享:使用nginx做nacos集群负载均衡

Open

#9,004 opened on 2022年8月21日

GitHub で見る
 (18 comments) (14 reactions) (0 assignees)Java (32,948 stars) (13,279 forks)batch import
area/Documentgood first issue

説明

1、分享的目的 网络鱼龙混杂,鱼目混珠,内容良莠不齐,大家为了所谓的积分,不顾三七二十一搬运别人的,有的甚至一字不差照搬不误,误人子弟!关于这个使用nginx做nacos集群复杂均衡问题,我搜了好多,都是劣等的教程,终于在一个角落看到了解决办法,看到也有很多朋友之前问过这种问题,现在一起分享一下吧 2、要解决的问题 有N(N>=3)台机器要组建nacos集群: 192.168.190.128:8848; 192.168.190.129:8848; 192.168.190.130:8848; 普通方法是,在server-addr中使用逗号隔开几个nacos集群地址,但是此种问题的缺点在于,集群扩建时,需要重新打包代码、重启才可以,但是很明显这种方式不是很友好。 那就需要想一个办法,使用nginx负载均衡来做,不再废话,下边直接上教程供参考: 3、解决办法 1)准备三台机器,并配置好各自的nacos cluster.conf: 192.168.190.128:8848 192.168.190.129:8848 192.168.190.130:8848 startup.sh: export MODE="cluster" 启动文件中默认的内存占用2G 2G 1G,可以按需调整,注意最后一个要比前边的小,一般是小一半 application.properties: 只修改了如下: spring.datasource.platform=mysql db.url.0=jdbc:mysql://192.168.190.1:3306/config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0=root db.password.0=12345678 2)设置nginx负载均衡 安装nginx时,注意要安装上stream模块,即,在./configure 阶段,--with-stream 配置文件: ` #user nginx nginx; worker_processes 1;

#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream;

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';
client_max_body_size 300m;
#access_log  logs/access.log  main;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;

#gzip  on;
upstream cluster{
	server 192.168.190.128:8848;
	server 192.168.190.129:8848;
	server 192.168.190.130:8848;
}
server {
    listen       7847;
    server_name  localhost;
	charset utf-8;
    location / {
         proxy_pass http://cluster/;             
    }
	#access_log  /data/nginx/logs/nacos.log;
	#error_log  /data/nginx/logs/nacos.log;
}

}

nacos的grpc协议配置

stream { # 负载均衡配置(TCP长连接配置) upstream lb-nocos-tcp{ server 192.168.190.128:9848 weight=1; server 192.168.190.129:9848 weight=1; server 192.168.190.130:9848 weight=1; } server { listen 8847; proxy_pass lb-nocos-tcp; } } ` 由于nginx放在了三台nacos机器中的一台上,所以把监听的端口进行了修改。 nginx配置的关键就在于,gRPC通讯部分,nacos会在默认的端口上偏移1000进行通讯,但是网络上很多教程根本就没有提过这个stream,这才是关键问题。 在这里,我用7847对应nacos各个机器的8848,偏移1000,用8847对应各个机器的9848 3)程序中使用 server-addr: 192.168.190.128:7847 如果多环境,可以在跟pom中配置profiles,然后各个项目中引用。

至此,结束,如果各位还有更好的方案或者优化,希望能够共享一下

コントリビューターガイド