开发者

Nacos Server部署配置全过程

目录
  • 1.什么是Nacos?
  • 2.Nacos Server 单机部署配置
    • 2.1. 相关文件
    • 2.2. 配置流程
    • 2.3. 搭建Nacos-client 服务
  • 3.Nacos Server 集群部署配置(Windows环境)
    • 3.1.环境准备
    • 3.2. 配置流程
    • 3.3. 搭建Nacos-client 服务
  • 总结

    1.什么是Nacos?

    官方简介:一个更易于构建云原生应用的动态服务发现(Nacos Discovery )服务配置(Nacos Config)和服务管理平台。

    Nacos的关键特性包括

    • 服务发现和服务健康监测
    • 动态配置服务
    • 动态DNS服务
    • 服务及其元数据管理

    Nacos的核心功能

    • 服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。
    • 服务心跳:在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacjavascriptos Server,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳。
    • 服务同步:Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。
    • 服务发现:服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Njsacos Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存。
    • 服务健康检查:Nacos Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它的healthy属性置为false(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)。

    2.Nacos Server 单机部署配置

    2.1. 相关文件

    • 安装包下载地址:https://github.com/alibaba/Nacos/releases
    • 官方文档: https://nacos.io/zh-cn/docs/deployment.html
    • 版本关系说明: https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明

    2.2. 配置流程

    • 修改bin/startup.cmd文件信息,默认是集群模式,需修改为单机模式

    Nacos Server部署配置全过程

    • 启动成功页面

    Nacos Server部署配置全过程

    • 登录页面(默认用户名,密码:nacos)

    Nacos Server部署配置全过程

    • 可选操作:端口修改,数据源设置—>config/application.properties文件

    Nacos Server部署配置全过程

    • sql文件位置

    Nacos Server部署配置全过程

    2.3. 搭建Nacos-client 服务

    (1)引入依赖

    父Pom中支持spring cloud&spring cloud alibaba, 引入依赖

    	<!--项目依赖管理,父项目只是声明依赖,子项目需要写明需要的依赖(可以省略版本信息)-->
        <dependencyManagement>
            <dependencies>
                <!--spring cloud alibaba 版本管理器-->
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>${spring.cloud.alibaba.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
    
                <!--spring cloud 版本管理器-->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring.cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
    
                <!--springboot 版本管理器-->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-parent</artifactId>
                    <version>${spring.boot.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
    
            </dependencies>
        </dependencyManagement>
    

    子Pom中引入依赖

    		<!--nacos 服务注册与发现-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    
            <!--负载均衡器-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-loadbalancer</artifactId>
                <version>3.1.1</version>
            </dependency>
    

    (2) application.yml中配置

    server:
      port: 8020
    
    # 应用名称 (nacos会将该名称当做服务名称)
    spring:
      application:
        name: order-service
      cloud:
        nacos:
          server-addr: 172.16.10.132:8848 # 服务地址
          discovery:
            userna编程客栈me: nacos
            password: nacos
    #        namespace: public
    #        ephemeral: false # 永久实例 哪怕宕机了也不会删除该实例?
    
    #        service: android# 默认取${spring.applicat编程客栈ion.name}的值,也可以通过该选项配置 服务名称
    #        group: #默认DEFAULT_GROUP  分组管理
    

    更多Nacos相关配置: https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery

    (3) 启动springboot应用,nacos管理端界面查看是否成功注册

    Nacos Server部署配置全过程

    (4)代码

    @RestController
    @RequestMapping("/order")
    public class OrderController {
    
        @Autowired
        RestTemplate restTemplate;
    
        @RequestMapping("/add")
        public String add() {
            System.out.println("下单成功");
            String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);
            return "Hello World" + msg;
        }
    }
    

    注意!!! 需要加上@LoadBalanced

    	@Bean
        @LoadBalanced
        public RestTemplate restTemplate(RestTemplateBuilder builder){
            RestTemplate restTemplate = builder.build();
            return restTemplate;
        }
    

    (5) 测试

    Nacos Server部署配置全过程

    3.Nacos Server 集群部署配置(Windows环境)

    3.1.环境准备

    (1) jdk1.8+

    (2) maven 3.3+

    (3) nginx 作为负载均衡

    (4) mysql

    • 集群部署架构图

    Nacos Server部署配置全过程

    3.2. 配置流程

    (1) 复制 Nacos安装包,修改为 nacos8840、nacos8850、nacos8860

    Nacos Server部署配置全过程

    (2) 以nacos8840为例,进入nacos8840目录

    (2.1) 修改conf\application.properties的配置,使用外置数据源 要使用mysql5.7+(包括)

    Nacos Server部署配置全过程

    (2.2) 将conf\cluster.conf.example复制一份,并改名为cluster.conf,添加节点配置

    Nacos Server部署配置全过程

    nacos8850,nacos8860 按同样的方式配置。

    (3) 创建mysql数据库,sql文件位置:conf\nacos mysql.sql

    (4)如果出现内存不足:修改启动脚本(bin\startup.sh)的jvm参数

    Nacos Server部署配置全过程

    5) 分别启动nacos8840,nacos8850,nacos8860

    Nacos Server部署配置全过程

    (6) 测试,出现以下界面,则表示Nacos集群已创建成功

    登录 http://172.16.10.132:8840/nacos/index.html ,用户名和密码都是nacos

    Nacos Server部署配置全过程

    (7) 使用Nginx实现负载均衡

    Nacos Server部署配置全过程

    3.3. 搭建Nacos-client 服务

    (1) 配置同上。

    (2) application.yml中配置

    server:
      port: 8020
    
    # 应用名称 (nacos会将该名称当做服务名称)
    spring:
      application:
        name: order-service
      cloud:
        nacos:
          server-addr: 172.16.10.132:8848 # nginx 服务地址
          discovery:
            username: nacos
            password: nacos
    #        namespace: public
    #        ephemeral: false # 永久实例 哪怕宕机了也不会删除该实例?
    
    #        service: # 默认取${spring.application.name}的值,也可以通过该选项配置 服务名称
    #        group: #默认DEFAULT_GROUP  分组管理
    

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