eureka的简单介绍,eureka单节点版的实现?eureka的自我保护?eureka的AP性,和CP性?

一、什么是eureka?

//        eureka是一个注册中心,实现了dubbo中zookeeper的效果!

二、实现eureka工程的搭建?
1.1 单节点版
    1.1    zookeeper 和 eureka的区别?
/*
1.    zookeeper不会把自己注册到注册中心,但是eureka会!
2.  配置eureka    需要配置不能把自己注册到注册中心里面。
3.    consumer 也不能把自己注册到注册中心。
4.    只要provider可以。
*/    

1.2    创建eureka工程
        20190926-springcloud-eureka-management(pom):只管理jar包
     子级项目  --20190926-springcloud-eureka-7081(jar):运行了eureka

1.3    jar包的添加
                所有的eureka都只会用到一个jar包
                eureka并不是springcloud公司的,是Netflix公司的产品,目前springcloud正在开发完善的springcloud架构来代替Netflix所提供的组件
                虽然eureka的工程构建仍然需要使用springboot,但是不再需要springboot-web-starter的jar包,因为eureka的jar包中已经有了
//                !!!!!如果添加则出现jar包冲突        

            eureka的jar包添加只需要在父工程中添加即可,所有的子工程都可以继承父工程的jar包
                springcloud官网中提供的springcloud2.x版本所规定的jar包格式:
                    <dependencies>
                        <dependency>
                            <groupId>org.springframework.cloud</groupId>
                            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
                        </dependency>
                    </dependencies>

1.4 eureka整个开发中,不涉及任何与业务有关的代码
/*
                application.properties
                ApplicationRun.java
                    @SpringBootApplication
                    @EnableEurekaServer

*/
1.5 把provider-8081注册进eureka中
/*
                在配置zookeeper的时候,无论是服务消费者还是服务生产者,都引入zookeeper的jar包(zkClinet)
                在配置eureka的时候,需要引入么?
                    !!很需要!!
                    <dependency>
                        <groupId>org.springframework.cloud</groupId>
                        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                    </dependency>
*/
                修改application.properties配置文件
                    在讲zookeeper的时候,zk.address=zookeeper的ip地址
                    现在使用eureka的时候,也需要eureka的地址(eureka的项目地址)
                    eureka.client.service-url.defaultZone=http://localhost:7081/eureka

                在provider-8081项目的主启动类上添加注解
                    @EnableDiscoveryClient:
                        springcloud2.x的版本注解
                    @EnableEurekaClient:
                        springcloud1.x的版本注解

1.6 配置eureka服务的信息(actuator-info)
//                为什么要配置?

                    虽然目前eureka注册中心中只有一个服务,但是在真实开发环境中可能有很多个(35个)
                    每一个团队/team是有多个人组成的,每一个开发人员开发的功能是不同的,
                        eg:
                            电商
                            cart微服务:zhangsan开发
                            order微服务:lisi开发
                            portal微服务:wangwu开发
                            这些微服务最终都需要注册进eureka中
                            假设zhangsan所开发的cart微服务出现问题了,这个问题是lisi发现的
                    如果其中有一个服务出现问题,这个服务正好是自己开发的,但是最终lisi看不到主要信息,直接描述不清楚,这种情况是绝对不允许在团队中出现!
/*
                    在provider-8081项目的application.properties中进行配置
                        配置eureka的实例名(Status下面所显示的名字)
                        不允许出现任何的重复!
                        eureka.instance.instance-id=虽然可以随意起,但是要求描述出整个微服务的作用
*/
                    当鼠标移动到服务名的时候,只会显示localhost,但是根据localhost并不能精准的定位到哪一台服务器,需要把localhost改为IP地址

                    # 在eureka中显示IP地址
    //                eureka.instance.prefer-ip-adderss=true

                    配置完毕后显示并不是本机的ip地址
                        provider的ip地址显示是相对于eureka做的内网映射
                        在eureka的整个注册中心里会指定内部的ip地址,必须要使provider和eureka在同一个内网中,
                        一旦provider成功的注册进了eureka,那么eureka就会给provider分配一个自己的内网ip
    //                每一台电脑是有两个IP的,一个是公网IP,一个是内网IP

                    实现点击服务名显示具体的服务信息
                        先添加jar包
                            <dependency>
                                <groupId>org.springframework.boot</groupId>
                                <artifactId>spring-boot-starter-actuator</artifactId>
                            </dependency>

    //                    在provider-8081项目的application.properties配置文件中添加:
                            info.author.name=Seven Lee
                            info.company.name=AAA SOFTWARE EDU
                            info.project.description=This is Demo

