Linux-Nacos服務管理平臺部署

什麼是Nacos

是 Dynamic Naming and Configuration Service的首字母簡稱,一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。

是構建以“服務”爲中心的現代應用架構 (例如微服務範式、雲原生範式) 的服務基礎設施。

環境與版本

Linux:CentOS 8.0 64bit

Nacos:2.0.4

一、安裝java jdk

1、安裝包:yum install java-1.8.0-openjdk*
2、查看版本:java -version

二、單機版下載&解壓/安裝Nacos

1、安裝Nacos方式有兩種:

第一種:通過wget命令直接安裝(可自行百度)

第二種:是通過git地址去下載安裝包,然後用遠程鏈接工具上傳到linux服務器文件夾,此次由於版本問題,我採用了第二種下載包的方式(https://github.com/alibaba/nacos/releases/tag/2.0.4),

由於第一次學習安裝是使用的2.0.3版本,但是後面創建的時候一直無法創建服務,所有又切換到2.0.4版本,所以截圖說明都是基於2.0.3版本進行的。

下載完成後可以在linux中opt或者usr文件夾下創建新的文件夾便於識別。創建成功後,上傳壓縮包到文件夾,然後解壓壓縮文件。

解壓命令:tar -xvf nacos-server-2.0.4.tar.gz

 

2、配置mysql查找到nacos-mysql

進入解壓文件下的conf文件夾,查找到nacos-mysql.sql文件,打開文件並執行裏面的sql語句

或者工具中查看

3、執行sql

4、conf文件夾下找到application.properties修改數據庫鏈接配置,可以通過vim方式修改,也可以通過工具直接進行修改保存

5、修改完成後進入進入nacos的bin目錄下

cd  /xxxx/xxxx/xxxx/nacos/bin

6、啓動/停止nacos,啓動命令(standalone代表着單機模式運行,非集羣模式)

啓動:sh bin/startup.sh -m standalone
停止:sh bin/shutdown.sh

7、啓動成功後,在nacos的logs文件夾下有一個start.out文件,可查看服務啓動結果

提示指向8848端口成功並且提示successfully表示部署成功。

啓動完成後輸入 http://服務器IP:8848/nacos 即可進入nacos控制檯,賬號nacos,密碼nacos

 

三、Nacos部署集羣

1、#進入安裝目錄conf

例如:cd /opt/cloud/nacos/conf

2、cp application.properties.example 爲 application.properties

#複製文件cluster.conf.example重新命名爲cluster.conf
cp cluster.conf.example  cluster.conf

3、進入cluster.conf文件新定義集羣訪問IP

4、若爲Nacos集羣,需要部署多份文件,可直接通過工具或者命令拷貝一份文件。進入文件的conf文件夾找到application.properties,修改端口

 5、啓動集羣,集羣啓動方式和單機啓動方式有一點區別,集羣啓動方式是切換到nacos文件夾的bin目錄執行命令

啓動命令:sh startup.sh
停止命令:sh shutdown.sh

到此爲止,集羣部署完畢,可以通過start.out日誌查看各個集羣啓動 狀態。若都啓動成功,即可訪問。

四、.NET 6接入Nacos

1、進入nacos後臺管理添加命名空間,用於項目創建服務時使用

 2、添加依賴包

dotnet add package nacos-sdk-csharp.AspNetCore
dotnet add package nacos-sdk-csharp.Extensions.Configuration
dotnet add package nacos-sdk-csharp.YamlParser
dotnet add package nacos-sdk-csharp.IniParser

3、配置appsettings.json,在appsettings.json中新增nacos節點

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  /*---Nacos配置(開始)---*/
  //"NacosConfig": {
  //  "Listeners": [
  //    {
  //      "Optional": false,
  //      "DataId": "", //nacos上面的 Data Id         
  //      "Group": "DEFAULT_GROUP" //nacos上面的 Group 名
  //    }
  //  ],
  //  "Namespace": "059ae542-419f-4299-ae71-38a63b9a235a", //nacos上面的 Namespace 名
  //  "ServerAddresses": ["http://ip:8848","http://ip:8850"], //nacos上的ip節點,可以配置多個,用逗號隔開   
  //  "UserName": "", //可以不填
  //  "Password": "", //可以不填
  //  "AccessKey": "",
  //  "SecretKey": "",
  //  //"EndPoint": "acm.aliyun.com",//如果nacos上面的配置詳情的配置內容是空的json內容,例如:{} ,這裏如果填了值,代碼就會報錯,這個一個大坑,被坑哭了。最好把它註釋掉,留空既不會影響本地,也不會影響nacos上的,也會優先讀取nacos上的json文件。
  //  "ConfigFilterAssemblies": [ "YouPrefix.AssemblyName" ], //官方文檔默認複製過來的
  //  "ConfigFilterExtInfo": "some ext infomation" //官方文檔默認賦值過來的
  //},
  "nacos": {
    "EndPoint": "", //和上面的解釋一樣,最好留空,不然很容易報錯。
    "ServerAddresses": [ "http://ip:8848"],//可多個,正常情況一個也夠使用
    "DefaultTimeOut": 15000,
    "Namespace": "61c8ea59-f314-4926-84ae-22e580398678",//新增的命名空間ID
    "ListenInterval": 10000,
    "ServiceName": "nacostest", //往nacos服務註冊的服務名,自己定義的,喜歡用那個名字就用哪個
    "GroupName": "DEFAULT_GROUP",
    "ClusterName": "DEFAULT",
    "Ip": "服務器ip", //項目部署IP如,多個項目集羣部署時修改IP和端口
    "PreferredNetworks": "", // select an IP that matches the prefix as the service registration IP
    "Port": 8852, //往nacos服務註冊的服務端口
    "Weight": 100,
    "RegisterEnabled": true,
    "InstanceEnabled": true,
    "Ephemeral": true,
    "Secure": false,
    "AccessKey": "",
    "SecretKey": "",
    "UserName": "nacos",
    "Password": "chennacos",
    "ConfigUseRpc": true,
    "NamingUseRpc": false,
    "NamingLoadCacheAtStart": "",
    "LBStrategy": "WeightRandom", //WeightRandom WeightRoundRobin
    "Metadata": {
      "aa": "bb",
      "cc": "dd"
    }
  }
  /*---Nacos配置(結束)---*/
}

 4、添加配置服務,nacos爲appsettings.json中的配置節點

 5、啓動項目即自動創建服務

 進入服務詳情,可以看到當前服務的IP和端口信息,注意,無論是服務列表還是服務詳情裏面的IP信息列表:淡綠色爲正常服務,淡黃色爲不正常服務

 

