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

男娘i 2022-01-26 06:09 412阅读 0赞

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

Eureka高可用

一、创建项目

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

在这里插入图片描述

1.配置文件

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

在这里插入图片描述

eureka1配置文件

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

eureka2配置文件

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

2.添加 logback 日志配置文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <configuration>
  3. <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
  4. <property name="LOG_HOME" value="${catalina.base}/logs/" />
  5. <!-- 控制台输出 -->
  6. <appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender">
  7. <!-- 日志输出编码 -->
  8. <layout class="ch.qos.logback.classic.PatternLayout">
  9. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  10. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
  11. </pattern>
  12. </layout>
  13. </appender>
  14. <!-- 按照每天生成日志文件 -->
  15. <appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
  16. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  17. <!--日志文件输出的文件名-->
  18. <FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern>
  19. <MaxHistory>30</MaxHistory>
  20. </rollingPolicy>
  21. <layout class="ch.qos.logback.classic.PatternLayout">
  22. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  23. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
  24. </pattern>
  25. </layout>
  26. <!--日志文件最大的大小-->
  27. <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  28. <MaxFileSize>10MB</MaxFileSize>
  29. </triggeringPolicy>
  30. </appender>
  31. <!-- 日志输出级别 -->
  32. <root level="DEBUG">
  33. <appender-ref ref="Stdout" />
  34. <appender-ref ref="RollingFile" />
  35. </root>
  36. <!--日志异步到数据库 -->
  37. <!-- <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> -->
  38. </configuration>

在这里插入图片描述

3.项目打包

将项目打成一个jar包

在这里插入图片描述

二、集群环境搭建

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

在这里插入图片描述

1.上传实例

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

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

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

  1. #!/bin/bash
  2. cd `dirname $0`
  3. CUR_SHELL_DIR=`pwd`
  4. CUR_SHELL_NAME=`basename ${ BASH_SOURCE}`
  5. JAR_NAME="项目名称"
  6. JAR_PATH=$CUR_SHELL_DIR/$JAR_NAME
  7. #JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:PermSize=128m"
  8. JAVA_MEM_OPTS=""
  9. SPRING_PROFILES_ACTIV="-Dspring.profiles.active=配置文件变量名称"
  10. #SPRING_PROFILES_ACTIV=""
  11. LOG_DIR=$CUR_SHELL_DIR/logs
  12. LOG_PATH=$LOG_DIR/${ JAR_NAME%..log
  13. echo_help()
  14. {
  15. echo -e "syntax: sh $CUR_SHELL_NAME start|stop"
  16. }
  17. if [ -z $1 ];then
  18. echo_help
  19. exit 1
  20. fi
  21. if [ ! -d "$LOG_DIR" ];then
  22. mkdir "$LOG_DIR"
  23. fi
  24. if [ ! -f "$LOG_PATH" ];then
  25. touch "$LOG_DIR"
  26. fi
  27. if [ "$1" == "start" ];then
  28. # check server
  29. PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
  30. if [ -n "$PIDS" ]; then
  31. echo -e "ERROR: The $JAR_NAME already started and the PID is ${PIDS}."
  32. exit 1
  33. fi
  34. echo "Starting the $JAR_NAME..."
  35. # start
  36. nohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH >> $LOG_PATH 2>&1 &
  37. COUNT=0
  38. while [ $COUNT -lt 1 ]; do
  39. sleep 1
  40. COUNT=`ps --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}' | wc -l`
  41. if [ $COUNT -gt 0 ]; then
  42. break
  43. fi
  44. done
  45. PIDS=`ps --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}'`
  46. echo "${JAR_NAME} Started and the PID is ${PIDS}."
  47. echo "You can check the log file in ${LOG_PATH} for details."
  48. elif [ "$1" == "stop" ];then
  49. PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
  50. if [ -z "$PIDS" ]; then
  51. echo "ERROR:The $JAR_NAME does not started!"
  52. exit 1
  53. fi
  54. echo -e "Stopping the $JAR_NAME..."
  55. for PID in $PIDS; do
  56. kill $PID > /dev/null 2>&1
  57. done
  58. COUNT=0
  59. while [ $COUNT -lt 1 ]; do
  60. sleep 1
  61. COUNT=1
  62. for PID in $PIDS ; do
  63. PID_EXIST=`ps --no-heading -p $PID`
  64. if [ -n "$PID_EXIST" ]; then
  65. COUNT=0
  66. break
  67. fi
  68. done
  69. done
  70. echo -e "${JAR_NAME} Stopped and the PID is ${PIDS}."
  71. else
  72. echo_help
  73. exit 1
  74. fi

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

  1. chmod -R 755 server.sh

4.修改 linux 的 host 文件

分别修改hosts文件

  1. vim /etc/hosts

在这里插入图片描述

5.分别启动服务

启动服务

  1. ./server.sh start

关闭服务

  1. ./server.sh stop

在这里插入图片描述

分别访问测试

在这里插入图片描述

在这里插入图片描述
部署成功~

发表评论

表情:
评论列表 (有 0 条评论,412人围观)

还没有评论,来说两句吧...

相关阅读