源碼位址: https://gitee.com/fighter3/eshop-project.git 持續更新中……
大家好,我是三分惡。
這一節我們來學習SpringCloud Alibaba體系中一個非常重要的元件——Nacos。
1、Nacos簡介
Nacos官方網站: https://nacos.io/zh-cn/
1.1、什麼是Nacos
Nacos是阿裡巴巴開源的一個動态服務發現、配置管理和服務管理平台。
Nacos英文全稱Dynamic Naming and Configuration Service,Na為naming/nameServer即注冊中心,co為configuration即注冊中心,service是指該注冊/配置中心都是以服務為核心。
Nacos 無縫支援一些主流的開源生态,使用Nacos,可以簡化服務發現、配置管理、服務治理及管理。
如果要把Nacas和SpringCloud Netflix的元件對标的話,那麼:
Nacos = Eureka/Consule + Config + Admin
1.2、Nacos基本原理
Nacos作為注冊中心分為server與client。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iZ4EjY4cDOmJTYiZTMxQWOyAzN0EGMzUGMjFTM1EDO38CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
Server采用Java編寫,為client提供注冊發現服務與配置服務。而client可以用多語言實作,client與微服務嵌套在一起,nacos提供sdk和openApi,如果沒有sdk也可以根據openApi手動寫服務注冊與發現和配置拉取的邏輯。
1.2.1、注冊中心原理
服務注冊方法:服務注冊的政策的是每5秒向nacos server發送一次心跳,心跳帶上了服務名,服務ip,服務端口等資訊。同時 nacos server也會向client 主動發起健康檢查,支援tcp/http檢查。如果15秒内無心跳且健康檢查失敗則認為執行個體不健康,如果30秒内健康檢查失敗則剔除執行個體。
1.2.2、配置中心原理
2、Nacos-Server服務部署
Nacos 依賴
Java環境來運作。如果是從代碼開始建構并運作Nacos,還需要配置
Maven環境。我們直接使用發行版,需要保證JDK版本在1.8以上。
Nacos Server 有兩種運作模式:
- standalone
- cluster
2.1、standalone 模式
我們使用win10來進行Nacos Server的standalone 模式的部署。
- 下載下傳nacos-server
從
https://github.com/alibaba/nacos/releases下載下傳nacos-server發行版。
官方推薦的版本是1.4.2或2.0.1。
按照官方推薦,我們來嘗(踩)鮮(坑)最新的發行版2.0.1,下載下傳壓縮包,下載下傳完成後解壓
- 啟動nacos-server服務
進入%path%\nacos\bin檔案夾,執行cmd指令
startup.cmd -m standalone
,其中-m standalone指定為單機模式,否則以cluster叢集模式啟動。
可以看到Nacos Server的位址,通路
http://192.168.31.39:8848/nacos/index.html需要登入,初始賬号/密碼是
nacos/nacos
登入之後可以看到Nacos的控制台。
Linux下部署Nacos-Server服務也是類似,同樣是先解壓發行壓縮包,然後執行啟動腳本啟動:
startup.sh -m standalone
這種預設情況下,我們的資料寫入了了嵌入式資料庫。不太友善觀察資料存儲的情況,nacos也提供了支援mysql資料源的能力。
注意:以下操作我在2.0.1版本失敗了,是以以下操作是基于1.4.2版本。
MySQL資料庫版本要求5.5以上。
- 建立資料庫庫,使用初始化檔案
初始化nacos-mysql.sql
- 修改
檔案,增加支援mysql資料源配置(目前隻支援mysql),修改mysql資料源的url、使用者名和密碼。conf/application.properties
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
### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
- 使用指令
啟動Nacos Serverstartup.cmd -m standalone
2.2、cluster 模式
開發和測試,我們直接用standalone 模式,OK,沒什麼問題。但是生産環境,為了保證Nacos的高可用,我們就得使用 cluster模式。
cluster 模式必須要用 MySQL,MySQL資料導入和上面一緻,然後改兩個配置檔案:
conf/cluster.conf
conf/application.properties
大緻如下:
- cluster.conf,填入要運作 Nacos Server 機器的 ip
192.168.100.155
192.168.100.156
192.168.100.157
- 修改NACOS_PATH/conf/application.properties,加入 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采用的一個Leader節點,多個Follower節點的叢集架構,資料一緻性算法采用的是Raft。
至于實戰,由于機器資源資源原因,這裡就不再示範。
下一節,我們會把服務注冊到Nacos注冊中心,敬請期待!
“簡單的事情重複做,重複的事情認真做,認真的事情有創造性地做!”——
我是三分惡,可以叫我老三/三分/三哥/三子,一個能文能武的全棧開發,咱們下期見!