集群搭建
前置条件
- JDK 1.8
- MySQL 5.7.29
- Nacos 2.0.3
搭建过程
- 将Nacos安装包上传至三个服务器,本次搭建使用三个端口来模拟三个不同的主机
- 解压: tar -zvxf nacos-server-2.0.3.tar.gz
- Nacos持久化,首先确保服务器已经安装MySQL(Nacos持久化要求MySQL版本在5.6.5以上),如果不持久化,会造成Nacos重启后,配置文件丢失,无法持久化
-
首先在MySQL中新建一个数据库(nacos_config)
-
nacos的脚本存放位置: nacos/conf/nacos-mysql.sql
-
将nacos脚本导入到新建的数据库中,导入成功后如下。
-
- 修改Nacos的配置文件,配置mysql持久化,位置位于nacos/conf/application.properties
将数据连接改为mysql ,配置数据库的连接驱动,账号密码等
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://你的数据库ip:3306/nacos_dev?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user.0=用户名
db.password.0=密码
- 配置cluster.conf
-
确定好三个端口号(注意三个端口不要连着,下面会说原因)
-
把conf文件下cluster.conf.example文件重命名,去掉.example
cp cluster.conf.example cluster.conf
-
修改文件内容,
vim cluster.conf
,注意:这个IP不能写127.0.0.1,必须是Linux命令hostname -i能够识别的IP
-
XX.XXX.XXX.XX:XXXX # 节点1
XX.XXX.XXX.XX:XXXX # 节点2
XX.XXX.XXX.XX:XXXX # 节点3
-
将nacos复制三份,在nacos/conf/application.properties中修改端口号(端口号不要连着)
-
启动服务:三台服务器依次启动。
- 进入nacos/bin
- 执行 ./startup.sh
nginx 反向代理
- nacos2.x有个大坑,现在即使是搭建nacos集群成功了,但是java程序注册服务进nacos集群中,启动时报错Connection is unregistered.或Client not connected,current status:STARTING.
- 原因如下:一个nacos启动默认端口是8848,那么nacos同时也会启动9848这个grpc端口。 grpc端口 (9848)= 启动端口(8848) + 1000,同理我nacos集群启动了三个nacos 端口分别为8847,8852,8858,那么这三个nacos也会启动 9847,9852,9858.,因为我们已经用nginx代理服务器的8848反向代理 三个nacos 端口分别为8847,8852,8858。但是我们还没有 代理三个nacos端口9847,9852,9858.
- 我采用的解决办法是,用nginx代理他的grpc端口,但是因为Nginx对于gRPC不适合长连接的操作。所以更好的解决方法为:用nginx来带来nacos的8848端口,用haproxy来代理9848的grpc端口。本文没有实现,想实现可以参考https://blog.csdn.net/qq_39009944/article/details/123634837?spm=1001.2014.3001.5502
# nacos服务器grpc相关地址和端口,需要nginx已经有stream模块
stream {
upstream nacos-server-grpc {
server 127.0.0.1:9847;
server 127.0.0.1:9852;
server 127.0.0.1:9858;
}
server {
listen 9888;
proxy_pass nacos-server-grpc;
}
}
http {
upstream cluster {
server 127.0.0.1:8847;
server 127.0.0.1:8852;
server 127.0.0.1:8858;
}
server {
listen 8888;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://cluster;
}
}
Nginx 相关命令:
启动nginx命令(指定配置文件启动)
nginx/sbin/nginx -c /nginx/conf/nginx.conf
关闭
nginx/sbin/nginx -s stop
重启
nginx/sbin/nginx -s reload
启动效果
问题总结
集群配置连续端口时端口占用问题
顺序启动8848则连带启动9848与9849端口。再启动8849则需连带启动9849与9850,9849端口冲突。
解决未授权访问漏洞
修改application.properties配置项
### If turn on auth system:
nacos.core.auth.enabled=true
- 这样修改后项目连接中需要增加访问的账号密码