zoukankan      html  css  js  c++  java
  • 第九篇: 高可用的服务注册中心

    文章 第一篇: 服务的注册与发现(Eureka) 介绍了服务注册与发现,其中服务注册中心Eureka Server,是一个实例,当成千上万个服务向它注册的时候,它的负载是非常高的,这在生产环境上是不太合适的,这篇文章主要介绍怎么将Eureka Server集群化。

    一、准备工作

    Eureka通过运行多个实例,使其更具有高可用性。事实上,这是它默认的熟性,你需要做的就是给对等的实例一个合法的关联serviceurl。

    这篇文章我们基于第一篇文章的工程,来做修改。

    二、改造工作

    在eureka-server工程中resources文件夹下,创建配置文件application-peer1.yml:

    server:
      port: 8761
    
    spring:
      profiles: peer1
    eureka:
      instance:
        #prefer-ip-address: false
        hostname: peer1
      client:
        serviceUrl:
          defaultZone: http://peer2:8769/eureka/,http://peer3:8770/eureka/
        registerWithEureka: true #这里显式的把这两个属性设为true,作为服务注册,当单点时,要设置为false。或者将application.yml的属性设为true,因为即使启动时加了参数peer1也会加载application.yml.
        fetchRegistry: true
    #这里显式的把registerWithEureka,fetchRegistry设为true,作为服务注册,当单点时,要设置为false。或者将application.yml的属性设为true,因为即使启动时加了参数peer1也会加载application.yml.(重要的事情写三遍)
    #这里显式的把registerWithEureka,fetchRegistry设为true,作为服务注册,当单点时,要设置为false。或者将application.yml的属性设为true,因为即使启动时加了参数peer1也会加载application.yml.(重要的事情写三遍)
    #这里显式的把registerWithEureka,fetchRegistry设为true,作为服务注册,当单点时,要设置为false。或者将application.yml的属性设为true,因为即使启动时加了参数peer1也会加载application.yml.(重要的事情写三遍)
     

    并且创建另外一个配置文件application-peer2.yml:

    server:
      port: 8769
    
    spring:
      profiles: peer2
    eureka:
      instance:
        #prefer-ip-address: false
        hostname: peer2
      client:
        serviceUrl:
          defaultZone: http://peer1:8761/eureka/,http://peer3:8770/eureka/
        registerWithEureka: true
        fetchRegistry: true

    并且创建另外一个配置文件application-peer3.yml:

    server:
      port: 8770
    
    spring:
      profiles: peer3
    eureka:
      instance:
        #prefer-ip-address: false
        hostname: peer3
      client:
        serviceUrl:
          defaultZone: http://peer1:8761/eureka/,http://peer2:8769/eureka/
        registerWithEureka: true
        fetchRegistry: true

    新建了peer1,peer2,peer3三个eureka配置文件,互相依赖。

    按照官方文档的指示,需要改变etc/hosts,linux系统通过vim /etc/hosts ,加上:

    127.0.0.1 peer1
    127.0.0.1 peer2
    127.0.0.1 peer3

    windows电脑,在C:WindowsSystem32driversetc修改。

    这时eureka-server就已经改造完毕。

    三、打包

    这时需要打成jar包,分别由三个配置文件启动eureka-server,成为一个三个节点的小集群。

    右键点击项目名 -》run as -》maven install打包。

    tip1:这里需要先打包项目的父依赖,也就是:

    <parent>
            <groupId>com.sun</groupId>
            <artifactId>springcloud-parent</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>

    springcloud-parent项目,否则会出现:Could not find artifact com.sun:springcloud-parent:pom:0.0.1-SNAPSHOT and 'parent.relativePath' points at wrong local POM这样的错误。

    tip2:我碰到打包的时候提示我jre环境错误,这时,需要右键项目-》build path-》configure build path:

    选择编译环境是jdk。

    正确打包后显示:

    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 3.939 s
    [INFO] Finished at: 2018-08-07T09:29:16+08:00
    [INFO] Final Memory: 43M/294M
    [INFO] ------------------------------------------------------------------------

     这时在项目的target路径下已经有了打包好的eureka-server.jar包:

    四、运行

    分别在命令提示框下,启动eureka-server:

    java -jar eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
    java -jar eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
    java -jar eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer3

    tip:在eureka-server.jar包的文件夹下,shift+右键可以直接打开命令行界面,这样就不用打路径了。

    启动eureka-client项目。

    当访问http://localhost:8761/http://localhost:8769/http://localhost:8770/三个地址,我们可以看到:

    你会发现注册了service-hi,并且有个peer2和peer3节点,

    同理访问localhost:8769你会发现有个peer1和peer3节点

    访问localhost:8770你会发现有个peer1和peer2节点

    client只向8761注册,但是你打开8769,8770,你也会发现,8769,8770也有 client的注册信息。

     

    Eureka-eserver peer1 8761,Eureka-eserver peer2 8769,Eureka-eserver peer3 8770相互感应,当有服务注册时,三个Eureka-eserver是对等的,它们都存有相同的信息,这就是通过服务器的冗余来增加可靠性,当有一台服务器宕机了,服务并不会终止,因为另两台服务存有相同的数据。

    最后感谢:https://blog.csdn.net/forezp/article/details/81041101博主的付出。

    但原文是有bug的,在这里感谢https://blog.csdn.net/u012470019/article/details/77973156博主。

  • 相关阅读:
    Amazon EBS的功能更新
    ORA-03113: end-of-file on communication channel
    云serverlinux又一次挂载指定文件夹(非扩充)
    Binder对象死亡通知机制
    cocos2d::ui::TextField 调用setAttachWithIME和setDetachWithIME都无效
    shell linux基本命令实例、笔记
    降智严重——nowcoder练习赛46&&codeforces #561 Div2
    2018-2-13-win10-uwp-隐藏实时可视化
    2018-2-13-win10-uwp-隐藏实时可视化
    2018-2-13-win10-UWP-ListView-模仿开始菜单
  • 原文地址:https://www.cnblogs.com/PPBoy/p/9435289.html
Copyright © 2011-2022 走看看