使用Nacos 搭建集群,作为配置中心和注册中心

下载安装nacos

        从github下载,nacos。直接解压就可使用。

        ncos目录结构:

                       bin:nacos 启动目录

           conf:nacos集群配置,启动配置

           target:nacoss server 存放目录

单独部署

#单独部署执行下面命令,linux 使用startup.sh
./startup.cmd -m standalone

 集群部署

        准备三个nacos副本:

        

        在每个nacos的./conf目录中分别编辑cluster.conf,使用同样的内容:

# 同台服务部署
192.163.76.190:8847
192.163.76.190:8848
192.163.76.190:8849
# 不同服务器部署,8848为默认端口号
#192.163.76.191:8848
#192.163.76.192:8848
#192.163.76.193:8848

        三个nacos 实列分别使用如下配置,主要指定启动端口和mysql连接(用来保存注册信息和配置信息)。

# nacos
server.port=8848
#nacos2
server.port=8847
#nacos3
server.port=8849

        mysql使用同一个连接:

db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=nacos

         使用如下脚本创建ncos 相关数据库和表:

         GitHub - hfengzhao/nacos-mysql8.0.sql: nacos 连接建库建表语句

 启动nacos集群

        分别在三个nacos目录使用./startup.cmd启动nacos服务,出现如下信息说明nacos启动成功:

2023-10-21 11:05:36,291 INFO The server IP list of Nacos is [21.163.76.190:8847, 21.163.76.190:8848, 21.163.76.190:8849]

2023-10-21 11:05:37,307 INFO Nacos is starting...

2023-10-21 11:05:38,325 INFO Nacos is starting...

2023-10-21 11:05:39,336 INFO Nacos is starting...

2023-10-21 11:05:40,351 INFO Nacos is starting...

2023-10-21 11:05:41,367 INFO Nacos is starting...

2023-10-21 11:05:42,374 INFO Nacos is starting...

2023-10-21 11:05:43,381 INFO Nacos is starting...

2023-10-21 11:05:44,393 INFO Nacos is starting...

2023-10-21 11:05:44,909 INFO Nacos started successfully in cluster mode. use external storage

新建命名空间

        浏览器访问http://localhost:8848/nacos/,新建命名空间:

        新建命名空间nacostest,命名空间可以自己填,也可以不填(自动生成)

新建配置

        在命名空间nacostest中新增三个配置文件:

dev 环境

nacos-application-test-dev.yaml

server:
    port: 8081

common 配置

nacos-test-common.yaml

nacos:
    common:
        info: hello nacos!

dev1 配置

nacos-test-common.yaml

server:
    port: 8082

 新建test项目

        引入nacos服务注册和配置依赖

        <!--nacos 配置中心依赖-->
        <dependency>
                <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>${nacos.version}</version>
        </dependency>
        <!-- nacos 注册中心依赖 -->

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${nacos.version}</version>
        </dependency>

        添加bootstrap.yml

#nacostest命名空间id
nacos:
  namespace:
    id: 45b901ff-0a18-44c2-a886-64da03c2f526


spring:
  application:
    name: nacos-application-test

  profiles:
    active: ${ENV:dev} # 默认dev环境

  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      username: nacos
      password: nacos

      # 配置中心配置
      config:
        server-addr: 192.168.1.13:8848 # nacos服务地址
        namespace: ${nacos.namespace.id} # 命名空间id
        group: ${spring.profiles.active} # 配置组
        file-extension: yaml
        prefix: ${spring.application.name}
        data-id: ${spring.application.name}-${spring.profiles.active}.yaml
        username: nacos
        password: nacos
        shared-configs[0]: # 公共配置
          data-id: nacos-test-common.yaml
          group: common # 公共配置组
          refresh: true
      # 注册中心配置
      discovery:
        server-addr: 192.168.1.13:8848
        namespace: ${nacos.namespace.id} # 命名空间
        group: ${spring.profiles.active} # 应用分组
        username: nacos
        password: nacos
        metadata:
          active: ${spring.profiles.active}
          version: 1.4.5

        添加controller和application

package org.example.controller;

import org.example.client.ProviderClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RequestMapping("/test")
@RestController
public class TestController {

    @Autowired
    private ProviderClient providerClient;

    @Value("${spring.cloud.nacos.discovery.server-addr}")
    private String nacosServer;

    @Value("${spring.profiles.active}")
    private String activeProfile;

    @Value("${server.port}")
    private String port;

    @Value("${nacos.common.info}")
    private String commonInfo;