非正常服務

四、.NET 6讀取Nacos服務

1、新增控制器,控制器名稱自定義,實現INacosNamingService接口 

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Nacos.V2;

namespace NacosTest.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class NacosController : ControllerBase
    {
        private readonly INacosNamingService _nacosNamingService;
        public NacosController(INacosNamingService nacosNamingService)
        {
            _nacosNamingService = nacosNamingService;
        }
        [HttpGet]
        public string Get()
        {
            return "Ok~" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff");
        }
        /// <summary>
        /// 從nacos中獲取服務並選一個調用
        /// </summary>
        /// <returns></returns>
        [HttpGet("test")]
        public async Task<string> Test()
        {
            // 獲取服務配置nacostest-服務名稱,DEFAULT_GROUP-服務默認組
            var instance = await _nacosNamingService.SelectOneHealthyInstance("nacostest", "DEFAULT_GROUP");
            //拼接服務IP和端口
            var host = $"{instance.Ip}:{instance.Port}";
            //拼接完整路徑
            var baseUrl = instance.Metadata.TryGetValue("secure", out _)
                ? $"https://{host}"
                : $"http://{host}";

            if (string.IsNullOrWhiteSpace(baseUrl))
            {
                return "empty";
            }
            //拼接接口
            var url = $"{baseUrl}/api/nacos";
            //請求測試代碼
            using var client = new HttpClient();
            var result = await client.GetAsync(url);
            return await result.Content.ReadAsStringAsync();
        }
    }
}

到此爲止,Nacos初步嘗試已經完成,需要注意的是,一個服務可以注入添加到多個服務器裏面,在appsettings.json的nacos節點ServerAddresses中數組以逗號的方式隔開注入。

同時若一個項目需要註冊多個Nacos,只需要修改在appsettings.json的nacos節點的IP和Port即可,服務名稱和其他信息不變。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章