1. 程式人生 > >Spring Cloud - Nacos註冊中心入門單機模式及叢集模式

Spring Cloud - Nacos註冊中心入門單機模式及叢集模式

近幾年微服務很火,Spring Cloud提供了為服務領域的一整套解決方案。其中Spring Cloud Alibaba是我們SpringCloud的一個子專案,是提供微服務開發的一站式解決方案。

包含微服務開發的必要元件,基於SpringCloud 符合SpringCloud標準,是阿里的微服務的解決方案。

文件:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

Nacos的安裝與啟動

Nacos是其中一個元件。是阿里開源的可用於註冊中心和配置中心的開源組建。

下載安裝也比較簡單,只需要下載一個壓縮包即可,解壓即可用,windows和了linux都適用。

我的是windows,然後下載的是nacos-server-1.1.4.zip,選擇一個目錄解壓的到如下檔案。


 

只需要切換到bin目錄下,雙擊startup.cmd,就會看到打開了一個cmd視窗

 

等待一會,以下這樣就是啟動好了

 

 然後,瀏覽器訪問,http://localhost:8848/nacos  開啟他的控制檯,使用者名稱密碼都是nacos,然後進來就是這樣,就啟動好了。

 

是不是簡單。

註冊服務到Nacos

然後我們可以寫一個服務去註冊到nacos上,建立SpringBoot的專案。建立好之後按以下步驟把Nacos引入到我們的專案中。

 

第一:引入Nacos客戶端的依賴

<dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>    

 

第二:配置Nacos的地址

spring:
  application:
    name: order-center
  cloud:
   nacos:
     discovery:
       server-addr: localhost:8088

 

第三:啟動專案,觀察Nacos服務列表。成功註冊。

 

Nacos叢集啟動

剛才是在Nacos單機的情況下完成的操作,實際情況下作為註冊中心都是要叢集部署保證高可用的。我們就來看一下Nacos叢集模式如何配置並啟動的。

我們就弄三個例項,

第一:把我們解壓的Nacos的包複製三個,如下圖:

 

第二:進入到各自的conf目錄下開啟application.properties檔案,一次修改為 server.port=8849/8850/8851三個埠,然後新增如下配置,儲存。(記得三個包都要改)

spring.datasource.platform=mysql

# 資料庫例項數量
db.num=1
#自己資料庫的連線資訊
db.url.0=jdbc:mysql://localhost:3306/nacos_test?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=你的資料庫密碼

 

第三:在conf目錄下找到nacos-mysql.sql 這個SQL指令碼,在你的mysql裡新建一個數據量,名字你自己定,然後執行這個SQL。(資料庫名字要和你配置裡寫的一致)

 

第四:在conf目錄下找到 cluster.conf.example 檔案,命名為 cluster.conf 然後開啟填入三個 Nacos的IP和埠。(記得改為你自己的IP和埠)

192.168.0.107:8849
192.168.0.107:8850
192.168.0.107:8851

 

注意:三個例項的以上配置都要改。改完之後就可以去啟動了。

 

第五:啟動。這個時候啟動要注意了,不能直接雙擊startuo.cmd了。

博主就是因為在叢集模式下依然使用雙擊的啟動方式,導致一直是起了三個單機模式的例項,最後找了很久才發現是因為這個啟動指令碼預設是單機啟動的,叢集啟動需要加引數指定,而Linux的啟動指令碼正好相反,預設是叢集模式,單機啟動需要加引數-m standalone。

叢集模式下啟動需要開啟CMD視窗,開啟三個,進入到各自的bin目錄下,分別執行,startup.smd -m cluster,然後等待一會,即可看到以cluster模式啟動的字眼

 

然後訪問這三臺Nacos,點選節點列表就可以看到三個Nacos例項 誰是Leader 誰是follower一清二楚。

 

叢集下客戶端怎麼連?

第一種:可以在剛才單機的基礎上加多個IP和埠中間用逗號隔開

第二種:配合Nginx代理我們的Nacos的叢集,配置裡就直接寫Nginx的IP和埠即可

Nginx配置如下:

    upstream nacos_server{
        server 192.168.0.107:8849;
        server 192.168.0.107:8850;
        server 192.168.0.107:8851;
    }
    server {
        listen       8088;
        server_name  localhost;

        location /nacos/ {
           proxy_set_header Host $http_host;
           proxy_pass http://nacos_server/nacos/;
        }
    }

 

而我們訪問Nacos的控制檯的時候,就可以通過Nginx來訪問了,客戶端註冊到Nacos的時候就可以直接寫Nginx的地址了。

 

獲取註冊中心註冊的服務的地址列表

我們剛才寫了一個springboot的專案引入了Nacos的客戶端,併成功把服務資訊註冊到了Nacos上。現在我們來驗證一下。

寫個Controller,注入RestTemplate 和 DiscoveryClient (Nacos的服務發現客戶端)

    @Autowired
    private DiscoveryClient discoveryClient;
    @Autowired
    private RestTemplate restTemplate;
    
@GetMapping("/getServiceList") public List<ServiceInstance> getServiceList() { List<ServiceInstance> serviceInstanceList = discoveryClient.getInstances("order-center"); return serviceInstanceList; }

 

然後重啟這個服務,瀏覽器訪問 http://localhost:8081/getServiceList

 

能夠從Nacos拿到我們註冊的服務的資訊。

 

OK,今天就是一個Nacos的一個入門案例,就分享到這裡。

 

總結一下:

1、Nacos同一個程式包同時支援Windows和Linux。

2、支援單機啟動和叢集啟動

3、Windows單機啟動直接雙擊 startup.cmd,Linux執行 ./startup.sh -m stanalone

4、配置好集群后,Windows叢集啟動CMD視窗下執行 startup.cmd -m cluster,Linux直接執行./startup.sh

5、叢集下客戶端可使用多地址逗號隔開的方式,也可使用叢集+Nginx的方式,推薦後者。

 

Nacos還有更加細粒度的註冊中心配置方式,如不同的環境,不同Group,不同的location,不同的版本控制等。

歡迎關注我的公眾號:程式設計大道,一起交流學習。

&n