简介
由于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
- 查看协议筏日志(leader选举)
tail -500f /usr/local/nacos/logs/protocol-raft.log
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
Nacos 监控手册
https://nacos.io/zh-cn/docs/monitor-guide.html