暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

搭建分区Eureka

方家小白 2019-08-23
255


# 搭建Eureka


## 分区


对于一个用户量比较大或者地理位置分布范围很广的项目。跨地区调用时,延时比较大。我们可以通过同一个机房的服务优先调用同一个机房的服务,当本机房的服务不可用的时候,才会调用其他机房的服务。


### Eureka中的分区概念


eureka提供了region和zone两个概念。


* region: 地区。比如亚洲地区,欧洲地区。

* zone: region内的某个机房。


## 我的使用案例


几个同事一起开发一个项目,服务数量比较多,本机开发,启动所有服务,机器会比较卡。我就考虑大家集中注册到一个eureka中,但是这样服务就会互相干扰。但是分区这种配置正好符合我的场景。


我们使用调试服务的时候,就在自己的机器上启动对应服务,进行调试,这样会调用自己的服务。

而调用正常的服务的时候,只要有一个人启动服务,就可以了。我们其他人就也可以调用了。


## 搭建实例代码


* application-peer0.yml



    spring:
    application:
    # 指定应用的名称
        name: fxb-eureka-superman
    server:
      port: ${eureka_port:8760}
    eureka:
       instance:
          hostname: fxb-eureka-peer0
    # 更趋向IP地址
          prefer-ip-address: true
          secure-virtual-host-name: fxb.com
          virtual-host-name: moyang.com
          metadata-map:
            zone: superman
    client:
    service-url:
          wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eureka
          lipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eureka
          fengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eureka
          wangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka
          superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka
    # eureka client 刷新本地刷新时间,默认30s
        registry-fetch-interval-seconds: 5
        register-with-eureka: true
        fetch-registry: true
        # 更趋向同一zone的eureka
        prefer-same-zone-eureka: true
        region: beijing
    availability-zones:
          beijing: wangxiyue,superman,lipu_f,fengtiecheng,wangxiaowei_dev
       server:
    # eureka server 刷新read cache Map 的时间
        # 注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30秒
          response-cache-update-interval-ms: 30000
          #eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
          #由于启用了evict其实就用不太上改这个配置了
          #默认180s
          response-cache-auto-expiration-in-seconds: 180
    # 启动主动失效,并且每次主动失效检测时间间隔为3s
          eviction-interval-timer-in-ms: 3000
    management:
    endpoints:
    web:
    exposure:
            include"*"
    endpoint:
    health:
    show-details: always
    logging:
    level:
    root: INFO



    * application-peer1.yml

      spring:
      application:
      # 指定应用的名称
            name: fxb-eureka-wangxiyue
      server:
        port: ${eureka_port:8761}
      eureka:
      instance:
          hostname: fxb-eureka-peer1
      # 更趋向IP地址
          pefer-ip-address: true
      #    status-page-url-path: /actuator/info
      #    health-check-url-path: /actuator/health
      secure-virtual-host-name: fxb.com
      virtual-host-name: moyang.com
      metadata-map:
      zone: wangxiyue
      client:
      service-url:
      superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka
      wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eureka
      lipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eureka
      fengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eureka
      wangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka
      # eureka client 刷新本地刷新时间,默认30s
      registry-fetch-interval-seconds: 5
      register-with-eureka: true
      fetch-registry: true
      # 更趋向同一zone的eureka
      prefer-same-zone-eureka: true
      region: beijing
      availability-zones:
      beijing: superman,wangxiyue,lipu_f,fengtiecheng,wangxiaowei_dev
          server:
      # eureka server 刷新read cache Map 的时间
      # 意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30秒
      response-cache-update-interval-ms: 30000
      #eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
      #由于启用了evict其实就用不太上改这个配置了
      #默认180s
      response-cache-auto-expiration-in-seconds: 180
      # 启动主动失效,并且每次主动失效检测时间间隔为3s
      eviction-interval-timer-in-ms: 3000
      management:
      endpoints:
      web:
      exposure:
      include"*"
      endpoint:
      health:
      show-details: always
      logging:
      level:
      root: INFO

      * application-peer2.yml


        spring:
        application:
        # 指定应用的名称
        name: fxb-eureka-lipu_f


        server:
        port: ${eureka_port:8762}


        eureka:
        instance:
        hostname: fxb-eureka-peer2
        # 更趋向IP地址
        prefer-ip-address: true
        # status-page-url-path: actuator/info
        # health-check-url-path: actuator/health
        secure-virtual-host-name: fxb.com
        virtual-host-name: moyang.com
        metadata-map:
        zone: lipu_f
        client:
        service-url:
        superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka
        wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eureka
        lipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eureka
        fengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eureka
        wangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka
        # eureka client 刷新本地刷新时间,默认30s
        registry-fetch-interval-seconds: 5
        register-with-eureka: true
        fetch-registry: true
        # 更趋向同一zone的eureka
        prefer-same-zone-eureka: true
        region: beijing
        availability-zones:
        beijing: wangxiyue,superman,lipu_f,fengtiecheng,wangxiaowei_dev
        server:
        # eureka server 刷新read cache Map 的时间
        # 注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30秒
        response-cache-update-interval-ms: 30000
        #eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
        #由于启用了evict其实就用不太上改这个配置了
        #默认180s
        response-cache-auto-expiration-in-seconds: 180
        # 启动主动失效,并且每次主动失效检测时间间隔为3s
        eviction-interval-timer-in-ms: 3000
        management:
        endpoints:
        web:
        exposure:
        include: "*"
        endpoint:
        health:
        show-details: always


        logging:
        level:
        root: INFO


        application-peer3.yml


          spring:
          application:
          # 指定应用的名称
          name: fxb-eureka-fengtiecheng


          server:
          port: ${eureka_port:8763}


          eureka:
          instance:
          hostname: fxb-eureka-peer3
          # 更趋向IP地址
          prefer-ip-address: true
          # status-page-url-path: actuator/info
          # health-check-url-path: actuator/health
          secure-virtual-host-name: fxb.com
          virtual-host-name: moyang.com
          metadata-map:
          zone: fengtiecheng
          client:
          service-url:
          superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka
          wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eureka
          lipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eureka
          fengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eureka
          wangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka
          # eureka client 刷新本地刷新时间,默认30s
          registry-fetch-interval-seconds: 5
          register-with-eureka: true
          fetch-registry: true
          # 更趋向同一zone的eureka
          prefer-same-zone-eureka: true
          region: beijing
          availability-zones:
          beijing: lipu_f,superman,wangxiyue,fengtiecheng,wangxiaowei_dev
          server:
          # eureka server 刷新read cache Map 的时间
          # 注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30秒
          response-cache-update-interval-ms: 30000
          #eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
          #由于启用了evict其实就用不太上改这个配置了
          #默认180s
          response-cache-auto-expiration-in-seconds: 180
          # 启动主动失效,并且每次主动失效检测时间间隔为3s
          eviction-interval-timer-in-ms: 3000
          management:
          endpoints:
          web:
          exposure:
          include: "*"
          endpoint:
          health:
          show-details: always


          logging:
          level:
          root: INFO

          * application-peer4.yml

            spring:
            application:
            # 指定应用的名称
            name: fxb-eureka-wangxiaowei_dev
            server:
            port: ${eureka_port:8764}
            eureka:
            instance:
                   hostname: fxb-eureka-peer4
            # 更趋向IP地址
            prefer-ip-address: true
            secure-virtual-host-name: fxb.com
            virtual-host-name: moyang.com
            metadata-map:
                      zone: wangxiaowei_dev
            client:
            service-url:
            superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka


            wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eureka


            lipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eureka


            fengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eureka


                  wangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka
            # eureka client 刷新本地刷新时间,默认30s
            registry-fetch-interval-seconds: 5


            register-with-eureka: true


              fetch-registry: true
            # 更趋向同一zone的eureka
            prefer-same-zone-eureka: true
              region: beijing
            availability-zones:
                beijing: fengtiecheng,superman,wangxiyue,lipu_f,wangxiaowei_dev
            server:
              # eureka server 刷新read cache Map 的时间
            # 注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30秒
                response-cache-update-interval-ms: 30000
            #eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
            #由于启用了evict其实就用不太上改这个配置了
            #默认180s
                response-cache-auto-expiration-in-seconds: 180
                 # 启动主动失效,并且每次主动失效检测时间间隔为3s
            eviction-interval-timer-in-ms: 3000
            management:
              endpoints:
            web:
            exposure:
                        include"*"
            endpoint:
            health:
                show-details: always
            logging:
            level:
            root: INFO



            ### 注册逻辑


            * `prefer-same-zone-eureka``false`, 按照`service-url``list`第一个注册中心,并和其维持心跳检测.不会再向`list`中的其他注册中心注册和维持心跳. 只有在第一个注册失败的情况下,才会依次向其他注册中心注册。总共会注册三次,如果三次都没有成功,就会注册失败。每隔一个心跳时间,就会再次尝试了。

            * 如果`prefer-same-zone-eureka``true`,先通过`region``availability-zones`内的第一个`zone`,然后通过这个`zone``service-url`下的`list`,并向`list`内的第一个注册中心进行注册和维持心跳,不会再向list内的其它的注册中心注册和维持心跳。只有在第一个注册失败的情况下,才会依次向其它的注册中心注册,总共重试`3`次,如果`3``service-url`都没有注册成功,则注册失败。每隔一个心跳时间,会再次尝试。


            ### 注意


            为了保证服务注册到同一个zone的注册中心,一定要注意availability-zones的顺序,必须要把同一个zone写在前面。



            如果觉得在这里看着不方便,那就查看原文啊。


            文章转载自方家小白,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论