Eureka集群单机配置

1. 单机Eureka配置(无集群)

1.1. Eureka服务端

1.1.1. 引入依赖

注意细节:这里artifactId是 spring-cloud-starter-netflix-eureka-server 如果没有starter会报错!

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
    <!--@controller依赖等-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

1.1.2. 主启动类

@SpringBootApplication
@EnableEurekaServer		// 开启Eureka服务端
public class EurekaMain7001 {
   
    public static void main(String[] args) {
   
        SpringApplication.run(EurekaMain7001.class,args);
    }
}

1.1.3. 配置文件application.yml

server:						# 当前模块的端口
  port: 7001

eureka:
  instance:
    hostname: localhost   # eureka服务端的实例名
  client:
    register-with-eureka: false # 不在注册中心注册自己
    fetch-registry: false       # 表示自己是注册中心,不需要检索服务
    service-url:
      defalult-zone: http://${eureka.instance.hostname}:${server.port}/eureka/

此时启动该spring boot模块,访问http://localhost:7001可以看到Eureka的页面

1.2. Eureka客户端

1.2.1. 引入依赖

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

1.2.2. 主启动类

@SpringBootApplication
@EnableEurekaClient			// 开启Eureka客户端
public class PaymentMain8001 {
   
    public static void main(String[] args) {
   
        SpringApplication.run(PaymentMain8001.class,args);
    }
}

1.2.3. 配置文件application.yml

server:
  port: 8001
spring:				
  application:
    name: cloud-payment-service		# 这里配置的name在注册入Eureka时就是的名字

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:7001/eureka

配置完成后进入服务端页面http://localhost:7001

img

可以看到已经注册成功

2. 配置Eureka集群

2.1. 加入security安全验证

加入此依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <version>2.3.12.RELEASE</version>
        </dependency>

2.1.1. 配置过滤csrf

eureka会全自动化配置csrf防御机制,会拦截互相注册请求。

@EnableWebSecurity
public class SecurityConf extends WebSecurityConfigurerAdapter {
	@Override
	protected void configure(HttpSecurity http) throws Exception {
        //两种方式
		//关闭csrf
		http.csrf().disable();
		//忽略csrf中eureka节点请求
		//http.csrf().ignoringAntMatchers("/eureka/**");
        super.configure(http);

	}
}

2.2. 集群配置文件

有两种:

1.eureka.client.register-with-eureka=true eureka服务器之间互相注册

2.eureka.client.register-with-eureka=false 服务器之间互相独立,服务需要向每台eureka服务器注册,拉取服务列表的时候,需要拉取多台(HTTP请求会变多),Eureka的可靠性增强,降低了一致性

两个Eureka模块进行相互注册

7001:

spring:
    application:
        name: eureka-server
    #安全验证配置
    security:
        user:
            name: root
            password: 123456
#端口配置
server:
    port: 7001
