文章目錄
- 1. Nacos介紹
-
- 1.1 什麼是Nacos
- 1.2 主流的注冊中心的介紹和對比
- 1.3 Nacos架構
- 2. Nacos的部署
-
- 2.1 下載下傳源碼編譯
- 2.2 下載下傳安裝包
- 2.3 啟動
-
- 2.3.1 單機模式
- 2.3.2 叢集模式
-
- 2.3.2.1 搭建單機僞叢集模式
- 2.4 prometheus + grafana監控Nacos
- 3. Nacos的核心功能
-
- 3.1 服務注冊
- 3.2 服務心跳
- 3.3 服務同步
- 3.4 服務發現
- 3.5 服務健康檢查
- 3.6 Nacos的整體架構
- 3.7 服務系統資料庫結構
- 3.8 服務領域模型
- 3.9 服務執行個體資料
- 4. Spring Cloud Alibaba的Nacos的快速開始
-
- 4.1 Spring Cloud Alibaba版本的選型
- 4.2 搭建Nacos-client服務
-
- 4.2.1 引入pom依賴
- 4.2.2 application.properties檔案中配置
- 4.2.3 啟動springboot應用,觀察是否注冊成功
- 4.2.4 測試
1. Nacos介紹
1.1 什麼是Nacos
- 官方文檔:Nacos的官方文檔
- Nacos緻力于幫助發現,配置和管理微服務。Nacos提供了一組簡單易用的特性集,讓我們更快的實作動态服務發現,服務配置,服務中繼資料以及流量管理。
- Nacos的關鍵特性包括:
- 服務發現和服務健康檢測
- 動态配置服務
- 動态DNS服務
- 服務以及其中繼資料管理
1.2 主流的注冊中心的介紹和對比
- Nacos是比較特殊的,有AP和CP兩個模式
- Nacos的臨時節點是存儲在記憶體中的,下線直接删除,是AP模式
- Nacos的持久節點是存儲在磁盤中的的,一般我們是用Mysql存儲,是CP模式
1.3 Nacos架構
- NamingService:命名服務,注冊中心核心接口
- ConfigService:配置服務,配置中心核心接口
- OpenAPI文檔:openAPI文檔
2. Nacos的部署
2.1 下載下傳源碼編譯
- 源碼下載下傳位址:下載下傳位址
cd nacos/
mvn -Prelease-nacos clean install -U
2.2 下載下傳安裝包
- 下載下傳位址:下載下傳位址
2.3 啟動
- 我們的nacos的啟動預設是叢集模式啟動的
-
我們分為兩種:
(1)叢集模式啟動
(2)單機模式啟動
2.3.1 單機模式
- 官方文檔:官方文檔
- 解壓,進入nacos的目錄
- 單機啟動nacos,執行指令
bin/startup.sh -m standalone
注意,我們這裡加上了-m standalone ,加上這個之後就成為了單機模式,如果什麼都不加的話則是叢集模式
- 同樣我們也可以修改啟動方式
- 通路nacos的管理端,http://ip:8848/nacos,預設的使用者名密碼是:nacos/nacos
2.3.2 叢集模式
- 官網文檔:官網文檔
- 叢集部署的架構圖
由此可見,我們的nacos的叢集其實是利用nginx進行通路的。
2.3.2.1 搭建單機僞叢集模式
- 單機搭建僞叢集,複制nacos的安裝包,修改為nacos8849,nacos8850,nacos8851
-
以nacos8849為例,進入nacos8849的目錄
(1)修改conf/application.properties的配置檔案,使用外置資料源
#使用外置mysql資料源
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?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
(2)将conf/cluster.example修改為cluster.conf,添加節點配置
# ip:port
192.168.3.14:8849
192.168.3.14:8850
(3)nacos8850和nacos8851按照同樣的方式進行配置
- 建立mysql資料庫,sql檔案的位置是在:conf/nacos-mysql.sql
- 修改啟動腳本,該腳本在bin/startup.sh的JVM參數
- 分别啟動nacos8849,nacos8850,nacos8851,這裡我們以nacos8849為例,進入nacos8849的目錄,啟動nacos
bin/startup.sh
6. 測試
- 登入http://ip:8849/nacos,使用者名和密碼都是nacos
- 配置nginx,利用nginx的反向代理來完成nacos的叢集統一入口
配置完成之後,我們可以通路http://nginx的ip:8847(上面nginx監聽的是8847)/nacos
以此通過反向代理來完成nacos的叢集通路
2.4 prometheus + grafana監控Nacos
- 文檔:Nacos的監控手冊
- Nacos0.8.0版本完善了監控系統,支援通過暴露metrics資料接入第三方監控系統監控Nacos的運作狀态。
- Nacos暴露metrics資料
- 測試:通路http://localhost:8848/nacos/actuator/prometheus
- prometheus采集Nacos metrics資料
- 啟動prometheus服務
prometheus.exe --config.file=prometheus.yml
- 測試:通路http://localhost:9090/graph
- grafana展示metrics的資料
- 測試:http://localhost:3000/
3. Nacos的核心功能
- Nacos的核心功能主要有:
- 服務注冊
- 服務心跳
- 服務同步
- 服務發現
- 服務健康檢查
3.1 服務注冊
- Nacos Client會通過發送REST請求的方式向Nacos Server注冊自己的服務,提供自身的中繼資料,比如IP位址,端口信心等。Nacos Server接受到注冊請求之後,就會把這些中繼資料資訊存儲在一個
。雙層的記憶體Map中
注意:這個雙層map,第一個key是namespace,第二個key是group:servicename組合而成,是以我們的nacos是以namespace和group進行執行個體區分的,其他的像是cluster與version需要程式手動控制隔離。
3.2 服務心跳
- 在服務注冊之後,Nacos Client會維護一個定時心跳來持續通知Nacos Server,說明服務一直是處可用狀态的,防止被剔除,預設是5s發送一次心跳
3.3 服務同步
- Nacos Server叢集之間會互相同步服務執行個體,用來保證服務資訊的一緻性,leader raft。
- 具體的Raft協定,我們在另外的部落格中進行了詳細的解釋
3.4 服務發現
- 服務消費者(Nacos Client)在調用服務提供者的服務的時候,會發送一個Rest請求給Nacos Server,擷取上面注冊的服務清單,并且緩存在Nacos Client本地,同時會在Nacos Client本地開啟一個定時任務定時拉取服務端最新的系統資料庫資訊更新到本地緩存。
3.5 服務健康檢查
- Nacos Server會開啟一個定時任務用來檢查注冊服務執行個體的健康狀态,對于超過
沒有收到用戶端心跳的執行個體會将他的healthy屬性設定為false15s
- 用戶端服務發現的時候不會發現healthy屬性是false的執行個體
- 如果某個執行個體在
之後還是沒有收到心跳,則直接被剔除30s
- 剔除的執行個體如果恢複了,重新發送心跳則會進行重新注冊。
3.6 Nacos的整體架構
3.7 服務系統資料庫結構
3.8 服務領域模型
3.9 服務執行個體資料
- 我們直接通路固定API的請求
4. Spring Cloud Alibaba的Nacos的快速開始
4.1 Spring Cloud Alibaba版本的選型
4.2 搭建Nacos-client服務
4.2.1 引入pom依賴
- 引入版本的管理,在父pom檔案中引入
<dependencyManagement>
<dependencies>
<!--引入springcloud的版本-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 在目前項目中引入依賴
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
4.2.2 application.properties檔案中配置
- 注意:
server-addr後面的内容不需要寫協定,就是不寫http這些的
# nacos的配置
spring:
cloud:
nacos:
discovery:
# 遠端位址,記得不要寫協定,就是在最前面不要寫http
server-addr: 192.168.0.108:8848
- 更多的配置可以參考:Nacos的更多的配置
4.2.3 啟動springboot應用,觀察是否注冊成功
- 啟動之後,登入nacos的管理頁面
4.2.4 測試
- 使用RestTemplate進行服務調用
-
注意:我們這裡是直接使用微服務名字進行調用的,那麼我們就需要使用@LoadBalance注解
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
- 到這裡我們的nacos已經安裝完畢了,并且測試成功。