本文是根据蚂蚁课堂余胜军老师的课程所作笔记,记录的要点,部分本身的理解可能有所误差,不当之处会进行修改。java
若是生产环境正在运行的时候忽然须要修改配置文件的话,必须重启服务器。mysql
分布式配置中心就是使用专门的服务器统一存放管理咱们整个的微服务的配置文件,可以彻底动态实现对咱们配置文件修改、新增,是否须要重启咱们的服务器。nginx
Nacos是将门户网站、配置中心、注册中心都部署在同一个应用中,就是一个单体的应用。git
首先建立一个项目,依赖以下github
<parent> <groupId>org.springframework.boot</groupId> <version>2.0.0.RELEASE</version> <artifactId>spring-boot-starter-parent</artifactId> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId> <version>2.0.0.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-nacos-config</artifactId> <version>2.0.0.RELEASE</version> </dependency> </dependencies>
配置文件以下,要注意下面的配置文件不是在application中,而是在bootstrap.yml的配置文件中。bootstrap.yml属于整个应用程序配置,最早被加载。web
spring: cloud: nacos: discovery: server-addr: 39.97.169.159:8848 #注册中心地址 config: server-addr: 39.97.169.159:8848 #配置中心地址 group: DEFAULT_GROUP file-extension: properties application: name: config-nacos #服务名
在Nacos配置中心新建一个配置spring
Data ID要与项目的服务名一致。sql
在配置中心的配置文件中添加属性github.name,咱们在本地应用上获取并使用。数据库
@Value("${github.name}") private String name; @GetMapping("/config") public String getConfig() { return name; }
要在程序运行时可以动态修改配置文件,须要使用注解@RefreshScopebootstrap
就像SpringBoot的多环境配置同样服务名-dev.yaml
或者服务名-prd.yaml
,只须要在本地指定激活的环境便可
profiles: active: dev
nacos单机模式使用嵌入式数据库来实现数据的存储。也可使用mysql数据源来存储。
须要初始化数据库,sql文件nacos-mysql.sql
集群,只须要用mysql数据源持久化存储数据,让多个nacos配置中心都访问mysql数据库便可。
在mysql中新建一个数据库nacos-config,执行上面的sql文件
在nacos的conf的配置文件application.properties中添加以下配置
spring.datasource.platform=mysql # 数据库的数量以及url,根据状况配置 db.num=1 db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true #数据库的用户名 db.user=nacos_devtest #数据库的密码 db.password=youdontknow
这里是在一台服务器上进行的配置,准备三个Nacos,修改配置文件分别使用8848,8849,8850端口,数据库配置一致。
在nacos的conf目录下,建立cluster.conf配置文件,每行为ip:port。注意,ip为内网地址,不要为127.0.0.1,不然会报错
172.x.x.x:8848 172.x.x.x:8849 172.x.x.x:8850
启动nacos
sh startup.sh -p embedded
使用内置数据源
sh startup.sh
使用外置数据源,咱们采用这种方式启动
若多个nacos启动失败,多是内存不足的问题,修改启动脚本start.sh。可适当将-server后的jvm内存分配参数调小,系统默认的是:-server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m
#=========================================================================================== # JVM Configuration #=========================================================================================== if [[ "${MODE}" == "standalone" ]]; then JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m" JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true" else JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=64m -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
配置nginx,修改nginx的conf目录下的nginx.conf配置文件
http { ... #集群节点的地址 upstream nacoscluster { server 127.0.0.1:8848; server 127.0.0.1:8849; server 127.0.0.1:8850; } server { listen 80; server_name localhost; ... location /nacos/ { proxy_pass http://nacoscluster/nacos/; } } }
启动nginx后,直接访问nginx服务器地址+/nacos即可以访问集群.
登入管理页面,能够看到集群的节点列表
直接将集群的地址配置在配置文件中便可
spring: cloud: nacos: discovery: server-addr: ip:8848,ip:8849,ip:8850 #注册中心地址
实际上,只要将服务注册到集群上的一个节点,整个集群的节点都能获取到该服务