    @GetMapping("/test")
    public Map<String,String> test(){
        Map<String,String> map = new HashMap<>(16);
        map.put("nacos",this.nacosServer);
        map.put("activeProfile",this.activeProfile);
        map.put("port",this.port);
        map.put("info",this.commonInfo);
        return map;
    }

}

       创建一个controller读取server.port和nacos.common.info的配置内容返回到前端。

package org.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@EnableDiscoveryClient
@SpringBootApplication
public class NacosTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosTestApplication.class,args);
    }

}

        启动应用服务可以看到服务nacos-application-test成功注册到nacos注册中心:

        浏览器访问localhost:8081/test/test,显示dev信息:

        port是nacos-application-test-dev.yaml配置中的端口号,info是nacos-test-common.yaml中的配置信息。

        使用mvn clean packge 打包test项目。切换到项目根目录执行:

mvn clean package

        打包成功后,在target目录运行dev1:

$ java -jar -DENV=dev1 test-1.0-SNAPSHOT.jar

        运行后查看注册中心已注册成功(多出了dev1分组):

         浏览器访问localhost:8082/test/test,显示dev1的信息:

         port是nacos-application-test-dev1.yaml配置中的端口号,info是nacos-test-common.yaml中的配置信息。

openfeign实现服务间调用

        1、引入相关依赖:


        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>

        2、创建provider:provider 只使用nacos的注册中心功能。provider 的application.yml配置:

server:
  port: 8083

# 服务注册名,使用openfeign调用时可以制定服务名称
spring:
  application:
    name: provider-service

  main:
    allow-bean-definition-overriding: true

  cloud:
    nacos:
      discovery:
        server-addr: 192.168.1.13:8848
        namespace: 45b901ff-0a18-44c2-a886-64da03c2f526
        group: dev


        3、添加ProviderController:

package org.example.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/provider")
public class ProviderController {

    @GetMapping("/who/{name}")
    public String who(@PathVariable("name") String name){
        return name;
    }
}

        4、 在test项目的Appliction中添加@EnableFeignClients注解。

        5、在test项目中添加FeignClient:

package org.example.client;


import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name = "provider-service")
public interface ProviderClient {

    @GetMapping("/provider/who/{name}")
    public String who(@PathVariable("name") String name);
}

       6、在TestController中添加openfeign调用方法:

    @GetMapping("/who/{name}")
    public String who(@PathVariable("name") String name){
        return providerClient.who(name);
    }

    7、启动provider并注册到nacos:

        8、重启test-dev,并访问localhost:8081/test/who/zhangsihong,服务调用成功:

问题记录:

        1、naos启动集群时总是使用相同的端口号8848:

        修改startup.cmd,找到行:

set "NACOS_CONFIG_OPTS=--spring.config.additional-location=optional:%CUSTOM_SEARCH_LOCATIONS%"

        修改为(删除optional:):

set "NACOS_CONFIG_OPTS=--spring.config.additional-location=%CUSTOM_SEARCH_LOCATIONS%"

        2、服务注册失败

        修改applicaiton.yml或bootstrap.yml,nacos的server-addr使用本机ip

        服务注册使用的命名空间是id不是名称。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
搭建 Nacos 集群,需要以下步骤: 1. 下载 Nacos Server 的安装包,并解压到不同的服务器上。 2. 修改每个节点的配置文件,主要包括 cluster.conf 和 application.properties。 3. 在每个节点上启动 Nacos Server。 4. 配置 Nginx 或者其他的负载均衡器,将请求分发到不同的 Nacos 节点。 具体的步骤如下: 1. 下载 Nacos Server 的安装包。可以从官网下载:https://github.com/alibaba/nacos/releases。 2. 解压安装包到不同的服务器上。假设我们有 3 台服务器,分别是 nacos1、nacos2、nacos3。 3. 修改每个节点的 cluster.conf 文件,指定 Nacos 集群的节点信息。具体配置如下: nacos1:8848 nacos2:8848 nacos3:8848 注意,每个节点的 cluster.conf 文件都应该包含所有节点的信息。 4. 修改每个节点的 application.properties 文件,主要配置如下: spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=nacos db.password=nacos server.port=8848 cluster.name=nacos-cluster 以上是一个简单的配置,根据实际情况可以进行调整。 5. 在每个节点上启动 Nacos Server。可以使用以下命令启动: sh startup.sh -m standalone 或者 sh startup.sh -m cluster 如果是单机模式,就使用 standalone,如果是集群模式,就使用 cluster。 6. 配置负载均衡器。可以使用 Nginx 或者其他的负载均衡器,将请求分发到不同的 Nacos 节点。 以上就是搭建 Nacos 集群的基本步骤,具体的细节还需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

who_am_i__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值