PS
: 本篇博客為作者學習筆記實際技術(shù)參考意義不大,小編將持續(xù)更新完善本篇文章。
Nacos服務注冊配置中心,一個更易于構(gòu)建云原生應用的動態(tài)服務發(fā)現(xiàn),配置管理和服務管理平臺,屬于Springcloud Alibaba 體系中的組件之一,也是目前企業(yè)開發(fā)中最流行的服務注冊與配置中心。
更多詳細信息各位小伙伴可以參照Springcloud Alibaba官網(wǎng): 點擊跳轉(zhuǎn)官網(wǎng)
Nacos源碼地址: 點擊跳轉(zhuǎn)源碼地址
Nacos官網(wǎng)地址: 點擊跳轉(zhuǎn)官網(wǎng)
一些注冊中心特性對比:
Nacos既可以在Windows上使用,也可以在Linux上面使用,下面兩種系統(tǒng)的Nacos安裝小編都會介紹到,首先我們要準備好Nacos的安裝包,點進入Nacos的倉庫 點擊跳轉(zhuǎn)。
點擊 【發(fā)行版】就可以看到Nacos的全部歷史版本
點擊 【標簽】可以選擇想要的版本下載
選擇好版本點擊最右邊的【下載】后翻到最下面就可以看到對應的下載文件,【zip】則是windows版本 【tar.gz】就是Linux使用的版本。
準備好Windows環(huán)境下的安裝包后,就可以開始Windows環(huán)境下Nacos的安裝了。
將準備好的安裝包解壓到任意目錄下(最好是全英文的路徑)解壓后文件夾內(nèi)結(jié)構(gòu)如下:
bin目錄是存放啟動腳本的目錄 conf目錄是存放Nacos配置文件的目錄。
關(guān)于端口配置,Nacos的默認端口是8848
,如果你電腦上的其它進程占用了8848端口,請先嘗試關(guān)閉該進程。如果無法關(guān)閉占用8848端口的進程,也可以進入nacos的conf目錄,修改配置文件中Nacos默認啟動占用的端口:
確認端口沒有問題后就可以進入bin目錄啟動cmd窗口,使用下面的命令啟動Nacos:
startup.cmd -m standalone
也可以直接雙擊startup.cmd文件啟動Nacos
看到上面這個樣子就是啟動成功了,也標明了啟動占用的端口和后臺的訪問地址。
我們用瀏覽器直接訪問http://127.0.0.1:8848/nacos
即可,正常情況下會看到下面的內(nèi)容:
默認的用戶名和密碼都是 nacos 直接登錄即可,至此Windows環(huán)境下安裝Nacos就完成了
對于Linux環(huán)境下Nacos安裝相對于Windows環(huán)境下的安裝要復雜一點,首先要準備好Linux版本的Nacos安裝包,其次Nacos依賴于JDK運行,索引Linux上也需要安裝JDK才行。
沒有安裝java環(huán)境的小伙伴可以參考小編這篇文章 點擊跳轉(zhuǎn) 配置好java環(huán)境后就可以開始我們的安裝了。
首先將我們準備好的安裝包上傳到任意目錄,列如/usr/local/
然后使用下面的命令進行解壓:
tar -xvf nacos-server-1.4.1.tar.gz
然后執(zhí)行下面的命令刪除安裝包:
rm -rf nacos-server-1.4.1.tar.gz
1. 單擊模式啟動首先進入到已經(jīng)解壓好的Nacos目錄的bin目錄下:
cd /usr/local/nacos/bin
執(zhí)行下面的命令啟動Nacos:
sh startup.sh -m standalone
下面的情況是正常啟動了
停止Nacos的命令:
sh shutdown.sh
2. 集群模式啟動集群模式的啟動需要先創(chuàng)建數(shù)據(jù)庫,腳本位置:/usr/local/nacos/conf/nacos-mysql.sql
利用該腳本創(chuàng)建數(shù)據(jù)庫。
緊接著我們需要配置一下Nacos的配置文件:
cd /usr/local/nacos/conf
vim application.properties
修改下面的內(nèi)容(將原來的注釋放開,)
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://10.114.12.177:3306/nacos?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
注意:此處的ip地址、端口號、數(shù)據(jù)庫名、賬號和密碼都需要按照自己的實際情況進行修改
。
啟動:
cd /usr/local/nacos/bin
sh startup.sh
查看啟動日志:
cd /usr/local/nacos/logs
vim start.out
3. 遠程web控制我們可以執(zhí)行下面的命令放行當前主機的8848端口,以便我們訪問遠程的web控制臺:
firewall-cmd --zone=public --add-port=8848/tcp --permanent
放行完端口再執(zhí)行下面的命令重啟一下當前主機的防火墻:
firewall-cmd --reload
緊接著我們就可以訪問http://當前主機地址:8848/nacos
就會出現(xiàn)下面的情況:
默認的用戶名是: nacos 默認的密碼也是: nacos
為了更加方便的管理Nacos,最好是將其注冊為系統(tǒng)服務
首先使用下面的命令修改 /usr/local/nacos/bin/startup.sh 啟動文件
vim /usr/local/nacos/bin/startup.sh
將路徑修改為當前系統(tǒng)中存放jdk的路徑:
使用下面的命令創(chuàng)建并編輯nacos.service
文件:
vim /lib/systemd/system/nacos.service
向文件中添加下面的內(nèi)容:
[Unit]
Description=nacos
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nacos/bin/startup.sh -m standalone
ExecReload=/usr/local/nacos/bin/shutdown.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
保存退出后執(zhí)行下面的命令重載一下系統(tǒng)服務:
systemctl daemon-reload
就完成了Nacos的系統(tǒng)服務注冊,服務名就叫nacos
。
之后我們就可以使用操作系統(tǒng)服務的命令對Nacos進行操作了,下面是一些常用命令:
systemctl start nacos.service // 啟動nacos服務
systemctl stop nacos.service // 停止nacos服務
systemctl status nacos.service // 查看nacos服務狀態(tài)
systemctl enable nacos.service // 設(shè)置為開機自啟
systemctl restart nacos.service // 重啟nacos服務
systemctl reload nacos.service // 重載nacos服務 (推薦使用)
三. 基本使用
1. 添加依賴要想使用Nacos首先要在父工程
的POM文件中添加下面的依賴:
com.alibaba.cloud spring-cloud-alibaba-dependencies 2.2.5.RELEASE pom import
然后修改子工程的POM文件,將下面的依賴加入其中:
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
2. 服務注冊spring:
application:
name: orderservice # 服務名
cloud:
nacos:
server-addr: 127.0.0.1:8848 # 服務地址
再啟動服務就可以在后臺管理界面中的【服務列表】選項卡的子選項卡 【服務列表】中找到我們注冊的服務。
在消費者進行服務調(diào)用的時候也就可以通過服務名進行調(diào)用了(orderservice代替id地址和端口),且Nacos自帶了負載均衡。
配置當前服務的實例歸屬于哪個集群
修改模塊的Yml配置文件:
spring:
application:
name: orderservice # 服務名 可以通過相同的服務名部署多個實例
cloud:
nacos:
server-addr: 127.0.0.1:8848 # 服務地址
discovery:
cluster-name: hangzhou # 集群名
在web控制臺中可以看到集群的信息,再編輯Yml配置文件設(shè)置負載均衡的1Rule為NacosRule,這個規(guī)則優(yōu)先會尋找與自己同集群的服務,本地集群找不到提供者,才去其它集群尋找,并且會報警告。
確定了可用實例列表后,再采用隨機負載均衡挑選實例。
userservice:
ribbon:
# 優(yōu)先請求同集群的實例
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
4. 實例權(quán)重負載均衡實際部署中會出現(xiàn)這樣的場景:服務器設(shè)備性能有差異,部分實例所在機器性能較好,另一些較差,我們希望性能好的機器承擔更多的用戶請求。
Nacos提供了權(quán)重配置來控制訪問頻率,權(quán)重越大則訪問頻率越高。
默認權(quán)重都是1,在服務升級和優(yōu)化時可以將該服務權(quán)重設(shè)置成0,該服務就不會再收到請求。
Nacos中服務存儲和數(shù)據(jù)存儲的最外層都是一個名為namespacel的東西,用來做最外層隔離。
修改實例的命名空間需要修改服務的配置文件,默認都是存儲在public(保留空間中):
spring:
application:
name: orderservice # 服務名 可以通過相同的服務名部署多個實例
cloud:
nacos:
server-addr: 127.0.0.1:8848 # 服務地址
discovery:
cluster-name: hangzhou # 集群名
namespace: 4d6ce343-9e1b-44df-a90f-2cf2b6b3d177 # dev環(huán)境 命名空間Id
注意
: 只有相同命名空間的服務實例才可以相互調(diào)用
默認在Nacos中注冊的實例都是臨時實例,那么臨時實例與非臨時實例有什么區(qū)別呢?
臨時實例: 采用心跳檢測(服務每隔一段時間就會發(fā)送一次請求給注冊中心Nacos確保實例的可用性)當長時間沒有向Nacos發(fā)送心跳請求Nacos就會在服務列表中將該實例剔除。
非臨時實例: 不會擁有心跳檢測機制,而是由Nacos主動發(fā)送請求詢問實例,如果檢測到非臨時實例Nacos不會將其剔除,而是標記為不健康狀態(tài)除非手動刪除,否則會一直等待其恢復健康狀態(tài)。
對于配置實例是否為臨時實例需要配置實例的YAM配置文件:
spring:
application:
name: orderservice # 服務名 可以通過相同的服務名部署多個實例
cloud:
nacos:
server-addr: 127.0.0.1:8848 # 服務地址
discovery:
cluster-name: hangzhou # 集群名
namespace: 4d6ce343-9e1b-44df-a90f-2cf2b6b3d177 # dev環(huán)境 命名空間Id
ephemeral: false # 是否為臨時實例 默認是true
四. Nacos配置管理
1. Nacos實現(xiàn)配置熱更新Nacos處理可以擔任服務注冊中心,還可以擔任服務的配置中心,首先我們需要在模塊的POM文件中添加Nacos的配置管理依賴:
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config
然后我們在后臺管理界面中點擊【配置管理】的【配置列表】模塊右上角的加號先添加一個。
【Data ID】其實就是配置文件名 (必須唯一) 一般以“服務名-運行環(huán)境.后綴
” 作為文件名列如
:userservice-dev.yaml
【Group】組ID 這個自定義
【配置格式】一般都是使用YAML,根據(jù)后綴自定義
【配置內(nèi)容】根據(jù)選擇的文件格式書寫有熱更新需求的配置
修改完成后點擊右下角的【發(fā)布】即可,由于在讀取Nacos中的配置文件之前我們實例就需要知道Nacos的服務地址等信息,所以我們一般將Naocs的配置放在加載優(yōu)先級更高的bootstrap.yml
文件中注
: bootstrap.yml又叫引導文件,加載優(yōu)先級比application.yml要高
可以在resources目錄中添加一個bootstrap.yml,需要添加的配置如下:
spring:
application:
name: userservice # 服務名
profiles:
active: dev # 環(huán)境
cloud:
nacos:
server-addr: 127.0.0.1:8848 # nacos地址
config:
file-extension: yaml # 文件后綴名
其中“服務名
”、“環(huán)境
”、“文件后綴名
” 其實就是我們上面在后臺創(chuàng)建的配置文件名,相應的就會讀取后臺相應配置文件內(nèi)容,在項目中我們也可以使用value注解讀取配置文件中的內(nèi)容,列如:
@Value("${pattern.dateformat}")
private String dateformat;
要想實現(xiàn)配置熱更新還差最后一步,Ncos中的配置文件變更后,微服務無需重啟就可以感知。不過需要通過下面兩種配置實現(xiàn):
需要 prefix指定的前綴名跟變量名拼接和后臺管理系統(tǒng)中的屬性一致才可生效,一般第一種方式用的比較多。
假設(shè)一個業(yè)務場景,一個配置在開發(fā)環(huán)境,生產(chǎn)環(huán)境都需要用到,那么每份配置都配置一次顯然是相當麻煩的。
這樣無論是生產(chǎn)還是測試相同的配置都寫在userservice.yaml中,這樣給我們帶來了極大的便利
spring:
application:
name: userservice # 服務名
profiles:
active: dev # 環(huán)境
cloud:
nacos:
server-addr: 127.0.0.1:8848 # nacos地址
config:
file-extension: yaml # 文件后綴名
這樣即可以讀取到userservice-dev.yaml 配置文件的內(nèi)容,也可以讀取到userservice.yaml配置文件中的內(nèi)容,即使環(huán)境為test環(huán)境也可以讀取到userservice.yaml配置文件的內(nèi)容。
如果兩個文件中有一個相同的屬性,或者說application.yml也有一個屬性相同,那么文件的加載優(yōu)先級是:
userservice-dev.yaml >userservice.yaml >application.yml
五. Nacos集群搭建官方給出的Nacos集群圖:
其中包含3個nacos節(jié)點,然后一個負載均衡器代理3個Nacos。這里負載均衡器可以使用nginx。
我們計劃的集群結(jié)構(gòu):
三個nacos節(jié)點的地址:
節(jié)點 | ip | port |
---|---|---|
nacos1 | 192.168.150.1 | 8845 |
nacos2 | 192.168.150.1 | 8846 |
nacos3 | 192.168.150.1 | 8847 |
搭建集群的基本步驟:
Nacos默認數(shù)據(jù)存儲在內(nèi)嵌數(shù)據(jù)庫Derby中,不屬于生產(chǎn)可用的數(shù)據(jù)庫,官方推薦的最佳實踐是使用帶有主從的高可用數(shù)據(jù)庫集群
這里我們以單點的數(shù)據(jù)庫為例來講解。
將Nacos解壓后,首先啟動本機mysql,創(chuàng)建nacos數(shù)據(jù)庫,并在nacos_config數(shù)據(jù)庫下執(zhí)行nacos-mysql.sql腳本 (腳本存放位置nacos/cont/nacos-mysql.sql):
mysql>source /opt/nacos/cont/nacos-mysql.sql;
進入nacos的conf目錄,修改配置文件cluster.conf.example,重命名為cluster.conf:
然后添加內(nèi)容:
127.0.0.1:8845
127.0.0.1.8846
127.0.0.1.8847
然后修改application.properties文件,添加數(shù)據(jù)庫配置:
spring.datasource.platform=mysql
db.num=1
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=123
2. 啟動將nacos文件夾復制三份,分別命名為:nacos1、nacos2、nacos3
然后分別修改三個文件夾中的application.properties,
nacos1:
server.port=8845
nacos2:
server.port=8846
nacos3:
server.port=8847
然后我們就可以分別將他們都啟動起來
3. 安裝Nginx關(guān)于Nginx的安裝小編的專欄里面有對應的文章。
修改conf/nginx.conf文件,配置如下:
upstream nacos-cluster {server 127.0.0.1:8845;
server 127.0.0.1:8846;
server 127.0.0.1:8847;
}
server {listen 80;
server_name localhost;
location /nacos {proxy_pass http://nacos-cluster;
}
}
而后在瀏覽器訪問:http://localhost/nacos即可。
代碼中application.yml文件配置如下:
spring:
cloud:
nacos:
server-addr: localhost:80 # Nacos地址
實際部署時,需要給做反向代理的nginx服務器設(shè)置一個域名,這樣后續(xù)如果有服務器遷移nacos的客戶端也無需更改配置,Nacos的各個節(jié)點應該部署到多個不同服務器,做好容災和隔離。
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
分享名稱:服務注冊配置中心Nacos-創(chuàng)新互聯(lián)
本文路徑:http://www.muchs.cn/article4/diejoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、定制網(wǎng)站、網(wǎng)站營銷、軟件開發(fā)、面包屑導航、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容