文章目錄
Alibaba微服務元件Nacos注冊中心
1.什麼是nacos
注冊中心+配置中心+服務管理 平台
注冊中心演變過程
管理所有微服務、解決微服務之問調用關系錯綜複雜、難L以維擴的問題;
注冊中心核心功能
Nacos discovery
服務注冊:Nacos Client會通過發送REST請求的方式向Nacos server注冊自己的服務,提供自身的中繼資料,比如ip位址、端口等資訊。Nacos Sevet接收到注冊請求後,就會把這些元款據資訊存儲在一個雙層的記憶體Map中。
服務心跳︰在服務注冊後,Nacos Client會維護一個定時心跳來持續通知Nacos Server,說明服務一直處于可用狀态,防止被剔除。預設5s發送一次心跳
服務同步:Nacos Server叢集之間會互相同步服務執行個體,用來保證服務資訊的一緻性。leader raft
服務發現:服務消費者(Nlacos Cient)在調用服務提供者的服務時,會發送一個REST請求給Nacos Sever,擷取上面注冊的服務清單,并且緩行在Nacos Client本地,同時會在Nacs cient本地開啟一個定時任務定時拉取服務端最新的系統資料庫資訊更新到本地緩存
服務健康檢查:Nacos Server會開啟一個定時任務用來檢查注冊服務執行個體的狸康情況,對于超過15s沒有收到客戶诟心跳的執行個體會将它的ealty屬性置為lase(用戶端服務發現時不會發現),如果某個執行個體超過30秒沒有收到心跳,直接剔除該執行個體(被剔除的執行個體如果恢複發送心跳則會重新注冊)
主流的注冊中心差別
CAP C 一緻性 A 可用性 P 分區容錯性
Nacos Server部署
下載下傳位址https://github.com/alibaba/nacos/releases
修改bin\startup.sh改成單機啟動(預設叢集)
輕按兩下startup.cmd
通路位址nacos首頁賬号密碼都為nacos
Nacos client搭建
複制子產品order 和 stock
取名為order-nacos和stock -nacos
父工程添加子子產品
<module>order-nacos</module>
<module>stock-nacos</module>
order-nacos和stock -nacos
1.引入依賴
<!-- nacos服務注冊發現 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.配置檔案(order-nacos)
server:
port: 8020
#應用名稱 nacos會将該名稱當作服務名稱
spring:
application:
name: order-service
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
username: nacos
password: nacos
namespace: public
配置檔案(stock -nacos)
server:
port: 8021
#應用名稱 nacos會将該名稱當作服務名稱
spring:
application:
name: stock-service
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
username: nacos
password: nacos
namespace: public
主啟動類 注解 @EnableDiscoveryClient 可加可不加
啟動 檢視nacos發現兩個服務清單
(order-nacos)更改controller
String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);
通路 localhost:8020/order/add 報錯
(order-nacos)主啟動類加上注解 @LoadBalanced 預設輪詢
@SpringBootApplication
//@EnableDiscoveryClient
public class OrderNacosApplication {
public static void main(String[] args) {
SpringApplication.run(OrderNacosApplication.class,args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate=builder.build();
return restTemplate;
}
}
再次通路localhost:8020/order/add 成功回顯
get一個新技能
啟動一個完全一樣的項目,但端口号不一樣
點選apply->ok
stock-nacos控制層改變
@RestController
@RequestMapping("/stock")
public class StockController {
@Value("${server.port}")
String port;
@RequestMapping("/reduct")
public String reduct(){
System.out.println("扣減庫存");
return "扣減庫存"+port;
}
}
重新啟動 8020 8021 8022
再次通路localhost:8020/order/add
發現 回顯的端口号8021 8022重複跳轉(負載均衡的輪詢機制 ribbon)
Nacos 管理界面詳細介紹
命名空間的概念
namespace: public
pro環境 dev環境 分隔開來
分組的概念和命名空間差不多
雪崩保護-就是保護門檻值
0-1之間 百分比
ephemeral: false # 永久執行個體 預設是true 臨時執行個體
# 哪怕當機了也不會删除執行個體
健康執行個體 — 不健康執行個體
健康執行個體數/總執行個體數 < 保護門檻值
1/2 < 0.6 那麼就用把挂了的機子先給它用,防止服務雪崩
權重和負載均衡器有關 越大讓别人通路它越多
注冊中心配置項詳解
spring:
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
namespace: public
# namespace: public #相同特征的服務進行歸類分組管理
# ephemeral: false # 預設=true(臨時執行個體) ―當服務當機超過心跳就會将執行個體剔除掉 #永久執行個體―哪怕當機了也不會删除執行個體當服務當機永遠不會剔除掉
#service: 預設取${spring.application.name},也可以通過該選項配置
#group:預設DEFAULT_GROUP更細的相同特征的服務進行歸類分組管理
#weight:通常要結合安裝權重的負載均衡政策,權重越高配置設定的流量就越大
#metadata : version=1可以結合中繼資料做擴充
Nacos叢集部署
linux部署 jdk maven nginx作為負載均衡 mysql
下載下傳 nacos-server-1.4.1.tar.gz
mkdir nacos
# 或者利用wget的方式下載下傳
tar -zxvf nacos-server-1.4.1.tar.gz # 解壓
建立3份 ls
[root@localhost nacos]# ls
nacos8849 nacos8850 nacos8851
## 要先裝好mysql的環境
[root@localhost nacos]# cd nacos8849/conf/ # 進入配置檔案
vim application.properties # 修改一下
server.port=8849
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&allowPublicKeyRetrieval=true&serverTimezone=UTC
db.user.0=root
db.password.0=root
window下拿nacos/conf/nacos-mysql.sql
導入運作
[root@localhost conf]# cp cluster.conf.example cluster.conf
加上下面三行儲存退出:
虛拟機ip:8849
虛拟機ip:8850
虛拟機ip:8851
:wq
[root@localhost nacos8849]# cd bin
[root@localhost bin]# vim startup.sh
本來2g改成521m(如果記憶體很給力就不用了)
[root@localhost bin]# ./startup.sh #啟動
# 通路測試
複制nacos8849/conf/application.properties檔案給其他兩個
複制nacos8849/conf/cluster.conf檔案給其他兩個
複制nacos8849/bin/startup.sh檔案給其他兩個
#更改一下8850 8851中application.properties中的端口号
啟動8850 8851
配置nginx
1.添加言方源倉庫
yum install -y yum-utils
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
2.安裝openresty
yum install -y openresty
cd /usr/local/openresty/
cd nginx
[root@localhost nginx]# vim conf/nginx.conf
upstream nacoscluster {
server ${ip}:8849;
server ${ip}:8850;
server ${ip}:8851;
}
server{
listen 8847;
server_name localhost;
location /nacos/ {
proxy_pass http://nacoscluster/nacos;
}
}
:wq
[root@localhost nginx]# cd sbin
[root@localhost nginx]#./nginx
ip:8847/nacos/
更改application.yml配置(order-nacos stock-nacos)
server-addr: ip:8847
啟動8020 8021 8022