Nacos注册中心实战
2025-02-26 14:44:47 0 举报
AI智能生成
Nacos注册中心实战,分享给大家学习。 更多干货内容,欢迎关注我的公众号:Fox爱分享
作者其他创作
大纲/内容
课程目标
了解注册中心的设计思路,理解注册中心的核心功能需求
掌握Nacos注册中心使用,能够灵活运用Nacos
怎么学
没接触过微服务的同学一定要先把《轻松玩转微服务:新手入门Spring Cloud Alibaba》这节课跟一遍
用过Nacos但了解不深的同学可以直接学这节课
想学Nacos源码的同学可以看Nacos源码剖析课
课上代码
项目地址
git切换到nacos-teach分支,选择 tag v2.0.0
注册中心的设计思路
面试夺命连环三问
1)微服务为什么会用到注册中心?
2)如何设计一个注册中心?
3)注册中心应该包含哪些常见功能?
服务注册、服务发现和服务的健康检查机制。
注册中心的设计思路
Nacos基础回顾
发现新大陆:Nacos让服务互相认识
Nacos注册中心的架构
Nacos注册中心核心概念和功能
核心概念
服务 (Service)
元数据 (Service Metadata)
服务注册中心 (Service Registry)
命名空间(Namespace)
服务分组(Group)
核心功能
服务注册
服务心跳
服务同步
服务发现
服务健康检查
微服务整合Nacos注册中心常用配置项详解
准备测试环境
会员服务tlmall-user, 订单服务tlmall-order01
速通版
项目地址
可以切换到nacos-teach分支tag v2.0.0获取代码
会员调用获取订单接口,获取订单信息
服务逻辑隔离配置
数据模型
Namespace 隔离设计
1)在nacos控制台创建一个fox的命名空间
2)订单服务配置namespace为fox
重启订单服务,测试: 用户调用订单接口能否查询到订单信息
无法调通订单服务,提示:No instances available for tlmall-order01
原因:tlmall-order01和tlmall-user使用了不同的namespace,导致服务隔离,tlmall-user无法发现可用的tlmall-order01服务。
group服务分组
课后作业:验证group是否也可以实现隔离
服务领域模型
集群配置
测试,不同的集群的微服务之间是否能够调用
临时实例和持久化实例
健康检查的方式
临时实例使用客户端上报模式,需要能够自动摘除不健康实例,而且无需持久化存储实例。
持久化实例使用服务端探测的健康检查方式,因为客户端不会上报心跳, 所以不能自动摘除下线的实例。
适用场景
上层的业务微服务,例如订单微服务,库存微服务都可以上报心跳,都是临时实例
⼀些基础的组件例如数据库、缓存等,这些往往不能上报心跳,这种类型的服务在注册时,就需要作为持久化实例注册。
如何配置
Nacos默认注册的都是临时实例
常见错误
Current service DEFAULT_GROUP@@tlmall-order01 is ephemeral service, can't register persistent instance.
在 Nacos2.0 中将是否持久化的数据抽象至服务级别, 且不再允许⼀个服务同时存在持久化实例和非持久化实例,实例的持久化属性继承自服务的持久化属性。
The Raft Group [naming_persistent_service_v2] did not find the Leader node
要配置持久实例必须得是nacos集群模式
Nacos安全配置
Nacos是一个内部微服务组件,需要在可信的内部网络中运行,不可暴露在公网环境,防止带来安全风险。
官方参考文档
怎么做
nacos server端
conf/application.properties添加如下配置
随机字符串生成工具:
注意:鉴权开关是修改之后立马生效的,不需要重启服务端。
nacos client端
nacos sever开启鉴权后,微服务会提示 user not found!
微服务的application.yml中添加如下配置
默认用户名密码都是nacos,可以在nacos控制台创建新用户
重启微服务,测试是否成功注册到nacos
Nacos高可用集群最佳实践
nacos部署方式
单机模式 - 用于测试和单机试用。
集群模式 - 用于生产环境,确保高可用。
官方文档
集群部署架构图
最终方案:nginx+三节点nacos集群+mysql
为了保证数据一致性,集群环境需要用mysql(三节点都可以访问到mysql)替换内嵌的derby数据库。
搭建步骤
1)前期环境准备
三台linux虚拟机
安装好 JDK,需要 1.8 及其以上版本
注意: nacos2.3.2不能使用OpenJDK
Nacos 2.3.2 开启鉴权后控制台无论使用什么密码登录都显示账户密码错误
Centos7自带的OpenJDK和安装JDK1.8图文教程
建议: 2核 CPU / 4G 内存 及其以上
准备好nacos2.3.2的安装包
2)配置集群配置文件
注意:不要使用localhost或127.0.0.1,针对多网卡环境,nacos可以指定网卡或ip
3)开启默认鉴权插件
修改conf目录下的application.properties文件
4)配置数据源
使用外置mysql数据源,生产使用建议至少主备模式
4.1)初始化 MySQL 数据库
sql脚本
4.2)修改application.properties配置
常见错误
Nacos Server did not start because dumpservice bean construction failure :
No DataSource set
No DataSource set
检查nacos的mysql连接,数据库的ip、数据库、用户名和密码
5) 分别启动三个nacos节点
以192.168.65.207为例,进入nacos目录,启动nacos
6) 访问nacos管理界面
登录http://192.168.65.207:8848/nacos,用户名和密码都是nacos
nacos2.3.2的bug
注意: nacos2.3.2不能使用OpenJDK
Nacos 2.3.2 开启鉴权后控制台无论使用什么密码登录都显示账户密码错误
7) 微服务访问nacos,在yml中配置
Nginx配置负载均衡
注意
使用nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。 9849和7848端口为服务端之间的通信端口,请勿暴露到外部网络环境和客户端测。
搭建步骤
1)准备nginx环境
1.1 )如果安装了nginx,先检查nginx是否有stream模块,输出中包含:--with-stream
1.2) 安装nginx
如果提示依赖包下载失败,更换镜像源
2)配置http模块
在nginx的http下面配置http协议相关的地址和端口
3)配置grpc
需要nginx有stream模块支持
4) 启动nginx,然后就可以正常使用了。
5) 微服务访问nacos,yml中配置
收藏
收藏
0 条评论
下一页