diywap手机网站系统,网站小视频怎么做,17做网店这个网站做起多少钱,wordpress 后台精简文章目录一、 Eureka简介Eureka组件二、 Eureka和Zookeeper 对比1 什么是CAP定理2 基于CAP定理比对Eureka和Zookeeper三、 搭建Eureka注册中心1 POM文件2 配置文件application.yml3 启动类4 访问Eureka Server WEB服务管理平台四、 Eureka 服务管理平台介绍1 Eureka Server服务…
文章目录一、 Eureka简介Eureka组件二、 Eureka和Zookeeper 对比1 什么是CAP定理2 基于CAP定理比对Eureka和Zookeeper三、 搭建Eureka注册中心1 POM文件2 配置文件application.yml3 启动类4 访问Eureka Server WEB服务管理平台四、 Eureka 服务管理平台介绍1 Eureka Server服务管理平台访问预览2 System Status3 DS Replicas4 Instances currently registered with Eureka5 General Info6 Instance Info五、 搭建高可用集群1 在Eureka应用中定义多环境配置2 打包工程3 上传打包后的jar文件到Linux系统4 设置Linux主机域名5 启动Eureka六、 集群原理1 Eureka集群架构原理图七、 Eureka停服1 自我保护模式2 为什么要自我保护3 关闭自我保护 一般不关一、 Eureka简介 Eureka是Netflix开发的服务发现框架本身是一个基于REST的服务主要用于定位运行在AWS域中的中间层服务以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中以实现SpringCloud的服务发现功能。 Eureka组件 Eureka包含两个组件Eureka Server和Eureka Client。 1.1 Eureka Server Eureka Server提供服务注册服务各个节点启动后会在Eureka Server中进行注册这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息服务节点的信息可以在界面中直观的看到。 Eureka Server本身也是一个服务默认情况下会自动注册到Eureka注册中心。 如果搭建单机版的Eureka Server注册中心则需要配置取消Eureka Server的自动注册逻辑。毕竟当前服务注册到当前服务代表的注册中心中是一个说不通的逻辑。 Eureka Server通过Register、Get、Renew等接口提供服务的注册、发现和心跳检测等服务。 1.2 Eureka Client Eureka Client是一个java客户端用于简化与Eureka Server的交互客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后将会向Eureka Server发送心跳,默认周期为30秒如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。 Eureka Client分为两个角色分别是Application Service(Service Provider)和Application Client(Service Consumer) 1.2.1 Application Service 服务提供方是注册到Eureka Server中的服务。 1.2.2 Application Client 服务消费方通过Eureka Server发现服务并消费。 注意 在这里Application Service和Application Client不是绝对上的定义因为Provider在提供服务的同时也可以消费其他Provider提供的服务Consumer在消费服务的同时也可以提供对外服务。 二、 Eureka和Zookeeper 对比
1 什么是CAP定理 CAP原则又称CAP定理指的是在一个分布式系统中Consistency数据一致性、 Availability服务可用性、Partition tolerance分区容错性三者不可兼得。 CAP由Eric Brewer在2000年PODC会议上提出。该猜想在提出两年后被证明成立成为我们熟知的CAP定理 分布式系统CAP定理 2 基于CAP定理比对Eureka和Zookeeper ZooKeeper分布集群是使用主从模型实现的。在一个时间点上只有一个leader真正的对外提供服务。其他的follower都会实时备份leader中的数据当leader宕机则follower选举出新的leader对外提供服务。 Eureka分布集群是平等模型无主模型所有的节点都是平等的客户端访问任意节点都可以提供实时的服务响应。如果某节点发送宕机等故障接收到的请求会转交给其他的节点。无主模型每个节点的数据可能不实时一致节点需要通过网络通讯从其他节点获取数据并实现数据的一致。可能有网络延迟或网络故障或通讯频率问题。 三、 搭建Eureka注册中心 Eureka Server既是一个注册中心同时也是一个服务。那么搭建Eureka Server的方式和以往搭建Dubbo注册中心ZooKeeper的方式必然不同那么首先搭建一个单机版的Eureka Server注册中心。 1 POM文件
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.2.2.RELEASE/version/parentgroupIdcom.bjsxt/groupIdartifactIdcloudeureka/artifactIdversion1.0-SNAPSHOT/versiondependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversionHoxton.SR1/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-server/artifactId/dependency/dependencies
/project2 配置文件application.yml Eureka Server本身也是一个服务同时又是一个注册中心。在Spring Cloud中启动的微服务会自动的搜索注册中心并注册服务那么在单机版Eureka Server环境中当前服务注册到当前服务中明显是不合适的。所以搭建Eureka Server单机版时需要提供特殊的全局配置避免回路注册逻辑。 同理Eureka Server服务在注册中心中发现服务列表逻辑也是不必要的。毕竟注册中心是一个中立的服务管理平台如果是单机版Eureka Server环境中Eureka Server服务再去发现服务列表明显也是不必要的。也需要通过全局配置避免回路发现逻辑。 server:# 设置Eureka Server WEB控制台端口、服务注册发现端口。Eureka Server服务注册发现端口默认为8761。port: 8761
spring:application:# 设置spring应用命名默认为null。同命名的应用会注册到同一个服务集群中。name: cloud-eureka
eureka:client:# 是否将自己注册到Eureka-Server中默认的为trueregister-with-eureka: false# 是否从Eureka-Server中获取服务注册信息默认为truefetch-registry: false如果需要修改Eureka Server服务注册发现端口具体配置如下
server:# 设置Eureka Server WEB控制台端口、服务注册发现端口。Eureka Server服务注册发现端口默认为8761。port: 8080
spring:application:# 设置spring应用命名默认为null。同命名的应用会注册到同一个服务集群中。name: cloud-eureka
eureka:client:# 是否将自己注册到Eureka-Server中默认的为trueregister-with-eureka: false# 是否从Eureka-Server中获取服务注册信息默认为truefetch-registry: falseservice-url:defaultZone: http://localhost:8080/eureka/3 启动类
package com.bjsxt.eureka;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;/*** EnableEurekaServer - 启动时初始化Eureka Server注册中心。*/
SpringBootApplication
EnableEurekaServer
public class EurekaApp {public static void main(String[] args) {SpringApplication.run(EurekaApp.class, args);}
}4 访问Eureka Server WEB服务管理平台 访问服务管理平台地址为 http://ip:port/ 四、 Eureka 服务管理平台介绍
1 Eureka Server服务管理平台访问预览 2 System Status 系统状态展示 3 DS Replicas 注册中心集群列表 4 Instances currently registered with Eureka 已在注册中心中注册的服务列表 5 General Info 当前注册中心相关信息展示 6 Instance Info 当前注册中心实例信息展示 五、 搭建高可用集群
1 在Eureka应用中定义多环境配置
1.1 application-eureka1.yml
server:# 设置Eureka Server WEB控制台端口、服务注册发现端口。Eureka Server服务注册发现端口默认为8761。port: 8761
spring:application:# 设置spring应用命名默认为null。同命名的应用会注册到同一个服务集群中。name: cloud-eureka
eureka:client:service-url:defaultZone:- http://eureka2:8761/eureka/instance:hostname: eureka11.2 application-eureka2.yml
server:# 设置Eureka Server WEB控制台端口、服务注册发现端口。Eureka Server服务注册发现端口默认为8761。port: 8761
spring:application:# 设置spring应用命名默认为null。同命名的应用会注册到同一个服务集群中。name: cloud-eureka
eureka:client:service-url:defaultZone:- http://eureka1:8761/eureka/instance:hostname: eureka22 打包工程
2.1 POM依赖 (增加Spring Boot打包插件)
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.2.2.RELEASE/version/parentgroupIdcom.bjsxt/groupIdartifactIdcloudeureka/artifactIdversion1.0-SNAPSHOT/versiondependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversionHoxton.SR1/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-server/artifactId/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build
/project2.2 打包
2.3 打包结果
3 上传打包后的jar文件到Linux系统
/root/upload (目录随意)
4 设置Linux主机域名 修改/etc/hosts文件设置主机域名。将主机域名和IP进行绑定。 vi /etc/hosts 新增内容如下两个Linux系统修改内容相同。IP根据具体环境配置 192.168.14.128 eureka1
192.168.14.129 eureka25 启动Eureka
5.1 使用java命令启动
java -jar -Dspring.profiles.activeeureka1 cloudeureka-1.0-SNAPSHOT.jar5.2 脚本启动 当然每次通过命令来启动Eureka Server过于麻烦可以定义一个shell文件来简化操作。Java程序员不必要掌握shell脚本的编写。建议对shell脚本有一定的了解至少能够修改内部的必要参数值。Shell脚本一般由运维或部署人员开发。也可能有系统工程师开发。具体shell内容如下 项目jar包名称: cloudeureka-1.0-SNAPSHOT.jar 打包的jar包 配置文件变量名称eureka1 和 eureka2 分别配置
#!/bin/bashcd dirname $0CUR_SHELL_DIRpwd
CUR_SHELL_NAMEbasename ${BASH_SOURCE}JAR_NAME项目jar包名称
JAR_PATH$CUR_SHELL_DIR/$JAR_NAME#JAVA_MEM_OPTS -server -Xms1024m -Xmx1024m -XX:PermSize128m
JAVA_MEM_OPTSSPRING_PROFILES_ACTIV-Dspring.profiles.active配置文件变量名称
#SPRING_PROFILES_ACTIV
LOG_DIR$CUR_SHELL_DIR/logs
LOG_PATH$LOG_DIR/eureka-server.logecho_help()
{echo -e syntax: sh $CUR_SHELL_NAME start|stop
}if [ -z $1 ];thenecho_helpexit 1
fiif [ ! -d $LOG_DIR ];thenmkdir $LOG_DIR
fiif [ ! -f $LOG_PATH ];thentouch $LOG_DIR
fiif [ $1 start ];then# check serverPIDSps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk {print $2}if [ -n $PIDS ]; thenecho -e ERROR: The $JAR_NAME already started and the PID is ${PIDS}.exit 1fiecho Starting the $JAR_NAME...# startnohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH $LOG_PATH 21 COUNT0while [ $COUNT -lt 1 ]; dosleep 1COUNTps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk {print $2} | wc -lif [ $COUNT -gt 0 ]; thenbreakfidonePIDSps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk {print $2}echo ${JAR_NAME} Started and the PID is ${PIDS}.echo You can check the log file in ${LOG_PATH} for details.elif [ $1 stop ];thenPIDSps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk {print $2}if [ -z $PIDS ]; thenecho ERROR:The $JAR_NAME does not started!exit 1fiecho -e Stopping the $JAR_NAME...for PID in $PIDS; dokill $PID /dev/null 21doneCOUNT0while [ $COUNT -lt 1 ]; dosleep 1COUNT1for PID in $PIDS ; doPID_EXISTps --no-heading -p $PIDif [ -n $PID_EXIST ]; thenCOUNT0breakfidonedoneecho -e ${JAR_NAME} Stopped and the PID is ${PIDS}.
elseecho_helpexit 1
fi设置好shell启动脚本后需要提供可执行权限shell脚本文件名自己修改。 chmod 755 xxx.sh 脚本使用方式为 启动Eureka Server命令 ./xxx.sh start 关闭Eureka Server命令 ./xxx.sh stop 六、 集群原理 Eureka Server注册中心的集群和Dubbo的ZooKeeper注册中心集群在结构上有很大的不同。 Eureka Server注册中心集群中每个节点都是平等的集群中的所有节点同时对外提供服务的发现和注册等功能。同时集群中每个Eureka Server节点又是一个微服务也就是说每个节点都可以在集群中的其他节点上注册当前服务。又因为每个节点都是注册中心所以节点之间又可以相互注册当前节点中已注册的服务并发现其他节点中已注册的服务。 1 Eureka集群架构原理图 七、 Eureka停服
1 自我保护模式 一般情况下微服务在 Eureka 上注册后会每 30 秒发送心跳包Eureka 通过心跳来判断服务时候健康同时会定期删除超过 90 秒没有发送心跳服务。 有两种情况会导致 Eureka Server 收不到微服务的心跳一是微服务自身的原因二是微服务与 Eureka 之间的网络故障。 通常微服务自身的故障关闭只会导致个别服务出现故障一般不会出现大面积故障而网络故障通常会导致 Eureka Server 在短时间内无法收到大批心跳。考虑到这个区别Eureka 设置了一个阀值当判断离线服务的数量超过阀值时Eureka Server 认为很大程度上出现了网络故障将不再删除心跳过期的服务。 那么这个阀值是多少呢15分钟之内是否低于 85%Eureka Server 在运行期间会统计心跳失败的比例在15分钟内是否低于85%这种算法叫做 Eureka Server 的自我保护模式。 2 为什么要自我保护 因为同时保留好数据与坏数据总比丢掉任何数据要更好当网络故障恢复后这个 Eureka 节点会退出自我保护模式。Eureka 还有客户端缓存功能(也就是微服务的缓存功能)。即便 Eureka 集群中所有节点都宕机失效微服务的 Provider 和 Consumer都能依托服务缓存正常通信。微服务的负载均衡策略会自动剔除离线的微服务节点。 3 关闭自我保护 一般不关 修改Eureka Server中的核心配置文件application.yml server:# 设置Eureka Server WEB控制台端口、服务注册发现端口。Eureka Server服务注册发现端口默认为8761。port: 8761
spring:application:# 设置spring应用命名默认为null。同命名的应用会注册到同一个服务集群中。name: cloud-eureka
eureka:client:service-url:defaultZone:- http://eureka2:8761/eureka/instance:hostname: eureka1server:# 是否开启自我保护 默认为trueenable-self-preservation: false# 清理间隔单位是毫秒。默认值为1分钟eviction-interval-timer-in-ms: 60000