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
访问
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(对父项目根目录右键new
→Module
)
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
模块在接收到心跳包后,会按下图逻辑处理心跳包并返回响应:
- naming 模块收到心跳包,首先根据 IP 与端口判断 Nacos 是否存在该服务实例?如果实例信息不存在,在 Nacos 中注册登记该实例。而注册的本质是将新实例对象存储在“实例 Map”集合中;
- 如果实例信息已存在,记录本次心跳包发送时间;
- 设置实例状态为“健康”;
- 推送“微服务状态变更”消息;
- 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管理界面的集群管理的节点列表: