一、 nacos 下載及安裝
nacos 官網下載 nacos-server-1.2.0-beta.1.tar.gz 解壓
執行 startup.cmd 命令
訪問 localhost:8848/nacos
賬號: nacos
密碼: nacos
二、創建cloudalibaba-provider-payment9001 項目‘
1.添加 spring cloud alibaba nacos 依賴
<dependencies>
<!-- SpringCloud alibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- web組件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.sc2020</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2.修改 application.yml 配置
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
management:
endpoints:
web:
exposure:
include: "*"
3.啓動類添加 註解:@EnableDiscoveryClient
4.消費者服務也需要註冊到nacos註冊中心,使用restTemplate或者feign調用接口即可
5. nacos 與 其他註冊中心特性對比
6. Nacos 中 AP和CP模式的切換(NACOS支持AP和CP模式的切換)
C是 所有的節點在同一時間看到的數據是一致的,而A的定義是所有的請求都會收到響應。
何時選擇使用何種模式?
一般來說,
如果不需要存儲服務級別的信息且服務實例是通過nacos-client 註冊,並能夠保持心跳的上報,那麼就可以選擇AP模式。當前主流的服務如 spring cloud 和 duboo 服務,都適用於 AP模式,AP模式爲了服務的可能性而減弱了一致性,因此AP模式下只支持註冊臨時實例。
如果在服務級別編輯或者存儲配置信息,那麼CP是必須,K8S服務和DNS服務則適用於CP模式,CP模式下則支持註冊持久化實例,此時則是以Raft協議爲集羣運行模式,該模式註冊實例之前必須先註冊服務,如果服務不存在,則返回錯誤。
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
7. NACOS 作爲分佈式配置中心
(1)pom文件添加依賴
<dependencies>
<!-- SpringCloud alibaba nacos config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud alibaba nacos discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- web組件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.sc2020</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
(2)編寫 bootstrap.yml文件
# nacos 配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos 服務註冊中心地址
config:
server-addr: localhost:8848 #nacos 服務註冊中心地址
file-extension: yaml #指定yaml格式的配置
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
(3) 編寫 application.yml
spring:
profiles:
active: dev #表示開發環境
(4) 服務啓動類添加 @EnableDiscoveryClient
控制層controller 添加 @RefreshScope 以支持nacos的動態刷新功能
使用 @Value註解 即可讀取到 nacos 配置中心的配置項內容
最後公式 : ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
nacos ui 頁面創建配置項
8. 命名空間 、分組和DataID 三者關係
默認清庫:
Namespace = public ,Group = DEFAULT_GROUP , 默認cluster 是 DEFAULT.
不使用默認的 group的情況下,可以在nacos 上創建 不同的 group,只需在bootstrap.yml文件中指定相應的 nacos config group
配置項即可。
不使用 nacos 的默認命名空間的情況下,可以 新建其他的命名空間,新建完成之後 會生成一個命名空間序列號。如下所示在 bootstrap.yml中配置即可。
9.nacos 的 集羣介紹
(1) nacos 默認自帶的是嵌入式數據庫derby,可以查看 https://github.com/alibaba/nacos/blob/develop/config/pom.xml 得知引入的有apache derby 數據庫依賴。
(2)derby 數據庫切換到 mysql 數據庫的配置步驟
nacos-server-1.1.4 /nacos/config 目錄下找到sql腳本 ,執行 nacos-mysql.sql腳本 建表。
創建的數據庫名稱爲:nacos_config
nacos-server-1.1.4/nacos/config 目錄下找到application.properties ,在最後面添加 mysql相關的配置項
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=1234
配置完成之後重啓 nacos 即可,此時可以看到一個全新的空記錄界面,之前是數據被記錄到derby中,現在是數據記錄到mysql 中。
10. Linux 版本nacos 集羣搭建
1個nginx + 3個nacos + 1個mysql 數據庫配置
正常情況下 高可用需要 多個nginx 實例,這裏爲了方只配置一個nginx實例。
(1)將nacos默認的數據庫derby 切換到 mysql。
下載安裝linux 版本的nacos ,解壓後 找到 config 目錄下的nacos-mysql.sql腳本並執行建表語句,修改 application.properties ,添加 同9(nacos集羣的介紹)中的mysql 相關配置項。
(2)複製 cluster.config.example 爲 cluster.config 配置文件
cp cluster.config.example cluster.config
向 cluster.config 配置文件中添加如下信息用來說明以下三個nacos節點作爲一個集羣。
192.168.100.120:3333
192.168.100.120:4444
192.168.100.120:5555
注意: 這裏的ip地址不能直接寫成127.0.0.1,則應寫成 linux命令hostname -i可以識別的ip地址。
(3) 複製 startup.sh 爲 startup.sh.bk 作爲一個備份文件,防止我們將startup.sh 修改壞了。
需要修改以下 三個地方:
添加 :p
$PORT = $OPTARG;;
-Dserver.port = ${PORT}
執行命令依次啓動三個 nacos 節點:
startup -p 3333
startup -p 4444
startup -p 5555
(4) 配置 nginx
啓動 nginx ,執行 nginx -c /usr/local/nginx/conf/nginx.conf
訪問 http://192.168.100.120:1111/nacos/#/login 測試 通過nginx 訪問nacos
執行命令 ps -ef | grep nacos | grep -v grep | wc -l 返回 3 ,說明三個nacos 節點已正常啓動。
最後將 項目 的application.yml中的 nacos server-addr 修改爲 nginx 的訪問地址(192.168.100.120:1111)即可。