0
点赞
收藏
分享

微信扫一扫

SpringCloud-Eureka【server服务高可用搭建】

  在分布式环境中Eureka做为注册中心存在,承担着各个服务的注册与发现,是非常核心的组件,所以如果Eureka环境挂了,那么我们的整个系统也就不稳定了,所以我们要保证我们的Eureka是高可用的,本文来介绍下Eureka的集合搭建。

Eureka高可用

一、创建项目

  创建一个SpringBoot项目。单节点的Eureka服务器上篇文章我们已经介绍过了,所以本文就重点突出集群环境要配置的地方。

SpringCloud-Eureka【server服务高可用搭建】_Eureka

1.配置文件

  在搭建 Eureka 集群时,需要添加多个配置文件,并且使用 SpringBoot 的多环境配置方式。集群中需要多少节点就添加多少个配置文件。

SpringCloud-Eureka【server服务高可用搭建】_jar_02

eureka1配置文件

spring.application.name=eureka-server
server.port=8761
#设置 eureka 实例名称,与配置文件的变量为主
eureka.instance.hostname=eureka1
#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://eureka2:8761/eureka/

eureka2配置文件

spring.application.name=eureka-server
server.port=8761
#设置 eureka 实例名称,与配置文件的变量为主
eureka.instance.hostname=eureka2
#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://eureka1:8761/eureka/

2.添加 logback 日志配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="${catalina.base}/logs/" />
<!-- 控制台输出 -->
<appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender">
<!-- 日志输出编码 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>

<!-- 日志输出级别 -->
<root level="DEBUG">
<appender-ref ref="Stdout" />
<appender-ref ref="RollingFile" />
</root>



<!--日志异步到数据库 -->
<!-- <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
日志异步到数据库
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
连接池
<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
<driverClass>com.mysql.jdbc.Driver</driverClass>
<url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
<user>root</user>
<password>root</password>
</dataSource>
</connectionSource>
</appender> -->

</configuration>

SpringCloud-Eureka【server服务高可用搭建】_高可用_03

3.项目打包

将项目打成一个jar包

SpringCloud-Eureka【server服务高可用搭建】_SpringCloud_04

二、集群环境搭建

部署环境:需要安装 jdk1.8,正确配置环境变量。
注意:需要关闭 linux 的防火墙,或者是开放 8761 端口

SpringCloud-Eureka【server服务高可用搭建】_集群_05

1.上传实例

在/usr/local/创建一个 eureka 的目录
将项目的 jar 包拷贝到/usr/local/eureka

2.编写一个启动脚本文件

项目名称:替换为 jar包名称
配置文件变量名称:替换为对应的 eureka1和eureka2

#!/bin/bash

cd `dirname $0`

CUR_SHELL_DIR=`pwd`
CUR_SHELL_NAME=`basename ${BASH_SOURCE}`

JAR_NAME="项目名称"
JAR_PATH=$CUR_SHELL_DIR/$JAR_NAME

#JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:PermSize=128m"
JAVA_MEM_OPTS=""

SPRING_PROFILES_ACTIV="-Dspring.profiles.active=配置文件变量名称"
#SPRING_PROFILES_ACTIV=""
LOG_DIR=$CUR_SHELL_DIR/logs
LOG_PATH=$LOG_DIR/${JAR_NAME%..log

echo_help()
{
echo -e "syntax: sh $CUR_SHELL_NAME start|stop"
}

if [ -z $1 ];then
echo_help
exit 1
fi

if [ ! -d "$LOG_DIR" ];then
mkdir "$LOG_DIR"
fi

if [ ! -f "$LOG_PATH" ];then
touch "$LOG_DIR"
fi

if [ "$1" == "start" ];then

# check server
PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
if [ -n "$PIDS" ]; then
echo -e "ERROR: The $JAR_NAME already started and the PID is ${PIDS}."
exit 1
fi

echo "Starting the $JAR_NAME..."

# start
nohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH >> $LOG_PATH 2>&1 &

COUNT=0
while [ $COUNT -lt 1 ]; do
sleep 1
COUNT=`ps --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}' | wc -l`
if [ $COUNT -gt 0 ]; then
break
fi
done
PIDS=`ps --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" ];then

PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
if [ -z "$PIDS" ]; then
echo "ERROR:The $JAR_NAME does not started!"
exit 1
fi

echo -e "Stopping the $JAR_NAME..."

for PID in $PIDS; do
kill $PID > /dev/null 2>&1
done

COUNT=0
while [ $COUNT -lt 1 ]; do
sleep 1
COUNT=1
for PID in $PIDS ; do
PID_EXIST=`ps --no-heading -p $PID`
if [ -n "$PID_EXIST" ]; then
COUNT=0
break
fi
done
done

echo -e "${JAR_NAME} Stopped and the PID is ${PIDS}."
else
echo_help
exit 1
fi

3.设置启动脚本的运行权限

chmod -R 755 server.sh

4.修改 linux 的 host 文件

分别修改hosts文件

vim /etc/hosts

SpringCloud-Eureka【server服务高可用搭建】_jar_06

5.分别启动服务

启动服务

./server.sh start

关闭服务

./server.sh stop

SpringCloud-Eureka【server服务高可用搭建】_SpringCloud_07

分别访问测试

SpringCloud-Eureka【server服务高可用搭建】_集群_08

SpringCloud-Eureka【server服务高可用搭建】_高可用_09
部署成功~


举报

相关推荐

0 条评论