一、nacos的領域模型划分
1、 namespace
(1)namespace可以進行資源隔離,默認為“public";例如:dev環境的 namespace下的服務是調用不到 prod 的 namespace下的服務;
可以在 ”命名空間“ 管理,如下:
(2) namespace 的要在配置文件中配置;(namespace的配置要配置 namespace對應的命名空間ID)
spring.cloud.nacos.discovery.namespace=cd944310-e786-4670-b7d9-7612d26884c1
配置文件增加namespace之后重啟一下服務,public看不到有服務,dev有注冊的服務;
2、group
用作微服務的分組,不同的分組之間微服務不能調通,默認為 “DEFAULT_GROUP”。例如:
交易分組:訂單服務、支付服務;
倉儲分組:庫存服務、物流服務;
物流服務和支付服務實際上在業務之間是沒有交互的,我們可以把他們放在不同的分組中。
3、cluster-name
同一個namespace,同一個group下,不同的 cluster-name 之間是可以相互調用的;
但是我們盡量要避免服務的跨集群調用,因為通常是跨地域部署的,跨地域會有網絡延時,所以要優先保證同一集群調用。(需要使用代碼實現)
order-center 的配置文件:
spring: cloud: nacos: discovery: server-addr: 192.168.172.20:8848 # dev環境的命名空間ID namespace: cd944310-e786-4670-b7d9-7612d26884c1 group: pay cluster-name: BJ application: name: order-center server: port:8001
product-center服務的配置文件:
spring: cloud: nacos: discovery: server-addr: 192.168.172.20:8848 # dev環境的命名空間ID namespace: cd944310-e786-4670-b7d9-7612d26884c1 group: pay cluster-name: BJ application: name: product-center server: port: 8002
nacos的服務的存儲格式:Map<namespaceId, Map<group::serviceName, Service>>
4、metadata
元數據,控制其version的版本,可以用於灰度發布;
product-center的配置文件,如下:
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.172.20:8848
# dev環境的命名空間ID
namespace: cd944310-e786-4670-b7d9-7612d26884c1
group: pay
cluster-name: NJ
# V1版本
metadata:
version: V1
application:
name: product-center
server:
port: 8002
二、nacos的集群搭建
nacos的集群模式,官網推薦使用 nginx 來搭建。
注意:Nginx 和 MySQL 都要保證高可用。
1、安裝 Nginx
解壓安裝參見:Nginx的核心模塊
(1)Nginx解壓安裝之后,修改nginx的配置文件 nginx.conf 文件,修改內容如下:
http { upstream nacos-cluster { server 192.168.172.1:8849; server 192.168.172.1:8850; server 192.168.172.1:8851; } server { listen 8847; server_name 192.168.172.1; location /nacos/ { proxy_pass http://nacos-cluster/nacos/; } } }
(2)啟動 nginx,進入 nginx 的安裝目錄 /usr/local/nginx/sbin 啟動 nginx;
./nginx
踩過的坑:nginx中的 upstream后面的名稱不能配置下划線,因為nginx不能識別;若配置了下划線,則訪問會報錯400錯誤;可以將下划線改為中划線;
踩過的坑:nginx中的 upstream后面的名稱不能配置下划線,因為nginx不能識別;若配置了下划線,則訪問會報錯400錯誤;可以將下划線改為中划線;
踩過的坑:nginx中的 upstream后面的名稱不能配置下划線,因為nginx不能識別;若配置了下划線,則訪問會報錯400錯誤;可以將下划線改為中划線;
2、安裝 nacos 服務
將解壓的 nacos 拷貝三份出來;
cp -r nacos nacos8849;
cp -r nacos nacos8850;
cp -r nacos nacos8851;
以拷貝出來的 nacos8849 為例;
第一步:修改 nacos8849/conf 目錄下的 application.properties;
server.port=8849
spring.datasource.platform=mysql
# 數據庫實例數量
db.num=1
# 數據庫的連接信息
db.url.0=jdbc:mysql://192.168.172.1:3306/nacos_test?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
第二步: 進入 nacos8849/conf 目錄下,拷貝原來的 cluster.conf.example 為 cluster.conf文件,並修改里面的內容;
192.168.172.1:8849
192.168.172.1:8850
192.168.172.1:8851
這樣, nacos8849 的配置就完成了,nacos8850 和 nacos8851 也做同樣的配置。
啟動 nacos 集群之前要先做一些准備工作。
(1)先創建一個數據庫,數據庫表的腳本在 nacos 的包中的 nacos/conf/nacosmysql.sql ;
(2)需要修改nacos-server的 啟動腳本jvm參數。(虛擬機的內存分配的少,需要修改jvm參數變小)
修改 nacos8849/bin/startup.sh 文件,
第三步,分別進入 nacos8849、nacos8859、nacos8851 的 bin 目錄,啟動 startup,sh 腳本。
/usr1/nacos/nacos8849/logs/start.out
3、測試安裝的 nacos
分別測試登錄地址,如下:
http://192.168.172.1:8849/nacos
http://192.168.172.1:8850/nacos
http://192.168.172.1:8851/nacos
NG測試
http://192.168.172.1:8847/nacos