准备工作:
1. 数据库(mysq8.0)
2. nacos 2.2.0(三台)
3. nginx 1.9.9(用于代理nacos)
所需依赖的版本信息如下:
<java.version>17</java.version>
<spring-boot.version>2.7.6</spring-boot.version>
<spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
<spring-cloud.version>2021.0.3</spring-cloud.version>
这里我的mysql和nginx放在了windows下,三台nacos放在了一台虚拟机上(通过修改端口号来区分)
它们的安装这里就不在细讲,只是讲一下nacos集群的配置以及nginx的代理。
nacos的配置:
1. cluster.conf文件
三个nacos的cluster.conf文件都是相同的的配置,上面是三台nacos的 ip+port。
2. application.properties文件
修改nacos的端口,这里我的端口分别是 8848,8850,8852(注意端口不要连续)
上面标记的是需要配置的关键点,注意首先要创建名为 nacos的数据库,然后再把nacos中提供的sql文件访问navicate(mysql客户端)中运行,生成一些表结构。
运行这个以mysql开头的sql文件。
3. nacos启动文件 startup.sh
如果虚拟机内存较小可以修改一下上面的三个参数。
4. 进入到startup.sh所在的目录下,启动nacos, 使用 ./startup.sh 命令,如果出现启动失败,可能需要nacos下的data目录删除(其中一种启动失败原因的解决办法)。
5. 访问路径 http://192.168.193.104:8848/nacos/ ,查看集群是否搭建成功。
出现上图结果说明,nacos集群搭建成功。
nginx的配置:
1. 修改nginx.conf文件
以上就配置好了 nginx对nacos集群的代理。
然后访问 http://127.0.0.1:8999/nacos/ ,这里ip地址和端口是nginx的ip和监听的端口。
如果能够正常访问到nacos的客户端,就说明代理成功了。
服务的注册:
springboot程序中 application.yml的配置信息
server:
port: 8001
spring:
application:
name: order-server
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8999 # 注册到nginx的代理地址
username: nacos
password: nacos
启动项目,这是会报下面的错误。
报错信息如下:
这是由于nacos 2.0.0 新增了gRPC的通信方式。官网说明如下:
所以nginx 对nacos集群的代理方式有所改变,对 nginx.conf 文件的修改如下:
# nacos的grpc协议配置
stream {
upstream nacoscluster-grpc{
# nacos2版本,grpc端口与要比主端口多1000,主端口为8140、8550、8960
server 192.168.193.104:9848 weight=1;
server 192.168.193.104:9850 weight=1;
server 192.168.193.104:9852 weight=1;
}
server{
listen 9999;
proxy_pass nacoscluster-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;
upstream nacos-cluster {
server 192.168.193.104:8848;
server 192.168.193.104:8850;
server 192.168.193.104:8852;
}
server {
listen 8999;
server_name localhost;
location /nacos/ {
proxy_pass http://nacos-cluster;
}
}
}
注意这里的stream模块只有在 nginx1.9.0 之后才能使用。
最后我们重新启动nginx,再次访问 http://127.0.0.1:8999/nacos/
服务列表出现我们注册的服务,访问成功。