<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一文搞定 Eureka 集群高可用配置

          共 6401字,需瀏覽 13分鐘

           ·

          2021-06-03 09:12

          點(diǎn)擊上方藍(lán)色架構(gòu)薈萃關(guān)注我們,輸入1024,你懂的


          前言

          點(diǎn)對(duì)點(diǎn)去中心化的架構(gòu):解決單點(diǎn)問(wèn)題

          通過(guò)部署多節(jié)點(diǎn) Eureka 實(shí)例,避免單點(diǎn)問(wèn)題,滿足高可用架構(gòu)。同時(shí)節(jié)點(diǎn)之間的地位是平等,節(jié)點(diǎn)通信方式采用點(diǎn)對(duì)點(diǎn)方式(peer to peer),以便滿足數(shù)據(jù)同步問(wèn)題,這是一種去中心化的分布式架構(gòu)。

          在這種架構(gòu)中,peer 節(jié)點(diǎn)之間通過(guò)相互注冊(cè)來(lái)提高可用性,每個(gè)peer節(jié)點(diǎn)通過(guò)serviceUrl指定其他peer節(jié)點(diǎn)。

          如果某臺(tái)Eureka服務(wù)器宕機(jī),Eureka客戶端的請(qǐng)求會(huì)自動(dòng)切換到新的Eureka服務(wù)器節(jié)點(diǎn),當(dāng)宕機(jī)的服務(wù)器重新恢復(fù)后,Eureka會(huì)再次將其納入到服務(wù)器集群管理中。當(dāng)節(jié)點(diǎn)開(kāi)始接受客戶端請(qǐng)求時(shí),所有的操作也會(huì)進(jìn)行節(jié)點(diǎn)間復(fù)制,將請(qǐng)求復(fù)制到其他Eureka服務(wù)器當(dāng)前所知的節(jié)點(diǎn)中。這點(diǎn)和Zookeepermaster/salve集中化機(jī)構(gòu)有很大的區(qū)別,zookeeper認(rèn)為任何時(shí)候都要一個(gè)master節(jié)點(diǎn),滿足節(jié)點(diǎn)之間任務(wù)調(diào)度和節(jié)點(diǎn)路由問(wèn)題,保證的是CP原理,是一種集中式中心化分布式架構(gòu)。

          Eureka 客戶端負(fù)載均衡

          用過(guò) Eureka 的同學(xué)知道,當(dāng)一個(gè)微服務(wù)向注冊(cè)中心注冊(cè)成功后,會(huì)返回狀態(tài)碼204,同時(shí)會(huì)獲取注冊(cè)中心的服務(wù)列表緩存在本地,以便滿足Feign以及Ribbon的調(diào)用,這是所謂的客戶端負(fù)載均衡。

          peer 節(jié)點(diǎn)通信機(jī)制

          為了讓每個(gè)peer節(jié)點(diǎn)都能夠獲取所有注冊(cè)服務(wù)列表,Eureka的做法是peer節(jié)點(diǎn)之間相互復(fù)制注冊(cè)服務(wù)信息列表來(lái)實(shí)現(xiàn)同步,這樣每個(gè)peer節(jié)點(diǎn)都有一份所有注冊(cè)服務(wù)列表的一套副本。

          CAP 原理

          CAP原理的誕生源于對(duì)分布式架構(gòu)的發(fā)展,特別是微服務(wù)架構(gòu)下對(duì)于分布式數(shù)據(jù)庫(kù)環(huán)境要求。

          Eureka屬于AP架構(gòu),Eureka認(rèn)為每個(gè)節(jié)點(diǎn)最先要保證的是對(duì)外提供服務(wù),即使每個(gè)節(jié)點(diǎn)隔離或者失去聯(lián)系也要對(duì)外保證注冊(cè)中心高可用,但這樣會(huì)導(dǎo)致每個(gè)節(jié)點(diǎn)的數(shù)據(jù)可能存在不一致性。

          Eureka Server 集群高可用配置

          新建 dcp-eureka-peer1、dcp-eureka-peer2、dcp-eureka-peer3工程,添加maven依賴

          <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server
            </artifactId>
          </dependency>

          dcp-eureka-peer1啟動(dòng)文件設(shè)置:bootstrap.yml

          server: 
            port: 8761
            
          spring: 
            application: 
              name: dcp-eureka-peer1

          eureka: 
            client:
              # 是否注冊(cè)到eureka 
              register-with-eureka: false
              # 是否從eureka獲取注冊(cè)信息 
              fetch-registry: false 
              service-url: 
                defaultZone: http://dcp-eureka-peer2:8762/eureka/,http://dcp-eureka-peer3:8763/eureka/...

          dcp-eureka-peer2啟動(dòng)文件設(shè)置:bootstrap.yml

          server: 
            port: 8762
            
          spring: 
            application: 
              name: dcp-eureka-peer2

          eureka: 
            client:
            # 是否注冊(cè)到eureka 
            register-with-eureka: false
            # 是否從eureka獲取注冊(cè)信息 
            fetch-registry: false 
            service-url: 
              defaultZone: http://dcp-eureka-peer1:8761/eureka/,http://dcp-eureka-peer3:8763/eureka/...

          dcp-eureka-peer3啟動(dòng)文件設(shè)置:bootstrap.yml

          server: 
            port: 8763
            
          spring: 
            application: 
              name: dcp-eureka-peer3
              
          eureka: 
            client:
              # 是否注冊(cè)到 eureka 
              register-with-eureka: false
              # 是否從eureka獲取注冊(cè)信息 
              fetch-registry: false 
              service-url: 
                defaultZone: http://dcp-eureka-peer1:8761/eureka/,http://dcp-eureka-peer2:8762/eureka/...

          本機(jī)host文件配置

          127.0.0.1 dcp-eureka-peer1 
          127.0.0.1 dcp-eureka-peer2
          127.0.0.1 dcp-eureka-peer3

          Eureka Peer1啟動(dòng)類配置,Eureka Peer2、Eureka Peer3寫法類似。

          @EnableEurekaServer
          @SpringBootApplication
          public class EurekaPeer1 {
            public static void main(String[] args) {
              SpringApplication.run(EurekaPeer1.class, args);
            }
          }

          Eureka客戶端配置

          新建dcp-helloworld-service工程,添加maven依賴

          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
          </dependency>
          <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
          </dependency>

          啟動(dòng)文件設(shè)置:bootstrap.yml

          # server
          server: 
            port: 8001
          # spring
          spring: 
            application: 
              name: dcp-hellworld-service
          # eureka
          eureka: 
            client: 
              serviceUrl: 
                defaultZone: http://dcp-eureka-peer1:8761/eureka/,http://dcp-eureka-peer2:8761/eureka/,http://dcp-eureka-peer3:8761/eureka/ 
                instance: 
                  status-page-url-path: /info 
                  instanceId: ${spring.application.name}:${random.value} 
                  prefer-ip-address: true 
                  registry-fetch-interval-seconds: 30 
                  lease-renewal-interval-in-seconds: 15 
                  lease-expiration-duration-in-seconds: 15

          hello服務(wù)如何注冊(cè)到Eureka關(guān)鍵點(diǎn)在于eureka.client.serviceUrl.defaultZone參數(shù)值。

          http://dcp-eureka-peer1:8761/eureka/,http://dcp-eureka-peer2:8761/eureka/,http://dcp-eureka-peer3:8761/eureka/

          一般情況下,默認(rèn)配置Eureka注冊(cè)地址是:http://localhost:8761/eureka/,但是在實(shí)際的生產(chǎn)環(huán)境是不建議配置單節(jié)點(diǎn)的Eureka,目的是防止Eureka注冊(cè)中心宕機(jī),導(dǎo)致所有微服務(wù)不可用。

          所以,在生產(chǎn)環(huán)境一般配置高可用的eureka注冊(cè)中心,標(biāo)配是三個(gè)節(jié)點(diǎn), 可以部署到在K8s平臺(tái)的Docker容器里,便于集群管理。

          用k8s部署服務(wù)有很多好處,其中之一就是當(dāng)某個(gè)Eureka注冊(cè)中心節(jié)點(diǎn)掛了,K8s會(huì)智能檢測(cè)Eureka的容器實(shí)例運(yùn)行狀態(tài)并把不可用的Eureka節(jié)點(diǎn)移除掉,然后會(huì)重新啟動(dòng)新的Eureka容器實(shí)例,始終保持三個(gè)活的Eureka注冊(cè)中心節(jié)點(diǎn),這樣就做到了Eureka注冊(cè)中心高可用了。

          小試牛刀

          啟動(dòng)dcp-eureka-peer1注冊(cè)中心節(jié)點(diǎn),日志輸出信息:

          c.n.eureka.cluster.PeerEurekaNodes : Adding new peer nodes [http://dcp-eureka-peer3:8763/eureka/, http://dcp-eureka-peer2:8762/eureka/]

          啟動(dòng)dcp-eureka-peer2注冊(cè)中心節(jié)點(diǎn),日志輸出信息:

          c.n.eureka.cluster.PeerEurekaNodes : Adding new peer nodes [http://dcp-eureka-peer3:8763/eureka/, http://dcp-eureka-peer1:8761/eureka/]

          啟動(dòng)dcp-eureka-peer3注冊(cè)中心節(jié)點(diǎn),日志輸出信息:

          c.n.eureka.cluster.PeerEurekaNodes : Adding new peer nodes [http://dcp-eureka-peer2:8762/eureka/, http://dcp-eureka-peer1:8761/eureka/]

          啟動(dòng)dcp-hellworld-service eureka客戶端服務(wù)注冊(cè),日志輸出信息:

          com.netflix.discovery.DiscoveryClient : DiscoveryClient_DCP-HELLWORLD-SERVICE/dcp-hellworld-service:806af348fd3d07e6543fe2bf8c103b37 - registration status: 204

          打開(kāi)在瀏覽器Eureka注冊(cè)中心頁(yè)面地址:http://localhost:8761/

          Eureka 注冊(cè)中心節(jié)點(diǎn)信息

          微服務(wù)列表信息

          物理機(jī)信息



          推薦閱讀:
          MySQL索引原理
          由淺入深逐步講解Java并發(fā)的半壁江山AQS
          ThreadLocal內(nèi)存溢出代碼演示和原因分析!

          關(guān)號(hào)互聯(lián)網(wǎng)全棧架構(gòu)價(jià)。

          瀏覽 74
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲国产另类无码 | 欧美在线观看视频 | 国产无精乱码一区二区三区 | 在线观看免费无码视频 | 亚洲人成电影一区二区在线 |