SpringCloud微服务:Nacos的集群、负载均衡、环境隔离
目录
集群
在user-service的yml文件配置集群
启动服务
负载均衡
order-service配置集群
设置负载均衡
当本地集群的服务挂掉时
访问权重
环境隔离
1、Nacos服务分级存储模型
一级是服务,例如userservice二级是集群,例如杭州或上海
三级是实例,例如杭州机房的某台部署了userservice的服务器
2、如何设置实例的集群属性
修改application.yml文件,添加
spring.cloud.nacos.discovery.cluster-name属性即可
3、NacosRule负载均衡策略
优先选择同集群服务实例列表
本地集群找不到提供者,才去其它集群寻找,并且会报警告
确定了可用实例列表后,再采用随机负载均衡挑选实例4、实例的权重控制
Nacos控制台可以设置实例的权重值,0~1之间同集群内的多个实例,权重越高被访问的频率越高
权重设置为0则完全不会被访问
5、Nacos环境隔离
namespace用来做环境隔离每个namespace都有唯一id
不同namespace下的服务不可见
集群
在user-service的yml文件配置集群
spring: cloud : nacos: server-addr: localhost:8848 # nacos服务端地址 discovery: cluster-name: HZ #配置集群名称,也就是机房位置
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
username: root
password: 1234
driver-class-name: com.mysql.jdbc.Driver
application:
name: orderservice #order的微服务名称
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ #集群名称
# namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空间id
mybatis:
type-aliases-package: cn.itcast.user.pojo
configuration:
map-underscore-to-camel-case: true
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
#eureka:
# client:
# service-url: #eureka地址信息1
# defaultZone: http://127.0.0.1:10086/eureka
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则:随机。范围:userservice服务
ribbon:
eager-load:
enabled: true #开启饥饿加载
clients: #指定饥饿加载的服务
- userservice
启动服务
启动两个user-service
把集群名改成:SH
再启动第三个user-service
在nacos提供的网址中,可以看到集群名和在集群下的服务
负载均衡
order-service配置集群
这里我们选择配置HZ
cloud: nacos: server-addr: localhost:8848 discovery: cluster-name: HZ #集群名称
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
username: root
password: 1234
driver-class-name: com.mysql.jdbc.Driver
application:
name: orderservice #order的微服务名称
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ #集群名称
# namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空间id
mybatis:
type-aliases-package: cn.itcast.user.pojo
configuration:
map-underscore-to-camel-case: true
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
#eureka:
# client:
# service-url: #eureka地址信息1
# defaultZone: http://127.0.0.1:10086/eureka
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则:随机。范围:userservice服务
启动服务,并通过网页请求数据
会发现通过order-service访问的user-service是轮循的方式
设置负载均衡
在order-service中设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务:
userservice:
ribbon :
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
username: root
password: 1234
driver-class-name: com.mysql.jdbc.Driver
application:
name: orderservice #order的微服务名称
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ #集群名称
# namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空间id
mybatis:
type-aliases-package: cn.itcast.user.pojo
configuration:
map-underscore-to-camel-case: true
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
#eureka:
# client:
# service-url: #eureka地址信息1
# defaultZone: http://127.0.0.1:10086/eureka
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则:随机。范围:userservice服务
启动服务,并通过网页请求数据
会发现只有user1和user2会访问数据,因为他们是本地集群(与order一样的集群)。并且它们两个会随机访问。
当本地集群的服务挂掉时
通过网页进行访问时,仍然成功,但是order-service会出现警告,提示是通过非本地集群(user3)访问的数据。
访问权重
在nacos提供的网站中,调节同一个集群的某个服务的权重,可以改变它访问的次数。
这里改成0.1后,再进行网页的数据请求。
会发现,user2请求10次,而user1才会请求一次。这符合0.1:1的权重
当权重改为0时,将不再访问该服务
环境隔离
在nacos提供的网页中,点击命名空间,点击新建空间,但是改变环境需要再代码里修改
修改order-service的application.yml,添加namespace
spring:
datasource:
url: jdbc:mysql://localhost:3306/ heima?useSSL=falseusername: root
password: 123
driver-class-name: com.mysql.jdbc.Drivercloud :
nacos:
server-addr: localhost:8848discovery:
cluster-name: SH#上海
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 #命名空间,填ID
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
username: root
password: 1234
driver-class-name: com.mysql.jdbc.Driver
application:
name: orderservice #order的微服务名称
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ #集群名称
namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空间id
mybatis:
type-aliases-package: cn.itcast.user.pojo
configuration:
map-underscore-to-camel-case: true
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
#eureka:
# client:
# service-url: #eureka地址信息1
# defaultZone: http://127.0.0.1:10086/eureka
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则:随机。范围:userservice服务
ribbon:
eager-load:
enabled: true #开启饥饿加载
clients: #指定饥饿加载的服务
- userservice
运行代码后,在nacos网站观察
可以发现order-service已经不在了
点击上放的dev跳转到dev空间
可以看到order-service服务到了这个空间
这时我们再访问网页数据
发现报错
因为已经不是同一个空间了,order已经无法访问不同空间的user
代码文件点击下载https://pan.baidu.com/s/1AzOYfkotUYA_vNNR6BlZrw?pwd=5vu5
上一篇:Nacos快速入门
下一篇:Nacos和Eureka的区别