1.7 eureka的自我保护机制?
                如果长时间不连接(不激活)eureka的时候,会出现自我保护机制,在eureka页面上会显示:
                    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY‘RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
/*
            为什么会出现自我保护:
                    有没有可能网络阻塞(网络非常卡),如果发生后,eureka就检测不到provider的心跳
                    eureka中有200个provider,如果只有3个provider没有心跳,eureka就会直接把这三台直接剔除
                    但是如果有198个provider都没有心跳,则eureka就不会再剔除,也就是说直接会保留这198个provider
*/

1.8        什么是eureka的AP性?
                在eureka中注册过的服务会定时向eureka发送心跳
                当网络故障/网络延迟/服务宕机就不会再向eureka发送心跳,eureka从接不到心跳的那一秒开始算起,(90秒)之后会直接把这个服务给剔除
                因为provider的机房停电了,大面积的provider都无法向eureka发送心跳,90秒之后还是没有接收到心跳,
                eureka就不会再剔除任何一个服务(也就是说会把全部的服务都保留下来)(这个就是eureka的AP性)
/*
                为什么eureka不会剔除大量的服务?
                    AP:只保证了服务的可用性,不保证数据的一致性
                    CP:只保证了数据的一致性,不保证服务的可用性

                    如果eureka把所有的服务全部剔除,当consumer进行访问调用的发现eureka中并没有任何服务了,整个项目都会处于瘫痪状态,整个客户端的体验就会非常差,也就是说相当于报错500!
                    如果当大面积服务都没有心跳,eureka不剔除的情况下,consumer进行访问调用的时候依然可以找到所注册服务,然后就可以直接获取到数据,这些数据可能不是最新的数据!
*/
1.9        如何关闭eureka的自我保护机制:
                    !!可以关闭!!但是不能这么做!!
                    在eureka-7081项目的application.properties配置文件中

    //                eureka.server.enable-self-preservation=false(!!关闭eureka的自我保护机制!!)
                    提示一下信息:
                        THE SELF PRESERVATION MODE IS TURNED OFF. THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.

        现在某些微服务就是不需要eureka的自我保护,就想办法把自我保护机制失效
                provider告诉eureka,我每个5秒会向你发送一次心跳,当最后一次检测我的时间之后过了8秒还没有接收到心跳直接把我剔除!

                在eureka-7081的application.properties配置文件中添加
                    # eureka自己检测服务的心跳时间(90秒)
                    # 单位是毫秒,先把eureka检测心跳的时间缩短为10秒
                    # 也就是说每个10秒就会检测一次服务的心跳
    //                eureka.server.eviction-interval-timer-in-ms=10000

                在provider-8081的application.properties配置文件中添加
                    # 规定自己向eureka发送心跳的时间
                    # 单位是秒
    //                eureka.instance.lease-renewal-interval-in-seconds=5
                    # 当eureka最后一次检测到心跳的时间间隔(单位是秒)
                    # eg:15:05:20是最后一次检测到心跳-->检测8秒之后还是无法检测心跳的时候直接剔除
    //                eureka.instance.lease-expiration-duration-in-seconds=8                    

2.集群版  (正宗的eureka!)

二、eureka项目jar包的添加,和相关配置文件?

2.1 20190927-springcloud-eureka-management父级项目的 jar包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>20190927-springcloud-parent</artifactId>
        <groupId>com.aaa</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.aaa</groupId>
    <artifactId>20190927-springcloud-eureka-management</artifactId>
    <packaging>pom</packaging>

    <modules>
        <module>20190927-springcloud-eureka-7081</module>
    </modules>

