我们已经创建好了一个集群版的Eureka的项目,我们将实例部署到集群环境当中,我们先说一下我们的
部署环境,我为大家安装了两台虚拟机,准备了两个Linux环境,我们会把节点部署到两个不同的虚拟机当中,
Linux系统当中,然后这里我们需要注意,部署环境,Linux系统,需要安装JDK1.8,并且正确配置环境变量,然后你不需要
安装什么Tomcat,因为我们是基于SpringBoot项目去开发的,在SpringBoot当中,它是内嵌了一个TOMCAT,而且SpringBoot
最终导包的时候呢,会生成一个jar文件,只要运行这个jar文件,他启动时就会启动内置的tomcat,所以我们也不需要去安装
什么tomcat了,接下来我们看一下,我们是两个环境,一个是IP为134的,一个是IP为135的,那么我们需要做的第一件事,就是将
项目打包,那么打包怎么打呢,其实也非常简单的,我们这个项目不是基于maven来开发的吗,所以我们可以直接用maven来打包,
Maven install
这是打包的命令,回到我们的eclipse当中,这个时候看到BUILD SUCCESS,说明打包成功了,然后我们来看一下项目的target目录,
在这里我们可以看到,有一个springcloud-eureka-server-ha-0.0.1-SNAPSHOT.jar,其实这个就是我们项目被maven
打完后的一个jar包,因为我们创建的就是jar项目,第二步我们需要把我们的项目上传到我们的虚拟机当中,
我的虚拟机是带一个图形界面的,
我通过这个图形界面上传,要比我们通过上传要快一些,我在root下建立了一个temp的目录,往上传一些资源的,那我们就把jar包
传到虚拟机当中,134下已经有了,我们看一下135下,也传一份相同的,现在我就相当于我的两个节点下,环境当中已经有这个项目了,
然后接下来我们来看还要做什么事,我们先进入到temp目录里,这里我们可以看到上传进来了,然后我们去usr/local下,我们新建一个
目录,叫eureka,我以后跟服务启动相关的东西,我都会放到这个目录下,然后将我们的文件copy过去
cp eureka.jar /usr/local/eureka/ -f
我们把它整理到笔记当中,将项目的jar包拷贝到/usr/local/eureka,上面还少一步,在/usr/local下创建一个eureka的目录,
然后将它拷过去,上传实例,上传进来以后,我们现在还需要一个启动脚本,我的项目在运行的时候,我还需要依赖一个shell脚本去
启动项目,那么shell脚本也比较简单,我们来添加一个shell脚本,那么shell脚本怎么写呢,这里准备好了一个脚本,已经写好了,
当然这些东西没有必要死记硬背,在这个启动脚本当中,我们所关注的是这两点,一个好似JAR_NAME的变量
JAR_NAME="项目名称"
还有一个是SPRING_PROFILES_ACTIV
SPRING_PROFILES_ACTIV="-Dspring.profiles.active=配置文件变量名称"
这个JAR_NAME表示什么意思呢,当前需要让启动脚本,去运行的项目的JAR包的全名,SPRING_PROFILES_ACTIV表示的什么呢,
我们知道在SpringBoot当中,对于多环境配置的时候,你的项目在启动的时候,可以给他加载指定的配置文件,来去做启动,
那么其实这一块呢,就是你的实例在启动,让他去加载哪个配置文件,这个大家还有印象吧,讲的时候说过,你在windos平台下,
你在启动你的项目的时候,用java -jar,然后后面是你项目的名称,然后项目要启动的时候,加载指定的配置文件,去让他启动,
我们可以加一个--spring.profile.active,然后等于你配置文件的后缀
nohup java -jar springcloud-eureka-server-ha-0.0.1-SNAPSHOT.jar --spring.profile.active=dev &
那么在linux系统下面,也是这样的,但是不同的这些都定义在脚本里面,启动的脚本文件当中了,那么也就是未来把这个改一下就可以了,
其他的我们什么都不用动,然后我们把这个copy一下,拿过来,打开我们的XShell,我们把这个粘进来,粘进来之后呢,首先项目的名称,
打开我们的项目,把我们项目的全名copy一下,然后把它粘进来
JAR_NAME="springcloud-eureka-server-ha-0.0.1-SNAPSHOT.jar"
这是第一步,第二步就是配置文件,那么这个配置文件大家注意,打算怎么去部署这个实例呢,这里有个134,有个135,我们打算把eureka1
部署到134里,eureka2部署到135里,那么也就意味着,135在启动我们的eureka server的时候,需要让他去加载eureka2的配置文件,
所以这块我们就给eureka2,这样启动就不会加载这个配置文件了
SPRING_PROFILES_ACTIV="-Dspring.profiles.active=eureka2"
保存并退出
然后我们就创建了一个启动脚本,这个脚本是没有执行权限的,我们还要给他分配一个执行权限,那就是
chmod -R 755 server.sh
现在可以看到脚本有执行权限了,回来在134里我们也要这么去做,进入到eureka目录下,然后我们再去创建一个
vim sever.sh
然后把配置文件里的内容都copy过来,然后还是先改项目名称,配置文件,这是在134下,134下这个环境要启动的时候,
chmod -R 755 server.sh
有这个执行权限了,编写一个启动脚本文件,配置文件变量名称,设置启动脚本的运行权限,然后接下来我们还有一个非常
重要的环节去做,大家注意,我们在配置文件当中,现在是通过域名hostname来访问的,那我们还要对我们的host文件做修改,
现在你要用这个域名去访问,或者你访问这个hostname,他所对应的IP地址是多少,否则它是无法访问的,否则他怎么知道是哪个
机器的地址,所以需要修改linux的host文件,我们先从134开始,vim /etc/host
这个是host文件里,它里面的内容,然后我们要往里加,比如我家在eureka1的实例,在134环境当中,他要访问的是eureka2,
我们要把eureka2的配置一下
10.40.8.152 eureka1
10.40.8.152 eureka2
把两个的hostname和IP做一个映射,我们去看修改后的内容,我们就可以去启动我们的注册中心了,怎么启动呢,
./server.sh start
启动时必须要给start,脚本当中他有两个参数,一个是start,一个是stop
echo_help()
{
echo -e "syntax: sh $CUR_SHELL_NAME start|stop"
}
start表示你的服务启动,如果你想通过脚本关闭你当前的eureka注册中心,后面跟stop参数就可以了,这个文件位于 etc下的host,
接下来启动eureka注册中心,启动的命令是./server.sh后面跟start,是启动,然后停止呢,是./server.sh stop,这个是停止,
接下来我们就来启动一下,当然这两个你从哪个启动都可以,启动,他现在正在启动,./server.sh start启动,然后我们在启动的
时候也不知道启动有什么东西,我们也不知道成功还是不成功,我们加了logback了,这个时候在你们项目的目录下,相对路径下
会创建一个catalina的目录,我们进到里面,然后进入到logs里面,这里有一个日志文件,我们可以用tail的命令看一下,
这是他启动时输出的信息
nohup java -jar springcloud-eureka-server-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=e1 &
nohup java -jar springcloud-eureka-server-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=e2 &
nohup java -jar springcloud-eureka-server-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=eureka1 &
nohup java -jar springcloud-eureka-server-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=eureka2 &
application-eureka1.properties
#spring.application.name=eureka-server
server.port=8761
#eureka.instance.hostname=eureka1
eureka.client.serviceUrl.defaultZone=http://localhost:8762/eureka/
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
application-eureka2.properties
#spring.application.name=eureka-server
server.port=8762
#eureka.instance.hostname=eureka2
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
nohup java -jar springcloud-eureka-server-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=eureka1 &
nohup java -jar springcloud-eureka-server-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=eureka2 &
application-eureka1.properties
#spring.application.name=eureka-server
server.port=8761
#eureka.instance.hostname=eureka1
eureka.client.serviceUrl.defaultZone=http://localhost:8762/eureka/
#eureka.client.registerWithEureka=false
#eureka.client.fetchRegistry=false
application-eureka2.properties
#spring.application.name=eureka-server
server.port=8762
#eureka.instance.hostname=eureka2
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#eureka.client.registerWithEureka=false
#eureka.client.fetchRegistry=false
需要关闭linux的防火墙或者开放8761端口,我这里已经把防火墙关闭了,如果你不关闭防火墙,它是无法通信的,也是无法启动的,
我们通过浏览器可以去访问注册中心的页面
http://10.40.8.152:8762/
http://10.40.8.152:8761/
管理页面打开了,表示我们集群版的注册中心是成功的,我们把是否配置的去掉了,单机版你一定要去掉他,因为只有一个实例,
而且这个实例还是注册中心自己,所以会默认注册自己,那样是肯定无法注册的,但是集群版就不存在这个问题,集群版不存在这个
问题的原因是什么呢,因为它是两个节点,会想集群的其他节点去注册
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.learn.cloud</groupId>
<artifactId>springcloud-eureka-server-ha</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
<!-- 这个插件,可以将应用打包成一个可执行的jar包 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
#spring.application.name=eureka-server
server.port=8761
#eureka.instance.hostname=eureka1
eureka.client.serviceUrl.defaultZone=http://localhost:8762/eureka/
#eureka.client.registerWithEureka=false
#eureka.client.fetchRegistry=false
#spring.application.name=eureka-server
server.port=8762
#eureka.instance.hostname=eureka2
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#eureka.client.registerWithEureka=false
#eureka.client.fetchRegistry=false
package com.learn;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class EurekaHAApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaHAApplication.class, args);
}
}
|