本文是根據螞蟻課堂餘勝軍老師的課程所作筆記,記錄的要點,部分本身的理解可能有所誤差,不當之處會進行修改。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 #註冊中心地址
實際上,只要將服務註冊到集羣上的一個節點,整個集羣的節點都能獲取到該服務