<!--
        eureka的jar包添加只需要在父工程中添加即可,所有的子工程都可以继承父工程的jar包
                springcloud官网中提供的springcloud2.x版本所规定的jar包格式:
-->

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

</project>

2.2   把provider-8081注册进eureka中 的文件配置?

server.port=8081
server.servlet.context-path=/

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# 我的数据库编码的问题 所以需要添加 characterEncoding=utf8   设置自字符集。
spring.datasource.url=jdbc:mysql://localhost:3306/qy100?characterEncoding=utf8&useSSL=false

spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

mybatis.type-aliases-package=com.aaa.zxf.model
mybatis.mapper-locations=classpath:mapper/*Mapper.xml

#三、
# 配置的是在eureka中显示的服务名(Application)
# 如果不配置,则会显示UNKNOWN(这个是细节!!,以后有问题)
spring.application.name=user-provider

#一、
#配置eureka 的注册地址,将provider 注册进来。
# 单节点模式,eureka的命名空间是 defaultZone
# 客户端的命名空间可以随意指定,就算不一致,也可以注册进eureka 。因为单节点只有
#一台eureka, 此时的命名空间是失效的。

#二、     注意!
# GreenWich RS.3:无论是单点解还是集群模式,eureka的服务器端和客户端的命名空间必要保持一致,否则会报错(找不到服务实例)
#eureka.client.service-url.defaultZone=http://localhost:7081/eureka
eureka.client.service-url.defaultZone=http://localhost:7081/eureka

#四
#在eureka中配置实例, 就是eureka的status下显示的名字
# 不可以重复!!! 等同于mysql中表的id。
eureka.instance.instance-id=user-provider-8081

#五、
#在eureka中显示ip的地址
eureka.instance.prefer-ip-address=true

#六  点击eureka的服务名显示出该服务的具体信息
# 根据服务的具体内容,作者,公司,以及对整个服务的描述来进行显示
# 相当于在HTML页面上有一个a标签<a href="/actuator/info"></a> --> 跳转到controller:@RequestMapping("/actuator/info")
# !!开头用info!!其他的随便输入

info.autor.name=ZhouXu
info.company.name=AAA
info.project.desription=This is Demo

#七  现在某些微服务就是不需要eureka的自我保护,就想办法把自我保护机制失效
# 规定自己向eureka发送心跳的时间  单位是秒
eureka.instance.lease-renewal-interval-in-seconds=5

#eureka.instance.lease-renewal-interval-in-seconds=5

# 当eureka最后一次检测到心跳的时间间隔(单位是秒)
# eg:15:05:20是最后一次检测到心跳-->检测8秒之后还是无法检测心跳的时候直接剔除
eureka.instance.lease-expiration-duration-in-seconds=8

provide-8081启动类添加注解。

package com.aaa.zxf;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 *
 * 将provider 注册到 eureka 需要添加注解
 *                                         @EnableDiscoveryClient
 */
@SpringBootApplication
@MapperScan("com.aaa.zxf.mapper")
@EnableDiscoveryClient
public class ApplicationRun8081 {
    public static void main(String[] args) {

        SpringApplication.run(ApplicationRun8081.class,args);

    }
}

2.3 eureka服务的信息配置?

20190927-springcloud-eureka-7081子级项目(jar)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>20190927-springcloud-provider-management</artifactId>
        <groupId>com.aaa</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>20190927-springcloud-provider-8081</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.aaa</groupId>
            <artifactId>20190927-springcloud-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

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

<!--
    实现点击服务名显示具体的服务信息的jar包
-->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

</project>

7081的application.properties配置。

# 一、
#eureka 注册中心的相关配置
server.port=7081
server.servlet.context-path=/

#二、
# eureka 服务器端的实例名称  唯一的!
#就是给 eureka 起了一个名字。 不可乱起。
#hostname就是本台服务器的域名,不配置就是localhost
eureka.instance.hostname=localhost

