Windows10同一台机器搭建Nacos2集群

413 阅读3分钟

基础环境

<spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>  
<spring-cloud.version>2021.0.5</spring-cloud.version>  
<spring-boot.version>2.6.13</spring-boot.version>

以windows的nacos(2.2.0)在同一机器上搭建集群(三个实例 8818、8828、8838,其中端口不能连续如8818、8819、8820)

一、nacos配置修改

修改conf下的 application.properties的文件内容:

image.png

在conf目录下新建 cluster.conf文件:

10.10.36.135:8818
10.10.36.135:8828
10.10.36.135:8838

其中ip填自己的局域网ip切记不能填127.0.0.1或者localhost否则nacos集群会分不清是哪一个实例

修改完成后整体复制nacos三份:

image.png

并且需要再次将application.properties的server.port修改为对应端口

在各自bin目录下双击startup.cmd启动即可,至此集群实例搭建完成。

二、nacos官方集群部署指南

集群部署说明 (nacos.io)

image.png

nacos2.x版本相比nacos1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。具体偏移量参照上图官方说明。这也是为什么集群时实例端口不能连续:假设使用连续端口:8847 8848 8849。

88847会自动使用这些端口:8847 9847 9848 7847

88848会自动使用这些端口:8848 9848 9849 7848

88849会自动使用这些端口:8849 9849 9849 7849

不在同一台机器还好,在同一台机器就会端口冲突了。

在使用集群时有两种方法(官方说的第一种:手动更改,说了和没说一样...):

  1. 将所有实例全部写到服务的server-addr去
  2. 通过Nginx代理转发

但是两种方法各有利弊,第一种需要将全部实例地址写到server-addr去挺麻烦的,但是不需要再有一台nginx服务器转发代理了;第二种的话通过nginx代理所有实例转发比较方便,但是nginx配置也比较麻烦而且还得nginx再做集群不然其高可用性又没有了。

三、将所有实例全部写到服务的server-addr去

这里比较简单不需要过多配置,在注册服务配置时在bootstrap.properties文件修改:

server.port=6636  
spring.application.name=nacos-order-consumer  
#spring.cloud.nacos.discovery.server-addr=localhost:8848  
#spring.cloud.nacos.config.server-addr=localhost:8848  
spring.cloud.nacos.discovery.server-addr=localhost:8818,localhost:8828,localhost:8838  
spring.cloud.nacos.config.server-addr=localhost:8818,localhost:8828,localhost:8838  
spring.cloud.nacos.config.file-extension=yaml

服务正常启动,且nacos控制台也看到注册的服务了。

image.png

image.png

image.png

四、通过Nginx代理TCP转发

nginx.conf做如下修改:


#user  nobody;
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;
}

# TCP转发配置
stream {
     #项目注册代理
     upstream nacos-server-grpc {
           #nacos 2.0端口加一千,本来是8818 8828 8838 更改如下
           server 127.0.0.1:9818;
           server 127.0.0.1:9828;
           server 127.0.0.1:9838;
         }

         server {
         listen 9848;
         proxy_pass nacos-server-grpc;
     }
}

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"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    
    # TCP集群配置
    upstream nacos-server {
        server 127.0.0.1:8818;
        server 127.0.0.1:8828;
        server 127.0.0.1:8838;
    }

    server {
        listen       8848;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        
        location / {
            proxy_pass http://nacos-server/;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

启动集群后访问 http://localhost:8848 正常

image.png

在bootstrap.properties文件修改:

server.port=6636  
spring.application.name=nacos-order-consumer  
spring.cloud.nacos.discovery.server-addr=localhost:8848  
spring.cloud.nacos.config.server-addr=localhost:8848  
#spring.cloud.nacos.discovery.server-addr=localhost:8818,localhost:8828,localhost:8838  
#spring.cloud.nacos.config.server-addr=localhost:8818,localhost:8828,localhost:8838  
spring.cloud.nacos.config.file-extension=yaml

服务成功注册到nacos集群环境了

image.png

image.png