高可用,就是多台机器提供同一个服务,有几台机器停机了另外几台还可保持提供服务,不至于出现无法访问。
本次用两台机器来实现Eureka的高可用。
在上一篇:《单节点的注册中心搭建》 的基础上继续操作。
只需要修改下Eureka项目的配置文件就可以了,即 application.yml
操作步骤:
- 修改注册中心项目的配置文件,启动一个实例。
- 修改同一个注册中心项目的配置文件,把端口改掉,然后启动实例。
第一个注册中心的设置:
server:
port: 8201 # 注册中心的端口号
spring:
application:
# 应用名称 即:Application列(可以认为是服务分组的名称)
name: config-center
eureka:
instance:
# 本实例的访问主机,即:Status列中链接的hostname部分。 如果 prefer-ip-address 项设置为true,则这里将会使用对应服务的IP
hostname: eureka-${server.port}
# 本实例ID,即:Status列中链接的文本部分。如果不写默认为(主机名:应用名称:端口号)。按实例ID来区分在Status中的链接
instance-id: eureka-id-${server.port}
# 指定本实例的链接hostname部分用IP。
prefer-ip-address: true
client:
# 是否向注册中心注册自己,这里只有一台就不注册了
register-with-eureka: true
# 要不要去注册中心获取其他服务的地址,这里只有一台就不需要了
fetch-registry: true
service-url:
# 注册中心提供服务的地址,服务器开放的通信地址,其它服务可以通过这个地址注册过来(就是发注册的请求给注册中心)
# http://域名:端口 域名是要给别的服务能访问到的(测试的时候在本机所以用localhost了,也可以用127.0.0.1),端口就是本注册中心的端口${server.port}表示用的本注册中心的端口,即8201
defaultZone: http://localhost:${server.port}/eureka, http://localhost:8221/eureka
server:
# 是否允许开启自我保护模式
enable-self-preservation: false
# Eureka服务器清理无效节点的时间间隔,单位:毫秒
eviction-interval-timer-in-ms: 5000
设置好后启动。
这时会报错:
com.sun.jersey.api.client.ClientHandlerException: org.apache.http.conn.ConnectTimeoutException: Connect to localhost:8221 timed out
这是因为第个注册中心8221还没有启动造成的,等8221的注册中心启动后就好了。
第二个注册中心的设置
我们在第一个注册中心的配置文件基础上修改下然后启动。
server:
port: 8221 # 注册中心的端口号
spring:
application:
# 应用名称 即:Application列(可以认为是服务分组的名称)
name: config-center
eureka:
instance:
# 本实例的访问主机,即:Status列中链接的hostname部分。 如果 prefer-ip-address 项设置为true,则这里将会使用对应服务的IP
hostname: eureka-${server.port}
# 本实例ID,即:Status列中链接的文本部分。如果不写默认为(主机名:应用名称:端口号)。按实例ID来区分在Status中的链接
instance-id: eureka-id-${server.port}
# 指定本实例的链接hostname部分用IP。
prefer-ip-address: true
client:
# 是否向注册中心注册自己,这里只有一台就不注册了
register-with-eureka: true
# 要不要去注册中心获取其他服务的地址,这里只有一台就不需要了
fetch-registry: true
service-url:
# 注册中心提供服务的地址,服务器开放的通信地址,其它服务可以通过这个地址注册过来(就是发注册的请求给注册中心)
# http://域名:端口 域名是要给别的服务能访问到的(测试的时候在本机所以用localhost了,也可以用127.0.0.1),端口就是本注册中心的端口${server.port}表示用的本注册中心的端口,即8201
defaultZone: http://localhost:${server.port}/eureka, http://localhost:8201/eureka
server:
# 是否允许开启自我保护模式
enable-self-preservation: false
# Eureka服务器清理无效节点的时间间隔,单位:毫秒
eviction-interval-timer-in-ms: 5000
然后启动:
同一个项目,在不同的端口分别启动了两个实例。
运行结果:
做下测试:
修改下product-service项目的配置,启动服务提供者:这是第一台
spring:
application:
name: product-service # 服务提供项目的实例名称
server:
port: 8202 # 服务提供项目的端口号
eureka:
instance:
instance-id: product-service:${server.port}
prefer-ip-address: true
client:
serviceUrl: # 这一项配置名称 与 service-url 效果相同
defaultZone: http://localhost:8201/eureka/, http://localhost:8221/eureka/ # 注册中心的服务地址
这是第二台,就改了下端口号
启动两个不同的服务提供者。
查看注册中心:
启动消费者
停掉一个注册中心,再访问消费者,依然可以交替访问服务提供者,说明高可用真的是可用的。