#三、
# 设置eureka 不要将自己注册到注册中心里面。
# eureka默认也会把自己注册到注册中心里,这里因为最终eureka是不需要被consumer所发现的,所以不再需要把自己注册里面,eureka自己就是注册中心
# 它是对整个服务的管理起作用,并不是一个服务提供者,所以不应该把自己注册到注册中心里
# 默认值为true,需要把默认值改成false
eureka.client.register-with-eureka=false

#四、
# 设置eureka 不要在注册中心 发现自己
# eureka的职责是维护服务的实例,表明自己就是注册中心,并不需要从注册中心里发现自己
# 默认值为true,需要手动改为false
eureka.client.fetch-registry=false

#五、
#1. eureka的指向地址
# zookeeper需要在linux服务器上进行配置,最终的情况下使用zookeeper的时候必须要指向zookeeper的IP地址
#eureka不需要做任何服务器配置,但是也必须要指向地址(直接指向eureka的项目即可:http://localhost:7081/eureka)

#2. localhost
# 该地址中的localhost就是eureka.instance.hostname的值,端口号就是server.port的值,/eureka:固定的(eureka自己提供)
# defaultZone:eureka默认所提供的命名空间
# 在eureka的注册地址中,是可以分空间(zone)的,是命名空间,根据空间的不同来配置不同集群的eureka来实现不同的作用
# eureka不需要linux服务器,但是eureka怎么知道自己和其他的服务器是一个集群呢?
# eg:电商项目
# order项目-->服务的提供者和服务的消费者
# cart项目-->服务的提供者和服务的消费者
# item项目-->服务的提供者和服务的消费者
# manager项目-->服务的提供者和服务的消费者
# userInfo项目-->服务的提供者和服务的消费者
# 就可以根据类别进行配置eureka
# eureka01和eureka02的命名空间就是:order
# eureka03和eureka04的命名空间就是:cart
# 为了提供整个项目的安全性和可维护性

#3. 单节点的配置
# 如果为单节点可以随意配置,但是如果为集群则目前为止必须要配置成defaultZone(因为如果是集群版就必须先要声明命名空间,如果不声明则无法使用)
eureka.client.service-url.defaultZone=http://localhost:7081/eureka

#六
#关闭eureka的自我保护机制:
#!!可以关闭!!但是不能这么做!!
#eureka.server.enable-self-preservation=false

#七  现在某些微服务就是不需要eureka的自我保护,就想办法把自我保护机制失效
#1. provider告诉eureka,我每个5秒会向你发送一次心跳,当最后一次检测我的时间之后过了8秒还没有接收到心跳直接把我剔除!

#2.  eureka自己检测服务的心跳时间(90秒)
# 单位是毫秒,先把eureka检测心跳的时间缩短为10秒
# 也就是说每个10秒就会检测一次服务的心跳
eureka.server.eviction-interval-timer-in-ms=10000

#eureka.server.eviction-interval-timer-in-ms=10000

7081的启动类

package com.aaa.zxf;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * 关于注解?
 *   @EnableEurekaServer: 就是开启eureka的服务器端
 *
 *   @EnableEurekaClient: !!!!不让用!!!!(springcloud1.x的注解)
 */
@SpringBootApplication
@EnableEurekaServer
public class ApplicationRun7081 {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationRun7081.class,args);
    }
}

图解单节点

原文地址:https://www.cnblogs.com/ZXF6/p/11614022.html

时间: 2024-10-30 08:15:56

eureka的简单介绍,eureka单节点版的实现?eureka的自我保护?eureka的AP性,和CP性?的相关文章

eureka 基础简单介绍

服务发现:Eureka客户端 服务发现是基于微服务架构的关键原则之一.尝试配置每个客户端或某种形式的约定可能非常困难,可以非常脆弱.Netflix服务发现服务器和客户端是Eureka.可以将服务器配置和部署为高可用性,每个服务器将注册服务的状态复制到其他服务器. 如何包含Eureka客户端 要在您的项目中包含Eureka客户端,请使用组org.springframework.cloud和工件ID spring-cloud-starter-eureka的启动器. 注册Eureka 当客户端注册Eu

