基础环境
<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的文件内容:
在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三份:
并且需要再次将application.properties的server.port修改为对应端口
在各自bin目录下双击startup.cmd启动即可,至此集群实例搭建完成。
二、nacos官方集群部署指南
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
不在同一台机器还好,在同一台机器就会端口冲突了。
在使用集群时有两种方法(官方说的第一种:手动更改,说了和没说一样...):
- 将所有实例全部写到服务的server-addr去
- 通过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控制台也看到注册的服务了。
四、通过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 正常
在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集群环境了