简介

由于Disconf不再维护,下面主要对比一下Spring Cloud Config、Apollo和Nacos。

对比项目 Spring Cloud Config Apollo Nacos
配置实时推送 支持(Spring Cloud Bus) 支持(HTTP长轮询1s内) 支持(HTTP长轮询1s内)
版本管理 支持(Git) 支持 支持
配置回滚 支持(Git) 支持 支持
灰度发布 支持 支持 不支持
权限管理 支持(依赖Git) 支持 不支持
多集群 支持 支持 支持
多环境 支持 支持 支持
监听查询 支持 支持 支持
多语言 只支持Java 主流语言,提供了Open API 主流语言,提供了Open API
配置格式校验 不支持 支持 支持
单机读(QPS) 7(限流所致) 9000 15000
单击写(QPS) 5(限流所致) 1100 1800
3节点读(QPS) 21(限流所致) 27000 45000
3节点写(QPS) 5(限流所致) 3300 5600

从配置中心角度来看,性能方面Nacos的读写性能最高,Apollo次之,Spring Cloud Config依赖Git场景不适合开放的大规模自动化运维API。 功能方面Apollo最为完善,nacos具有Apollo大部分配置管理功能,而Spring Cloud Config不带运维管理界面,需要自行开发。 Nacos的一大优势是整合了注册中心、配置中心功能,部署和操作相比Apollo都要直观简单,因此它简化了架构复杂度,并减轻运维及部署工作。

环境准备

Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:

  • 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  • 64 bit JDK 1.8+;下载 & 配置。

安装JAVA, 请  点击

安装

下载地址:https://github.com/alibaba/nacos/releases

wget https://github.com/alibaba/nacos/releases/download/2.2.0/nacos-server-2.2.0.tar.gz
tar zxvf nacos-server-2.2.0.tar.gz -C /usr/local/
chown -R root:root /usr/local/nacos

源码安装(不推荐)

安装Maven:http://qiangsh.blog.51cto.com/3510397/1771831

#下载
cd /data/packages/
wget https://github.com/alibaba/nacos/archive/refs/tags/2.1.0.tar.gz
tar zxvf nacos-2.1.0.tar.gz -C /data/apps/
#编译生成jar包
cd /data/apps/nacos-2.1.0
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
mv distribution/target/nacos-server-2.1.0-SNAPSHOT/nacos/target/nacos-server.jar distribution/target/
#创建软链接
ln -s /data/apps/nacos-2.1.0/distribution /usr/local/nacos

配置

启动Nacos,必须配置数据库,支持mysql数据库,所以添加一个数据库。

创建Nacos数据库

在/usr/local/nacos/conf目录中找到nacos-mysql.sql文件,执行该数据库脚本。

# mysql -h 127.0.0.1 -uroot -p
MySQL [(none)]> create database nacos_config default character set utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.01 sec)
MySQL [(none)]> use nacos_config;
Database changed
MySQL [nacos_test]> source /usr/local/nacos/conf/mysql-schema.sql;
............................
............................

............................
Query OK, 1 row affected (0.00 sec)

MySQL [nacos_test]>

授权用户

