解决 Nacos 国内下载速度缓慢的问题
方案 1. 选择相应的版本源码下载
1.1 依次点击 1、2、3 选中我们的最新稳定版本 1.4.0
1.2 点击下载 ZIP、或者 clone 也行,这里都可以
2. 本地编译
2.1 预备环境准备
2.2 解压编译
3. 启动验证
3.1 解压
3.2 启动服务器
3.3 登录 nacos 服务控制台验证
由于各种已知的原因(不可抗力),在国内下载的速度太慢了,记录分享下解决方案。
整体思路:使用国内的 Gitee 上的镜像传送门下载源码进行编译
因为nacos需要依赖java,所以需要提前安装好jdk,官方推荐jdk8,按照要求安装即可,具体安装可以参考:
Linux环境JDK安装
如果部署nacos集群的话,需要通过nginx做集群的负载均衡,nginx的安装可以参考:nginx基础学习(一):linux环境下nginx的安装和配置文件的初步认识
nacos的持久化使用的是MySQL,如果需要了解MySQL安装可以参考以下两篇文章,分别是MySQL5.7和MySQL8的安装方法。
CentOS7环境下离线安装MySQL5.7数据库
CentOS7环境下离线安装MySQL8.0.28数据库
上面基础环境奠定了以后开始做nacos集群的安装和部署工作。
下载nacos
根据官方推荐,目前推荐使用2.0.3稳定版本。下载地址:nacos在github上的下载地址。
https://github.com/alibaba/nacos/releases
特别提醒:
这里有个坑需要规避,进入这个下载地址后,不要直接点击后面的zip或者tar.gz下载,
需要点击对应版本号,进入详情页面,拉到底部下载,下载的包名是nacos-server-2.0.3.tar.gz。
如果直接点击后面的zip或者tar.gz下载,下载的包是nacos-2.0.2.tar.gz,这个不是编译好的安装包。
上传nacos安装包到服务器上
可以通过scp命令将nacos安装包上传到服务器上,命令如下:
推荐选用 Linux/Unix/Mac。 64 bit JDK 1.8+;下载 & 配置。 Maven 3.2.x+;下载 & 配置。
2.2 解压编译 1. 解压下载的压缩包,如下图: 在这里插入图片描述 2. 进入到 Nacos 文件夹,进行编译 命令如下: mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
在这里插入图片描述
- 编译结果如下 编译过程很慢,请耐心等待,文末也会给大家放上编译好的直接下载,伸手党必备
这里可以看到已经编译成功了,并且打好的包的位置也打印出来了。
- 启动验证 3.1 解压 这里把上面的 nacos-server.zip 复制到服务器验证。
unzip nacos-server- v e r s i o n . z i p 或者 t a r − x v f n a c o s − s e r v e r − version.zip 或者 tar -xvf nacos-server- version.zip或者tar−xvfnacos−server−version.tar.gz cd nacos/bin 3.2 启动服务器 Linux/Unix/Mac 启动命令 (standalone 代表着单机模式运行,非集群模式): sh startup.sh -m standalone 如果您使用的是 ubuntu 系统,或者运行脚本报错提示 [[符号找不到,可尝试如下运行:
bash startup.sh -m standalone Windows 启动命令 (standalone 代表着单机模式运行,非集群模式): cmd startup.cmd -m standalone 3.3 登录 nacos 服务控制台验证 在浏览器输入: http://ip:8848/nacos 用户名 / 密码默认为:nacos/nacos
bin 直接安装
https://blog.csdn.net/millery22/article/details/125564078?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-125564078-blog-122182282.235%5Ev38%5Epc_relevant_sort_base2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-125564078-blog-122182282.235%5Ev38%5Epc_relevant_sort_base2&utm_relevant_index=2
上传nacos安装包到服务器上
可以通过scp命令将nacos安装包上传到服务器上,命令如下:
scp D:\\nacos-server-2.0.3.tar.gz root@192.168.75.130:/usr/local
解压nacos安装包:
tar -xvf nacos-server-2.0.3.tar.gz
将名称改为nacos-8840
mv nacos nacos-8840
持久化数据库配置
进入nacos-8840/cnof目录下,将Connect URL of DB修改为如下内容:
spring.datasource.platform=mysql
jdbc.DriverClassName=com.mysql.cj.jdbc.Driver ## 如果使用数据库是MySQL8,需要加上此驱动名,否则不用加
db.num=1
db.url.0=jdbc:mysql://192.168.75.128:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai
db.user.0=root
db.password.0=123456
将nacos-8840/conf目录下的nacos-mysql.sql文件复制到数据库所在的服务器内,创建名为nacos_config数据库,并在数据库内执行sql脚本文件;
## 复制文件到数据库所在服务器
scp nacos-mysql.sql root@192.168.75.128:/usr/local
## 创建数据库并执行脚本
mysql -uroot -p123456
create datasource nacos_config
use nacos_config
source /usr/local/nacos-mysql.sql
修改集群配置
将nacos-8840/conf目录下的cluster.conf.example文件复制一份并重命名为cluster.conf,修改其内容如下:
## 复制并重命名
cp cluster.conf.example cluster.conf
## 修改内容,将文件内最后三行换成现有的集群ip和端口,如果超过3台依次向后加即可
vim cluster.conf
## 修改后如下:
192.168.75.130:8840
192.168.75.130:8850
192.168.75.130:8860
修改application.properties文件,将server-port修改为8840;
### Default web context path:
server.servlet.contextPath=/nacos
### Default web server port:
server.port=8840
配置优化点
这个优化点在你的服务器性能较好的情况下,可以不做,我是在单台虚拟机里面部署三个nacos服务,资源紧张,修改一下此配置更放心,进入nacos-8840/bin目录,找到startup.sh文件,将文件中java堆栈的配置修改小一点,这里修改成128m,修改内容JAVA_OPT=“${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m”,具体修改如下:
## 修改前的内容
if [[ "${MODE}" == "standalone" ]]; thenJAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
elseif [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; thenJAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"fiJAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
fi
## 修改后的内容
if [[ "${MODE}" == "standalone" ]]; thenJAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
elseif [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; thenJAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"fiJAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m"JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
fi
复制集群节点
上面已经完成端口为8840节点的配置,接下来将nacos-8840复制两份出来,并重命名:
cp -R nacos-8840 nacos-8850
cp -R nacos-8840 nacos-8860
修改8850和8860节点的配置,很简单,将application.properties文件中的server-port做对应的修改即可。
启动集群服务
分别执行三个节点的startup.sh命令:
# 在/usr/local目录下执行
./nacos-8840/bin/startup.sh
./nacos-8850/bin/startup.sh
./nacos-8860/bin/startup.sh
检查节点是否已经启动成功:
netstat -ano | grep 8840
netstat -ano | grep 8850
netstat -ano | grep 8860
配置nginx负载均衡
主要配置负载和监听,配置内容如下:
## 在http下配置负载
upstream nacoscluster { server 127.0.0.1:8840;server 127.0.0.1:8850;server 127.0.0.1:8860;
}
http{## 在server内配置监听server {listen 8848; ## 监听8848端口 server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { #root html; #index index.html index.htm; proxy_pass http://nacoscluster; ## 代理到负载上 }}
}
stream {upstream nacosgrpc {server 127.0.0.1:9840;server 127.0.0.1:9850;server 127.0.0.1:9860;}server {listen 9848; # 这里监听的端口是和http内监听的端口对应+1000得到的(8848+1000)proxy_pass nacosgrpc;}
}
配置完成后启动或者重启nginx即可。
访问nacos页面
在浏览器中输入:http://192.168.75.130:8848/nacos,会弹出登录页面,默认用户名和密码都是nacos,到此集群部署大功告成。
存在的坑点
官方解释
nacos2.0版本相比1.x新增了gRPC的通信方式,因此需要增加两个端口,新增端口在配置的主端口(server.port)基础上,进行一定的偏移量自动生成。偏移规则:
端口 与主端口偏移量 描述
9848 1000 客户端gRPC请求服务端端口,用于客户端服务发起连接和请求
9849 1001 客户端gRPC请求服务端端口,用于服务间同步等
改动引起的变化说明
因为这个改动,在一台机器上部署nacos集群时,不能将运行端口设置为连续端口,比如:8840、8841、8842,否则会发生端口冲突。
运行在8840端口nacos服务实际上会占用8840、8940、8941三个端口;
运行在8841端口nacos服务实际上会占用8841、8941、8942三个端口;
运行在8842端口nacos服务实际上会占用8842、8942、8943三个端口。
另一个问题
在官方文档中,还有一个很重要的说明,是加粗的内容:
使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。
正常Nacos都是使用集群的模式,需要使用nginx做转发,这里就需要在nginx配置文件中增加一些配置,如果继续使用nacos 1.x的配置,在启动项目的时候会出现报错。详细说明如下。
代码中nacos的配置信息
spring:application:name: nacos-payment-providercloud:nacos:discovery:server-addr: 192.168.75.130:8848
这个配置是在nacos 1.x的时候是没有问题的,但是如果你nacos更新到了2.x,也没有修改nginx配置文件中grpc的转发,这里就会出现启动项目报错问题。报错信息:Request nacos server failed。这里提到,但是这里没有需要修改的,需要修改的在nginx内。
nginx需要做的修改
首先是要求你的nginx中包含stream模块,如何检查你的nginx是否安装了stream模块呢,用下面的命令:
/usr/local/nginx/sbin/ningx -V
打印出来的信息如下:
nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
看下面的config arguments信息,如果包含–with-stream,那么就没有问题,stream模块已经包含在内。我这里就是没有这个模块,需要安装。采用我这种模式安装,首先注意一定要把nginx内的配置文件备份一下。
# 第一步,注意这里的--prefix=/usr/local/nginx根据你的实际情形来
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream
# 第二步make && make install
知道为啥让你备份了吧,这两步执行相当于重新装了一下。安装好以后,执行/usr/local/nginx/sbin/ningx -V命令,输出的结果就有–with-stream啦。
到现在就可以修改nginx的配置啦,其实在上面的安装过程已经体现了,在这里重点再提一下。配置内容如下。需要注意的是stream需要在http外,和http同级。
stream {upstream nacosgrpc {server 127.0.0.1:9840;server 127.0.0.1:9850;server 127.0.0.1:9860;}server {listen 9848; # 这里监听的端口是和http内监听的端口对应+1000得到的(8848+1000)proxy_pass nacosgrpc;}
}