Orchestrator 单节点模式介绍

一.环境说明: 1.1.3台vm虚拟机系统环境介绍: 3台VM系统为: [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 3台VM centos 系统都关闭iptables,关闭selinux3台虚拟机系统时间同步:ntpdate ntp1.aliyun.com3台vm虚拟机上各安装一个orchestrator mysql orchestrator版本为:orchestrator

Hadoop单节点安装(转)

Hadoop单节点模式安装 官方教程:http://hadoop.apache.org/docs/r2.7.3/ 本文基于:Ubuntu 16.04.Hadoop-2.7.3 一.概述 本文参考官方文档介绍Hadoop单节点模式(本地模式及伪分布式模式)安装(Setting up a Single Node Cluster). 1.Hadoop安装的三种模式 (1)单机模式(standalone) 单机模式是Hadoop的默认模式.当首次解压Hadoop的源码包时,Hadoop无法了解硬件安装环

Packstack单节点一键安装openstack

本文介绍在单节点上用packstack一键安装openstack的方法,其中节点的硬件架构为x86_64(必须是64位,32位不可以).操作系统为centos7.官方的安装文档地址为https://openstack.redhat.com/Quickstart. 1 安装软件库 更新安装的软件包,命令如下: sudo yum update -y 建立RDO库,命令如下: sudo yum install -y https://rdo.fedorapeople.org/rdo-release.rp

eureka组件,单节点与多节点部署演示

环境搭建 目录结构(ad-eureka为子模块) --ad-spring-cloud --ad-eureka --pom.xml --pom.xml 主pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XML

Hadoop介绍及最新稳定版Hadoop 2.4.1下载地址及单节点安装

 Hadoop介绍 Hadoop是一个能对大量数据进行分布式处理的软件框架.其基本的组成包括hdfs分布式文件系统和可以运行在hdfs文件系统上的MapReduce编程模型,以及基于hdfs和MapReduce而开发的一系列上层应用软件. hdfs是在一个网络中以流式数据访问模式来存储超大文件的跨越多台计算机的分布式文件系统.目前支持的超大文件的范围为从MB级至PB级. MapReduce是一种可用于数据处理的编程模型,基于MapReduce模型的程序本质上都是并行运行的.基于MapReduce

Spring-Cloud之Eureka注册中心环境搭建(单节点)

一 Eureka概述 服务启动时会生成服务的基本信息对象InstanceInfo,然后在启动时会register到服务治理中心. 注册完成后会从服务治理中心拉取所有的服务信息,缓存在本地. 之后服务会被30s(可配置)发送一个心跳信息,续约服务. 如果服务治理中心在90s内没有收到一个服务的续约,就会认为服务已经挂了,会把服务注册信息删掉. 服务停止前,服务会主动发送一个停止请求,服务治理中心会删除这个服务的信息. 如果Eureka Server收到的心跳包不足正常值的85%(可配置)就会进入自

《PHP 5.5从零開始学(视频教学版)》内容简单介绍、文件夹

<PHP 5.5从零開始学(视频教学版)>当当网购买地址: http://product.dangdang.com/23586810.html <PHP 5.5从零開始学(视频教学版)>源码.教学视频下载地址: http://pan.baidu.com/s/1zt9hW 内 容 简 介 本书循序渐进地介绍了PHP 5.5开发动态站点的主要知识和技能,提供了大量的PHP应用实例供读者实践.每一章节都清晰讲述了代码作用及其编写思路,使读者能在最短时间内迅速掌握PHP的应用开发技能. 全

openstack架构简单介绍J版(更新中)

title : OPENSTACK架构简单介绍 openstack的发展及历史 openstack是什么? OpenStack是一个美国国家航空航天局和Rackspace合作研发的云端运算?软件,以Apache许可证授权.而且是一个自由软件和开放源码项目. 通俗点来讲,openstack就是一个用python编写的linux软件,openstack是一个开源云平台. openstack能干嘛? openstack最基础的功能就是产生云主机(vm虚拟机).用这些虚拟机能够做你想做的非常多事.比如产