Back
Featured image of post Nacos服务注册与发现入门

Nacos服务注册与发现入门

docker单点部署

clone项目

git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker

修改配置文件

如果单机主机内存较小,可以修改配置文件example/standalone-derby.yaml 修改JVM运行内存

在nacos的environment 那里添加- JVM_XMS=256m- JVM_XMX=256m

version: "2"
services:
  nacos:
    image: nacos/nacos-server:latest
    container_name: nacos-standalone
    environment:
    - PREFER_HOST_MODE=hostname
    - MODE=standalone
    - JVM_XMS=256m
    - JVM_XMX=256m
    volumes:
    - ./standalone-logs/:/home/nacos/logs
    - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
    - "8848:8848"
  prometheus:
    container_name: prometheus
    image: prom/prometheus:latest
    volumes:
      - ./prometheus/prometheus-standalone.yaml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
    depends_on:
      - nacos
    restart: on-failure
  grafana:
    container_name: grafana
    image: grafana/grafana:latest
    ports:
      - 3000:3000
    restart: on-failure

docker-compose启动容器

最后加个-d后台运行

docker-compose -f example/standalone-derby.yaml up -d

访问

地址:http://[ip地址]:8848/nacos/

8848是nacos的默认端口号

web界面如下:

普通部署

到github: https://github.com/alibaba/nacos/releases/ 去获取Nacos的压缩包

# 解压
tar -xvf nacos-server-1.4.0.tar.gz

解压后 Nacos 目录结构如下。

  • bin:保存启用/关闭 Nacos Server 脚本;
  • conf:Nacos Server 配置目录;
  • data:Nacos 数据目录;
  • logs:存放日志目录;
  • target:Nacos Jar 包存放目录;
# 进入bin目录
cd bin

# 修改虚拟机内存
vim startup.sh

# 单机启动
sh startup.sh -m standalone

Springboot工程准备

创建

因为是微服务项目,一般是多个springboot项目的多模块项目,所以先建立一个大的空Maven项目,以备之后使用,再在下面建立Module(对父项目根目录右键newModule

Spring Initializr选中 Custom,写入阿里云地址http://start.aliyun.com

建立一个springboot项目,名字为nacos-sample-service,依赖除了spring-web之后记得一定还要选一个nacos-discovery

修改配置文件application.properties

# 应用名称
spring.application.name=nacos-sample-service
# 应用服务 WEB 访问端口
server.port=9000
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# 连接 Nacos 服务器使用的用户名密码默认为 nacos
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=49.234.82.226:8848
# 注册到 nacos 的指定 namespace默认为 public
spring.cloud.nacos.discovery.namespace=public

启动项目

启动后看到日志:

2021-04-13 23:42:46.933  INFO 75033 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9000 (http) with context path ''
2021-04-13 23:42:47.577  INFO 75033 --- [           main] c.a.c.n.registry.NacosServiceRegistry    : nacos registry, DEFAULT_GROUP nacos-sample-service 10.173.110.92:9000 register finished
2021-04-13 23:42:47.590  INFO 75033 --- [           main] c.c.n.NacosSampleServiceApplication      : Started NacosSampleServiceApplication in 16.484 seconds (JVM running for 24.374)

且在web界面看到服务已经被注册就证明已经成功了

Nacos 注册中心的心跳机制

下图阐述了微服务与 Nacos 服务器之间的通信过程。在微服务启动后每过5秒,会由微服务内置的 Nacos 客户端主动向 Nacos 服务器发起心跳包(HeartBeat)。心跳包会包含当前服务实例的名称、IP、端口、集群名、权重等信息。

naming 模块在接收到心跳包后,会按下图逻辑处理心跳包并返回响应:

  1. naming 模块收到心跳包,首先根据 IP 与端口判断 Nacos 是否存在该服务实例?如果实例信息不存在,在 Nacos 中注册登记该实例。而注册的本质是将新实例对象存储在“实例 Map”集合中;
  2. 如果实例信息已存在,记录本次心跳包发送时间;
  3. 设置实例状态为“健康”;
  4. 推送“微服务状态变更”消息;
  5. naming 模块返回心跳包时间间隔。

到这里一次完整的心跳包处理已完成。

Nacos Server 每过 20 秒对“实例 Map”中的所有“非健康”实例进行扫描,如发现“非健康”实例,随即从“实例 Map”中将该实例删除。

集群部署

配置数据库

用于同步各集群之间的数据,同步端口为7848,所以也记得要打开

修改nacos/conf/application.properties

### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

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

配置集群ip列表

复制一份样例的集群ip节点列表

cp cluster.conf.example cluster.conf

vim cluster.conf

添加所有集群的ip,一行一条

192.168.163.131:8848
192.168.163.132:8848
192.168.163.133:8848

启动集群

不用-m ,默认就是集群方式启动

# 启动
sh startup.sh

# 查看启动日志
tail -f ../logs/start.out

看到日志出现大概以下信息就说明启动成功

2021-04-17 17:20:44,801 INFO Nacos is starting...

2021-04-17 17:20:44,957 INFO Nacos Log files: /home/nacos/nacos/logs

2021-04-17 17:20:44,958 INFO Nacos Log files: /home/nacos/nacos/conf

2021-04-17 17:20:44,958 INFO Nacos Log files: /home/nacos/nacos/data

2021-04-17 17:20:44,958 INFO Nacos started successfully in cluster mode. use external storage

内存不够记得改下jvm启动内存(修改startup.sh文件)

最后打开Nacos管理界面的集群管理的节点列表:

comments powered by Disqus
一辈子热爱技术
Built with Hugo
Theme Stack designed by Jimmy
gopher