应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等。
配置主要有以下几个特点:
配置对于程序是只读的,程序通过读取配置来改变自己的行为,但是程序不应该去改变配置
配置贯穿于应用的整个生命周期,应用在启动时通过读取配置来初始化,在运行时根据配置调整行为。如:启动时需要读取服务的端口号、系统在运行过程中需要读取定时策略执行定时任务等。
常见的有程序内部hard code,配置文件,环境变量,启动参数,基于数据库等
同一份程序在不同的环境(开发、测试、生产)、不同的集群(如不同的数据中心)经常需有不同的配置,所以需要有完善的环境、集群配置管理
在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了,不仅如此,分散中还包含着冗余,如下图:
下图显示了配置中心的功能,配置中心将配置从各应用中剥离出来,对配置进行统一管理,应用自身不需要自己去管理配置。
配置中心的服务流程如下:
用户在配置中心更新配置信息。
服务A和服务B及时得到配置更新通知,从配置中心获取配置。
总得来说,配置中心就是一种统一管理各种应用配置的基础服务组件。
在系统架构中,配置中心是整个微服务基础架构体系中的一个组件,如下图,它的功能看上去并不起眼,无非就是配置的管理和存取,但它是整个微服务架构中不可或缺的一环。
总结一下,在传统巨型单体应用纷纷转向细粒度微服务架构的历史进程中,配置中心是微服务化不可缺少的一个系统组件,在这种背景下中心化的配置服务即配置中心应运而生,一个合格的配置中心需要满足如下特性:
配置项容易读取和修改
分布式环境下应用配置的可管理性,即提供远程管理配置的能力
支持对配置的修改的检视以把控风险
可以查看配置修改的历史记录
不同部署环境下应用配置的隔离性
现在市场主流的配置中心有
1springcloud的config(spring官方的开源项目)
2Apollo(携程的)
3Nacos(阿里官方的)
从配置中心的角度来看,性能方面Nacos最高,Apollo次之,Spring Cloud Config依赖Git场景不适合开放的大规模自动化运维API。功能方面Apollo最为完整,Nacos具有Apollp大部分配置管理功能,而Spring Cloud Config 不带运维管理界面,需要开发开发。Nacos的一大优势是整合了注册中心,配置中心功能,部署和操作相比Apollo都要直观简单,因此它简化了架构复制度,并减轻运维及部署工作。
Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现,配置管理,服务治理的综合型的解决方案。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速 实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos帮助你更敏捷和容易地构建、交付和管理微服务平台、Nacos是构建以“服务”为中心的现代应用架构
官网地址:https://nacos.io
Nacos主要提供四大功能
1服务发现与健康检查
2动态配置管理
3动态DNS服务
4服务与元数据管理
安装Nacos Server
1.预备环境准备
Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:
64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
64 bit JDK 1.8+;下载 & 配置。
Maven 3.2.x+;下载 & 配置。
下载源码或者安装包
你可以通过源码和发行包两种方式来获取 Nacos。
从 Github 上下载源码方式
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
ls -al distribution/target/
// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin
下载编译后压缩包方式
官网下载:Releases · alibaba/nacos · GitHub
您可以从 最新稳定版本 下载 nacos-server-$version.zip 包。
unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
cd nacos/bin
3.启动服务器
Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
Windows
启动命令(standalone代表着单机模式运行,非集群模式):
startup.cmd -m standalone
关闭服务器
Linux/Unix/Mac
sh shutdown.sh
Windows
shutdown.cmd
或者双击shutdown.cmd运行文件
物品中出现java.io.IOException: java.lang.IllegalArgumentException: db.num is null
set MODE="cluster"为
set MODE="standalone"
先确认你要下载的版本,然后执行命令即可。
第一步、下载Nacos:
wget https://github.com/alibaba/nacos/releases/download/2.0.4/nacos-server-2.0.4.tar.gz
第二步、解压Nacos。
#创建文件夹
mkdir /usr/local/java/nacos
#解压缩
tar -zxvf nacos-server-2.1.0.tar.gz -C /usr/local/java/nacos
意思是在当前目录下创建nacos并解压到nacos目录。
第三、执行脚本运行Nacos。
我们进入到nacos的bin目录,查看一下脚本情况:
[fangdake@localhost nacos]$ cd bin
[fangdake@localhost bin]$ ll
总用量 20
-rwxr-xr-x. 1 fangdake fangdake 954 3月 30 2021 shutdown.cmd
-rwxr-xr-x. 1 fangdake fangdake 951 3月 30 2021 shutdown.sh
-rwxr-xr-x. 1 fangdake fangdake 3368 12月 8 20:22 startup.cmd
-rwxr-xr-x. 1 fangdake fangdake 5136 12月 8 20:22 startup.sh
看到有四个脚本,分别是关闭和启动nacos的脚本,注意,cmd结尾的是windows下启动的脚本命令,sh结尾的才是我们要使用的Linux下的。
此时我们执行命令启动脚本:
./startup.sh
# 或者
sh startup.sh
上面说到,我们是以集群模式启动的,看这条输出的日志即可:
nacos is starting with cluster
第四步:修改配置文件
以集群模式启动需要数据库持久化,我们修改这个启动脚本将它修改为单机模式。我们编辑启动脚本startup.sh,找到standalone复制,然后再把MODE修改为standalone即可。
编辑 vim startup.sh,修改
1.找到export MODE
=> 修改export MODE="standalone"
或者在开头修改nacos的startup.sh文件开头添加当前的jdk路径,其他地方无需修改
JAVA_HOME=/software/java/jdk1.8.0_251
单机模式默认堆大小为 512m,可以修改 startup.sh 脚本去调整
创建数据库nacos
,数据表 sql 文件是 nacos/conf/nacos-mysql.sql
,导入即可
配置文件路径为 nacos/conf/application.properties
$ cd nacos/conf/
$ vim application.properties
$server.port=8888
将数据库相关配置注释打开,修改用户名密码,保存并退出
#mysql
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
换成自己的数据库连接信息。然后保存并退出,这样我们的nacos持久化就配置好了,然后启动nacos,点击nacos的bin目录下的start.cmd:
$ tail -f /home/ubuntu/nacos/nacos-standalone/nacos/logs/start.out
开机自启
vim /lib/systemd/system/nacos.service
输入 i 进入插入模式
添加
[Unit]
Description=nacos
After=network.target
[Service]
Type=forking
#改成自己的jdk路径,因为服务脚本的环境和系统环境变量不能共享,所以还得设置才能生效。
Environment="JAVA_HOME=/usr/local/jdk1.8"
#standalone 是单机,默认是集群cluster
ExecStart=/usr/local/java/nacos/bin/startup.sh -m standalone
ExecReload=/usr/local/java/nacos/bin/shutdown.sh
ExecStop=/usr/local/java/nacos/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
按 esc 退出插入模式
按:wq 保存
执行以下命令
先进行文件生效配置
systemctl daemon-reload
设置为开机启动:
systemctl enable nacos.service
启动nacos服务
systemctl start nacos.service
查看该service是否开机启用
systemctl is-enabled nacos.service
1、拉取镜像
docker pull nacos/nacos-server
2、挂载目录
mkdir -p /mydata/nacos/logs/ #新建logs目录
mkdir -p /mydata/nacos/init.d/
vim /mydata/nacos/init.d/custom.properties #修改配置文件
3、mysql新建nacos的数据库,并执行脚本
下载地址
https://github.com/alibaba/nacos/blob/master/config/src/main/resources/META-INF/nacos-db.sql
4、修改配置文件custom.properties
server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://xx.xx.xx.x:3306/nacos_devtest_prod?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=user
db.password=pass
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
nacos.naming.distro.taskDispatchThreadCount=1
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.naming.expireInstance=true
5、启动容器
docker run \
--name nacos -d \
-p 8848:8848 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-v /mydata/nacos/logs:/home/nacos/logs \
-v /mydata/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
nacos/nacos-server
6、浏览器输入服务器地址:http://xxx.xxx.xx.xx:8848/nacos/index.html,账号nacos 密码nacos,登陆成功!
7.配置数据库
查看自定义网络中各容器ip
//查看网络
docker network ls
//查看网络容器
docker network inspect common-network
进入nacos容器修改配置
// 进入容器
docker exec -it nacos bash
// 修改容器配置
cd conf
vi application.properties
创建数据库表(脚本地址)
https://github.com/alibaba/nacos/blob/develop/distribution/conf/nacos-mysql.sql
重启容器
docker restart nacos
nacos管理平台(新增配置 ,然后可在数据库查看)
http://ip:8848/nacos/index.html
nacos/nacos(用户名密码)
服务注册
启动nacos成功后、可通过nacos提供的http、api验证nacos服务是否正常运行
下边我们通过curl工具来测试nacos的open api;
curl是开发中的常用命令行,可以做Http协议测试。
本教程下载cur的windows版本:下载地址:http://curl.haxx.se/windows/
步骤
下载curl安装包:wget http://curl.haxx.se/download/curl-7.38.0.tar.gz
解压:tar -xzvf curl-7.38.0.tar.gz
进入解压后的curl文件夹:cd curl-7.38.0
输入: ./configure --prefix=/usr/local/curl
输入:make && make install
检查安装是否成功:curl --version
发布配置
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"
下载完成进入crul的bin目录进行下边的测试,通过测试可判断nacos是否正常工作
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'
第一种启动方式:
进入nacos的解压目录\bin下
以notepad++方式打开startup.cmd
然后修改大概在26行的set MODE="cluster"为set MODE="standalone"
直接点击startup.cmd命令,就启动成功了
第二种启动方式:
在黑窗体环境下切换目录到nacos/bin下,然后输入命令startup.cmd -m standalone