# mysql -h 127.0.0.1 -uroot -p
MySQL [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MySQL [mysql]> GRANT ALL ON nacos_config.* TO 'nacos'@'172.28.%' IDENTIFIED BY '123.com' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.01 sec)
MySQL [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MySQL [mysql]> exit
Bye

修改数据库配置

# cat /usr/local/nacos/conf/application.properties
##########################################################
### Default web server port:
server.port=8848

### Specify local server's IP:
nacos.inetutils.ip-address=172.28.254.221  #填写本机ip

### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1  #连接数

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=123.com

访问日志配置

创建访问日志路径

mkdir -p /data/logs/nacos

修改配置

vim /usr/local/nacos/conf/application.properties

#修改以下内容,⾮⽣产环境请关闭访问日志配置!

server.tomcat.accesslog.enabled=true
server.tomcat.basedir=/data/logs/nacos

系统参数配置

官方文档:https://nacos.io/zh-cn/docs/system-configurations.html 打开HTTPS

### 修改启动命令,添加 -Dcom.alibaba.nacos.client.naming.tls.enable=true
if [[ "$JAVA_OPT_EXT_FIX" == "" ]]; then
  nohup "$JAVA" ${JAVA_OPT} -Dcom.alibaba.nacos.client.naming.tls.enable=true nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
else
  nohup "$JAVA" "$JAVA_OPT_EXT_FIX" ${JAVA_OPT} -Dcom.alibaba.nacos.client.naming.tls.enable=true nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
fi

Nacos 系统参数介绍

官方文档:https://nacos.io/zh-cn/docs/system-configurations.html

单机模式启动

在/usr/local/nacos/bin文件夹下启动nacos

cd /usr/local/nacos/bin
chmod +x /usr/local/nacos/bin/startup.sh
chmod +x /usr/local/nacos/bin/shutdown.sh
#启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone

集群配置

官方文档:请点击 在nacos的解压目录nacos/的conf目录下,有配置文件cluster.conf,请每行配置成ip:port。(请配置3个或3个以上节点)

# vim /usr/local/nacos/conf/cluster.conf

#ip:port
172.28.253.227:8848
172.28.254.221:8848
172.28.254.27:8848
# cat /usr/local/nacos/conf/application.properties

### 将下面行的 ip 改为本机ip
nacos.inetutils.ip-address=172.28.254.27

集群模式启动

使用内置数据源

sh startup.sh -p embedded

使用外置数据源(Mysql数据源)

sh startup.sh

关闭服务

sh shutdown.sh
  • 启动脚本
cat << EOF >/usr/lib/systemd/system/nacos.service
[Unit]
Description=Nacos Service
After=network.target

[Service]
Type=forking
KillMode=control-group
ExecStart=/usr/local/nacos/bin/startup.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
ExecReload=/bin/kill -s HUP \$MAINPID
SuccessExitStatus=0 143
PrivateTmp=true
LimitNOFILE=1000000
LimitNPROC=100000
TimeoutStopSec=10s
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target
EOF

#启动:
systemctl daemon-reload
systemctl start nacos.service
systemctl status nacos.service
systemctl enable nacos.service

启动报错 Apr 20 19:02:50 ip-172-28-254-27 startup.sh: ERROR: Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! !!

解决:

#将JAVA_HOME 路径加到启动脚本中
sed -i '/#!\/bin\/bash/a JAVA_HOME=/usr/java/jdk1.8' /usr/local/nacos/bin/startup.sh

服务日志

  • 服务日志
tail -500f /usr/local/nacos/logs/nacos.log
  • 查看集群日志
tail -500f /usr/local/nacos/logs/nacos-cluster.log

image.png

  • 查看协议筏日志(leader选举)
tail -500f /usr/local/nacos/logs/protocol-raft.log

image.png

API 调用

Open API 指南:

#查看当前集群leader
curl -X GET '127.0.0.1:8848/nacos/v1/ns/raft/leader'

#查看当前集群Server列表
curl -X GET '127.0.0.1:8848/nacos/v1/ns/operator/servers' |jq

#查询服务列表
curl -X GET '127.0.0.1:8848/nacos/v1/ns/service/list?namespaceId=test&pageNo=1&pageSize=2' |jq

#查询实例列表
curl -X GET '127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.test.1' |jq


#查看系统当前数据指标
curl -X GET '127.0.0.1:8848/nacos/v1/ns/operator/metrics'


#服务注册
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

#服务发现
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'

#发布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"

#获取配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"

WEB登录

在浏览器输入http://localhost:8848/nacos进入Nacos的登录界面。

用户名:nacos;密码:nacos

image.png image.png

Nacos 监控手册

https://nacos.io/zh-cn/docs/monitor-guide.html

问题处理

请参阅:https://nacos.io/zh-cn/docs/faq.html