• 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 #配置集群名称,也就是机房位置
    
    1. server:
    2. port: 8080
    3. spring:
    4. datasource:
    5. url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    6. username: root
    7. password: 1234
    8. driver-class-name: com.mysql.jdbc.Driver
    9. application:
    10. name: orderservice #order的微服务名称
    11. cloud:
    12. nacos:
    13. server-addr: localhost:8848
    14. discovery:
    15. cluster-name: HZ #集群名称
    16. # namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空间id
    17. mybatis:
    18. type-aliases-package: cn.itcast.user.pojo
    19. configuration:
    20. map-underscore-to-camel-case: true
    21. logging:
    22. level:
    23. cn.itcast: debug
    24. pattern:
    25. dateformat: MM-dd HH:mm:ss:SSS
    26. #eureka:
    27. # client:
    28. # service-url: #eureka地址信息1
    29. # defaultZone: http://127.0.0.1:10086/eureka
    30. userservice:
    31. ribbon:
    32. NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则:随机。范围:userservice服务
    33. ribbon:
    34. eager-load:
    35. enabled: true #开启饥饿加载
    36. clients: #指定饥饿加载的服务
    37. - userservice

    启动服务

    启动两个user-service 

    把集群名改成:SH

    再启动第三个user-service

    在nacos提供的网址中,可以看到集群名和在集群下的服务

    负载均衡

    order-service配置集群

    这里我们选择配置HZ

    cloud:
      nacos:
        server-addr: localhost:8848
        discovery:
          cluster-name: HZ #集群名称
    1. server:
    2. port: 8080
    3. spring:
    4. datasource:
    5. url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    6. username: root
    7. password: 1234
    8. driver-class-name: com.mysql.jdbc.Driver
    9. application:
    10. name: orderservice #order的微服务名称
    11. cloud:
    12. nacos:
    13. server-addr: localhost:8848
    14. discovery:
    15. cluster-name: HZ #集群名称
    16. # namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空间id
    17. mybatis:
    18. type-aliases-package: cn.itcast.user.pojo
    19. configuration:
    20. map-underscore-to-camel-case: true
    21. logging:
    22. level:
    23. cn.itcast: debug
    24. pattern:
    25. dateformat: MM-dd HH:mm:ss:SSS
    26. #eureka:
    27. # client:
    28. # service-url: #eureka地址信息1
    29. # defaultZone: http://127.0.0.1:10086/eureka
    30. userservice:
    31. ribbon:
    32. 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 #负载均衡规则

    1. server:
    2. port: 8080
    3. spring:
    4. datasource:
    5. url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    6. username: root
    7. password: 1234
    8. driver-class-name: com.mysql.jdbc.Driver
    9. application:
    10. name: orderservice #order的微服务名称
    11. cloud:
    12. nacos:
    13. server-addr: localhost:8848
    14. discovery:
    15. cluster-name: HZ #集群名称
    16. # namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空间id
    17. mybatis:
    18. type-aliases-package: cn.itcast.user.pojo
    19. configuration:
    20. map-underscore-to-camel-case: true
    21. logging:
    22. level:
    23. cn.itcast: debug
    24. pattern:
    25. dateformat: MM-dd HH:mm:ss:SSS
    26. #eureka:
    27. # client:
    28. # service-url: #eureka地址信息1
    29. # defaultZone: http://127.0.0.1:10086/eureka
    30. userservice:
    31. ribbon:
    32. 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

    1. server:
    2. port: 8080
    3. spring:
    4. datasource:
    5. url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    6. username: root
    7. password: 1234
    8. driver-class-name: com.mysql.jdbc.Driver
    9. application:
    10. name: orderservice #order的微服务名称
    11. cloud:
    12. nacos:
    13. server-addr: localhost:8848
    14. discovery:
    15. cluster-name: HZ #集群名称
    16. namespace: 8279562b-ce89-420a-b765-f8b2adfdbe49 #命名空间id
    17. mybatis:
    18. type-aliases-package: cn.itcast.user.pojo
    19. configuration:
    20. map-underscore-to-camel-case: true
    21. logging:
    22. level:
    23. cn.itcast: debug
    24. pattern:
    25. dateformat: MM-dd HH:mm:ss:SSS
    26. #eureka:
    27. # client:
    28. # service-url: #eureka地址信息1
    29. # defaultZone: http://127.0.0.1:10086/eureka
    30. userservice:
    31. ribbon:
    32. NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则:随机。范围:userservice服务
    33. ribbon:
    34. eager-load:
    35. enabled: true #开启饥饿加载
    36. clients: #指定饥饿加载的服务
    37. - userservice

    运行代码后,在nacos网站观察

    可以发现order-service已经不在了

    点击上放的dev跳转到dev空间

    可以看到order-service服务到了这个空间

    这时我们再访问网页数据

    发现报错

    因为已经不是同一个空间了,order已经无法访问不同空间的user

    代码文件点击下载icon-default.png?t=N7T8https://pan.baidu.com/s/1AzOYfkotUYA_vNNR6BlZrw?pwd=5vu5

  • 相关阅读:
    跟李沐学AI--深度学习之模型选择
    Spring Security三更草堂课程截图
    接口测试 Mock 实战(二) | 结合 jq 完成批量化的手工 Mock
    百度现在应该怎么去做搜索SEO优化?(川圣SEO)蜘蛛池
    Linux系统安全 非活跃会话自动断开连接机制
    Flink入门系列01-概述
    Android Studio(适配器Adapter)
    【Deep Learning 5】FNN前馈神经网络
    小李学知识之redis相关(redis面试题)
    【C++】set/multiset/map/multimap
  • 原文地址:https://blog.csdn.net/qq_63610563/article/details/134449244