如何搭建Eureka Server 高可用集群

1.如何搭建Eureka Server 高可用集群

在互联网应用中,服务实例很少有单个的。
如果EurekaServer只有一个实例,该实例挂掉,正好微服务消费者本地缓存列表中的服务实例也不
可用,那么这个时候整个系统都受影响。
在生产环境中,我们会配置Eureka Server集群实现高可用。Eureka Server集群之中的节点通过点
对点(P2P)通信的方式共享服务注册表。我们开启两台 Eureka Server 以搭建集群。
由于是在个人计算机中进行测试很难模拟多主机的情况,Eureka配置server集群时需要执行host地
址。 所以需要修改个人电脑中host地址:
win10操作系统下:C:\Windows\System32\drivers\etc\host

127.0.0.1 LagouCloudEurekaServerA
127.0.0.1 LagouCloudEurekaServerB

将lagou-cloud-eureka复制一份为lagou-cloud-eureka9201

1、修改 lagou-cloud-eureka-server 工程中的yml配置文件 

 9200:

#Eureka server服务端口9201:
商品微服务:
server:
port: 9200
spring:
application:
name: lagou-cloud-eureka-server # 应用名称,会在Eureka中作为服务的id标识
(serviceId)
eureka:
instance:
hostname: LagouCloudEurekaServerA
client:
register-with-eureka: true
fetch-registry: true
serviceUrl:
defaultZone: http://LagouCloudEurekaServerB:9201/eureka

 9201:

#Eureka server服务端口
server:
port: 9201
spring:
application:
name: lagou-cloud-eureka-server # 应用名称,会在Eureka中作为服务的id标识
(serviceId)
eureka:
instance:
hostname: LagouCloudEurekaServerB
client:
register-with-eureka: true
fetch-registry: true
serviceUrl:
defaultZone: http://LagouCloudEurekaServerA:9200/eureka

商品微服务:

server:
port: 9000 # 后期该微服务多实例,9000(10个以内)
Spring:
application:
name: lagou-service-product
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/lagou?
useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
username: root
password: wu7787879
eureka:
client:
serviceUrl: # eureka server的路径页面静态化微服务:
服务消费者调用服务提供者
改造页面静态化微服务:之前是直接通过RestTemplate写死URL进行调用,现在通过Eureka方式进行调
用。
defaultZone:
http://lagoucloudeurekaservera:9200/eureka/,http://lagoucloudeurekaserverb:9201/
eureka/ #把 eureka 集群中的所有 url 都填写了进来,也可以只写一台,因为各个 eureka server
可以同步注册表
instance:
#使用ip注册,否则会使用主机名注册了(此处考虑到对老版本的兼容,新版本经过实验都是ip)
prefer-ip-address: true
#自定义实例显示格式,加上版本号,便于多版本管理,注意是ip-address,早期版本是ipAddress
instance-id: ${spring.cloud.client.ipaddress}:${spring.application.name}:${server.port}:@project.version@

 页面静态化微服务:

server:
port: 9100 # 后期该微服务多实例,端口从9100递增(10个以内)
Spring:
application:
name: lagou-service-page
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/lagou?
useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
username: root
password: wu7787879
eureka:
client:
serviceUrl: # eureka server的路径
defaultZone:
http://lagoucloudeurekaservera:9200/eureka/,http://lagoucloudeurekaserverb:9201/
eureka/ #把 eureka 集群中的所有 url 都填写了进来,也可以只写一台,因为各个 eureka server
可以同步注册表
instance:
#使用ip注册,否则会使用主机名注册了(此处考虑到对老版本的兼容,新版本经过实验都是ip)
prefer-ip-address: true
#自定义实例显示格式,加上版本号,便于多版本管理,注意是ip-address,早期版本是ipAddress
instance-id: ${spring.cloud.client.ipaddress}:${spring.application.name}:${server.port}:@project.version@

 服务消费者调用服务提供者

改造页面静态化微服务:之前是直接通过RestTemplate写死URL进行调用,现在通过Eureka方式进行调用。

@RestController
@RequestMapping("/page")
public class PageController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
@RequestMapping("/getData/{id}")
public Products findDataById(@PathVariable Integer id){1.5 Eureka细节详解
1.5.1 Eureka元数据详解
Eureka的元数据有两种:标准元数据和自定义元数据。
标准元数据:主机名、IP地址、端口号等信息,这些信息都会被发布在服务注册表中,用于服务之
间的调用。
自定义元数据:可以使用eureka.instance.metadata-map配置,符合KEY/VALUE的存储格式。这
些元数据可以在远程客户端中访问。
类似于
我们可以在程序中可以使用DiscoveryClient 获取指定微服务的所有元数据信息
//1.获得Eureka中注册的lagou-service-product实例集合
List<ServiceInstance> instances = discoveryClient.getInstances("lagouservice-product");
//2.获得实例集合中的第一个
ServiceInstance instance = instances.get(0);
//3.根据实例信息拼接IP地址
String host = instance.getHost();
int port = instance.getPort();
String url = "http://"+host+":"+port+"/product/query/"+id;
//4.调用
Products products = restTemplate.getForObject(url, Products.class);
System.out.println("从lagou-service-product获得product对象:"+products);
return products;
}
}

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值