eureka:
    name: root
    password: 123456
    client:
        region: zsy
        availability-zones:
            zsy: zsy-zone1,zsy-zone2
        #表示是否将自己注册进EurekaServer默认为true
        #如果建高可用的系统,需要设置为true
        fetch-registry: true
        #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
        register-with-eureka: true
        service-url:
            defaultZone: 					http://${eureka.name}:${eureka.password}@127.0.0.1:7002/eureka/,http://${eureka.name}:${eureka.password}@127.0.0.1:7001/eureka/
    instance:
        hostname: zone1
        #服务续约
        # Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
        lease-renewal-interval-in-seconds: 10
        # Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
        lease-expiration-duration-in-seconds: 20
        # 访问路径可以显示IP地址
        prefer-ip-address: true
        # 主机名:应用名:ip:端口
        instance-id: ${spring.cloud.client.hostname}:${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
    server:
        # 关闭自我保护机制,保证不可用服务被及时剔除,默认打开
        enable-self-preservation: false
#        # 失效剔除,单位是毫秒,默认为90秒
#        eviction-interval-timer-in-ms: 20000

7002:

spring:
    application:
        name: eureka-server
    #安全验证配置
    security:
        user:
            name: root
            password: 123456
#端口配置
server:
    port: 7002
eureka:
    name: root
    password: 123456
    client:
        region: zsy
        availability-zones:
            zsy: zsy-zone2,zsy-zone1
        #表示是否将自己注册进EurekaServer默认为true
        #如果建高可用的系统,需要设置为true
        fetch-registry: true
        #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
        register-with-eureka: true
        service-url:
            defaultZone: http://${eureka.name}:${eureka.password}@127.0.0.1:7002/eureka/,http://${eureka.name}:${eureka.password}@127.0.0.1:7001/eureka/
    instance:
        hostname: zone2
        #服务续约
        # Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
        lease-renewal-interval-in-seconds: 10
        # Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
        lease-expiration-duration-in-seconds: 20
        # 访问路径可以显示IP地址
        prefer-ip-address: true
        # 主机名:应用名:ip:端口
        instance-id: ${spring.cloud.client.hostname}:${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
    server:
        # 关闭自我保护机制,保证不可用服务被及时剔除,默认打开
        enable-self-preservation: false
#        # 失效剔除,单位是毫秒,默认为90秒
#        eviction-interval-timer-in-ms: 20000

此时启动可以发现两个Eureka已经相互注册上了。

image-20230126161937138

2.3. 常用配置解析

2.3.1. eureka.server前缀的配置项

# 是否允许开启自我保护模式,缺省:true
# 当Eureka服务器在短时间内丢失过多客户端时,自我保护模式可使服务端不再删除失去连接的客户端
eureka.server.enable-self-preservation = false

# Peer节点更新间隔,单位:毫秒
eureka.server.peer-eureka-nodes-update-interval-ms = 

# Eureka服务器清理无效节点的时间间隔,单位:毫秒,缺省:60000,即60秒
eureka.server.eviction-interval-timer-in-ms = 60000

2.3.2. eureka.instance前缀的配置项

# 服务名,默认取 spring.application.name 配置值,如果没有则为 unknown
eureka.instance.appname = eureka-client

# 实例ID
eureka.instance.instance-id = eureka-client-instance1

# 应用实例主机名
eureka.instance.hostname = localhost

# 客户端在注册时使用自己的IP而不是主机名,缺省:false
eureka.instance.prefer-ip-address = false

# 应用实例IP
eureka.instance.ip-address = 127.0.0.1

# 服务失效时间,失效的服务将被剔除。单位:秒,默认:90
eureka.instance.lease-expiration-duration-in-seconds = 90

# 服务续约(心跳)频率,单位:秒,缺省30
eureka.instance.lease-renewal-interval-in-seconds = 30

# 状态页面的URL,相对路径,默认使用 HTTP 访问,如需使用 HTTPS则要使用绝对路径配置,缺省:/info
eureka.instance.status-page-url-path = /info

# 健康检查页面的URL,相对路径,默认使用 HTTP 访问,如需使用 HTTPS则要使用绝对路径配置,缺省:/health
eureka.instance.health-check-url-path = /health

2.3.3. eureka.client前缀

# Eureka服务器的地址,类型为HashMap,缺省的Key为 defaultZone;缺省的Value为 http://localhost:8761/eureka
# 如果服务注册中心为高可用集群时,多个注册中心地址以逗号分隔。 
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka

# 是否向注册中心注册自己,缺省:true
# 一般情况下,Eureka服务端是不需要再注册自己的
eureka.client.register-with-eureka = true

# 是否从Eureka获取注册信息,缺省:true
# 一般情况下,Eureka服务端是不需要的
eureka.client.fetch-registry = true

# 客户端拉取服务注册信息间隔,单位:秒,缺省:30
eureka.client.registry-fetch-interval-seconds = 30

# 是否启用客户端健康检查
eureka.client.health-check.enabled = true

# 
eureka.client.eureka-service-url-poll-interval-seconds = 60

# 连接Eureka服务器的超时时间,单位:秒,缺省:5
eureka.client.eureka-server-connect-timeout-seconds = 5

# 从Eureka服务器读取信息的超时时间,单位:秒,缺省:8
eureka.client.eureka-server-read-timeout-seconds = 8

# 获取实例时是否只保留状态为 UP 的实例,缺省:true
eureka.client.filter-only-up-instances = true

# Eureka服务端连接空闲时的关闭时间,单位:秒,缺省:30
eureka.client.eureka-connection-idle-timeout-seconds = 30

# 从Eureka客户端到所有Eureka服务端的连接总数,缺省:200
eureka.client.eureka-server-total-connections = 200

# 从Eureka客户端到每个Eureka服务主机的连接总数,缺省:50
eureka.client.eureka-server-total-connections-per-host = 50

2.4. 客户端注册

这里修改比较简单,只要在对应的要注册入Eureka的模块的application.yml文件中修改defaultZone,将集群的两个Eureka服务器都加入配置即可:

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
    	# 此时两个服务器都配置在defaultZone中
        # 根据实际修改
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/

配置完成后就可以发现服务提供端注册入了两个Eureka。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值