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即可,服务名称和其他信息不变。

 

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