Nacos簡介
Nacos是SpringCloudAlibaba的一個組件,主要提供服務注冊發(fā)現(xiàn)和配置管理等服務,等效于注冊中心+配置中心
Nacos安裝
從官網(wǎng)下載Nacos-1.2.0,解壓后直接運行bin目錄下的startup.cmd柔昼,命令運行成功后直接訪問http://localhost:8848/nacos
默認的賬戶名和密碼都是nacos
Nacos作為注冊中心
1.引入依賴
pom.xml
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.在啟動類上添加@EnableDiscoveryClient
注解
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class,args);
}
}
3.配置yml
application.yml
server:
port: 8001
spring:
application:
name: sword-provider
cloud:
nacos:
discovery:
# 添加nacos的注冊地址
server-addr: 127.0.0.1:8848
啟動服務管钳,刷新nacos頁面
可以看到nacos服務列表中我們的微服務已經(jīng)注冊上去了
Nacos支持AP模式和CP模式的切換
AP:高可用和分區(qū)容忍性,如果不需要存儲服務級別的信息,且服務實例都是通過nacos-client端注冊环疼,并且能夠保持心跳的上報,那么選擇AP模式
CP:強一致性和分區(qū)容忍性朵耕,如果需要在服務級別編輯和存儲配置信息炫隶,那么CP是必須的,K8s服務和DNS服務適用于CP模式阎曹,該模式下注冊實例之前必須先注冊服務伪阶,如果服務不存在則報錯
使用命令切換并啟動nacos
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
Nacos作為配置中心
1.在pom.xml中添加依賴
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.在resource文件夾下創(chuàng)建bootstrap.yml
原因:在項目初始化時,先要從配置中心拉取配置才能保證程序正常啟動处嫌,而SpringBoot中的配置文件是有加載順序的栅贴,bootstrap先于application
bootstrap.yml
server:
port: 8001
spring:
application:
name: sword-provider
cloud:
nacos:
discovery:
# 作為服務注冊中心地址
server-addr: 127.0.0.1:8848
config:
# 作為服務配置中心地址
server-addr: 127.0.0.1:8848
# 指定文件的擴展名為yaml
file-extension: yaml
3.在application.yml中指定配置環(huán)境
application.yml
# 指定配置的環(huán)境
spring:
profiles:
active: dev
4.啟動類配置
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class,args);
}
}
5.在naco的可視化界面中進行相關配置
dataId配置規(guī)則:
${pring.application.name}-${spring.profiles.active}.${file-extension}
參考如上規(guī)則,需要配置的文件名為sword-provider-dev.yaml熏迹,配置如下
點擊提交即可
6.測試檐薯,我們可以在Controller中寫一個方法來測試配置是否準確
其實服務能夠啟動成功,就說明配置應該就沒有什么問題了注暗,這里來測試能否獲取到nacos中配置文件的值
ProviderController .java
@Value("${info.name}")
private String info;
@GetMapping("info")
public String getInfo(){
return info;
}
訪問接口http://localhost:8001/provider/info坛缕,得到如下結果
7.服務配置的動態(tài)刷新
在上面一步中,我們已經(jīng)能夠獲取到遠程配置的值捆昏,但是此時如果更改了遠程配置中的值赚楚,我們獲取到的還是原來的值,說明當前情況下骗卜,我們無法獲取到更新的配置宠页,此時可以利用SpringCloud的
@RefreshScope
來實現(xiàn)配置自動更新
@RestController
@RequestMapping("provider")
@RefreshScope
public class ProviderController {
@Value("${info.name}")
private String info;
@GetMapping("info")
public String getInfo(){
return info;
}
}
重啟服務后在nacos可視化配置界面更新info.name的值,再次訪問接口寇仓,就能夠及時獲取到更新
Nacos中配置中心的命名空間举户、Group、和Data Id之間的關系
- NameSpace:NameSpace默認的命名空間是public遍烦,主要用作開發(fā)環(huán)境之間的隔離俭嘁,比如現(xiàn)在有三個環(huán)境:開發(fā)、測試乳愉、生產(chǎn),那么就可以創(chuàng)建三個命名空間
- Group:默認為DEFAULT_GROUP屯远,可以把同一生產(chǎn)環(huán)境的不同微服務劃分到一個組
- Data Id:指向具體的配置名稱
- 歸屬應用:指定該配置歸屬于哪一個應用
通過NameSpace蔓姚、Group、Data Id查找配置文件
1.在nacos配置中新增一個名為test
的命名空間
2.然后在test
命名空間下創(chuàng)建yaml配置慨丐,并且同時指定group
bootstrap.yml
server:
port: 8001
spring:
application:
name: sword-provider
cloud:
nacos:
discovery:
# 作為服務注冊中心地址
server-addr: 127.0.0.1:8848
config:
# 作為服務配置中心地址
server-addr: 127.0.0.1:8848
# 指定文件的擴展名為yaml
file-extension: yaml
# 指定命名空間
namespace: 9f6bb237-906c-4fbe-8698-4af61c973951
# 指定組名
group: TEST_GROUP
application.yml
# 指定配置的環(huán)境
spring:
profiles:
active: test
再次啟動服務坡脐,通過接口可以查看到對應的配置信息
Nacos集群和持久化配置
Nacos使用嵌入式數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)存儲,但支持mysql的集中存儲房揭,在生產(chǎn)過程中常使用nacos集群部署备闲,來保證nacos的高可用
環(huán)境準備
Nginx集群+Nacos集群+Mysql主從(生產(chǎn))
這里主要演示Nacos集群的搭建晌端,所以就不再演示Nginx集群和Mysql主從搭建了
搭建Nginx
搭建Mysql
搭建Nacos集群
1.下載安裝nacos
cd /opt
# 下載
wget https://github.com/alibaba/nacos/releases/download/1.3.0/nacos-server-1.3.0.tar.gz
# 解壓
tar -xvf nacos-server-1.3.0.tar.gz
2.mysql配置
去nacos/conf目錄下找到nacos提供的nacos-mysql.sql文件
去mysql中執(zhí)行sql腳本,完成相應的庫表創(chuàng)建
3.application.properties配置(切換數(shù)據(jù)庫)
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=root
4.nacos集群配置
最好先配置主機的hostname
vi /etc/hostname
編輯nacos/conf目錄下的cluster.conf文件
192.168.10.251 8845
192.168.10.251 8846
192.168.10.251 8847
5.編輯啟動腳本恬砂,使其可以根據(jù)不同的端口啟動
進入到到nacos/bin目錄下咧纠,編輯startup.sh,添加條件
調(diào)整內(nèi)存大小
啟動時設置端口
啟動時通過
-q
參數(shù)指定端口
./startup.sh -q 8845
./startup.sh -q 8846
./startup.sh -q 8847
6.nginx負載均衡配置
更改完成后重啟nginx
訪問:http://192.168.10.251:8848/nacos/#/login
能夠訪問泻骤,說明Nacos集群搭建成功