参考阿里云的EDAS开发文档: 使用 Ali-Tomcat 开发应用


我们自己在内网搭建CentOS7 的测试环境,需要的资源如下:

  1. Ali-Tomcat
  2. Pandora 容器
  3. EDAS 配置中心安装包
  1. 假设我们要在内网的一台CentOS7 PC机上部署shop.wargoods.waruser.war
  2. 如何实现?看下面的步骤:

1.安装配置中心(查看服务列表、状态,实现服务的注册、发现):

a). 从前面所需资源链接下载配置中心,通过ftp等工具放到CentOS机器上,启动

b). 启动 EDAS 配置中心将会占用此台机器的 8080 和 9600 端口,因此确认 8080 和 9600 端口未被使用。

2.安装Ali-Tomcat、Pandora容器:

通过ftp等工具把前面链接下载的Ali-Tomcat、Pandora容器放到CentOS机器上,并且把Pandora 容器放到Ali-Tomcat的deploy目录下解压,最终目录路径如下:

  1. taobao-tomcat-7.0.59
  2. ├── bin
  3. ├── bootstrap.jar
  4. ├── catalina.bat
  5. ├── catalina.sh
  6. ├── ...
  7. ├── setenv.sh >>这个文件是手动加上去的,后面会有介绍
  8. ├── ...
  9. └── version.sh
  10. ├── catalina.pid
  11. ├── conf
  12. ├── Catalina
  13. ├── catalina-legacy.properties
  14. ├── catalina.policy
  15. ├── catalina.properties
  16. ├── context.xml
  17. ├── logging.properties
  18. ├── server.xml
  19. ├── tomcat-users.xml
  20. └── web.xml
  21. ├── deploy
  22. ├── admin
  23. ├── admin.war
  24. ├── taobao-hsf.sar >>这个就是Pandora容器解压后的目录
  25. ├── lib
  26. ├── annotations-api.jar
  27. ├── catalina-ant.jar
  28. ├── catalina-ha.jar
  29. ├── ...
  30. ├── tomcat-jdbc.jar
  31. ├── tomcat-util.jar
  32. └── websocket-api.jar
  33. ├── LICENSE
  34. ├── logs
  35. ├── agent
  36. ├── catalina.log.2018-10-10
  37. ├── catalina.out
  38. ├── hsf.lock
  39. └── localhost.log.2018-10-10
  40. ├── NOTICE
  41. ├── RELEASE-NOTES
  42. ├── RUNNING.txt
  43. ├── temp
  44. └── safeToDelete.tmp
  45. ├── tools
  46. ├── findclass.py
  47. └── hotcode2.jar
  48. ├── webapps
  49. ├── docs
  50. ├── examples
  51. ├── host-manager
  52. ├── manager
  53. └── ROOT
  54. └── work
  55. └── Catalina

3.配置中心需要设置hosts里面的域名映射:本机ip jmenv.tbsite.net

4.本次需要部署三个war包,所以要再复制2个如上所示的taobao-tomcat-7.0.59并重命名文件夹,或者不重命名(放到不同目录下)。

由于都是独占式部署的,所以每个taobao-tomcat 启动后的端口不能一样,需要修改每个tomcat目录下面的conf里面的server.xml,改掉其中的Server port、Connector port、redirectPort这三个端口,保证三个taobao-tomcat的这个配置都不一样。

5.由于每个Ali-Tomcat启动都需要实例化一个Pandora,默认端口是12200,会出现第一个war包启动后,
其服务可以正常出现在配置中心的服务列表中,后续的war包都无法正常启动部署,因为端口冲突,
所以在启动tomcat时要配置JVM参数制定这个端口:在每个taobao-tomcat里面的bin目录,添加一个setenv.sh文件,这个会在启动tomcat时自动被调用,
设置如下内容(注意其中的端口号,三个tomcat里面的配置需要不一样,否则无法正常启动):

  1. #!/bin/sh#!/bin/sh
  2. #添加JVM选项
  3. JAVA_OPTS=" -Dhsf.server.port=12205 "

有个小插曲:这三个tomcat里面配置的hsf服务端口,不要刚好只是相差1(比如可以分别设置为12210/12220/12230),
因为一个服务会占用两个端口,一个是上面这个配置文件配置的,还要占用顺延递增一个端口号,比如下图:

如果因为这个端口冲突,会导致taobao-tomcat启动失败,日志如下(实例内容可能会不一样,这里因为用到了redis所以打印的出错的是redis日志):

  1. 2018-10-11 14:31:31,460 org.apache.catalina.loader.WebappClassLoader loadClass
  2. INFO: Illegal access: this web application instance has been stopped already. Could not load redis.clients.jedis.Client. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
  3. Exception in thread "commons-pool-EvictionTimer" java.lang.NoClassDefFoundError: redis/clients/jedis/Client
  4. at redis.clients.jedis.BinaryJedis.<init>(BinaryJedis.java:57)
  5. at redis.clients.jedis.Jedis.<init>(Jedis.java:42)
  6. at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:82)
  7. at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:861)
  8. at org.apache.commons.pool2.impl.GenericObjectPool.ensureIdle(GenericObjectPool.java:920)
  9. at org.apache.commons.pool2.impl.GenericObjectPool.ensureMinIdle(GenericObjectPool.java:899)
  10. at org.apache.commons.pool2.impl.BaseGenericObjectPool$Evictor.run(BaseGenericObjectPool.java:1036)
  11. at java.util.TimerThread.mainLoop(Timer.java:555)
  12. at java.util.TimerThread.run(Timer.java:505)
  13. Caused by: java.lang.ClassNotFoundException: redis.clients.jedis.Client
  14. at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1722)
  15. at com.taobao.tomcat.container.context.loader.AliWebappClassLoader.loadClass(AliWebappClassLoader.java:81)
  16. at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
  17. ... 9 more

更准确的日志,可以从taobao-tomcat的logs/localhost.log.2018-10-11 日志查看,例如:

  1. 2018-10-11 14:31:23,024 org.apache.catalina.core.StandardContext listenerStart
  2. SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
  3. java.lang.RuntimeException: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Failed to start HSF server! ERR-CODE: [HSF-0016], Type: [ENV], More: [http://edas.console.aliyun.com/code?faq=HSF-0016]
  4. at com.taobao.hsf.app.api.util.HSFApiProviderBean.publish(HSFApiProviderBean.java:518)
  5. at com.taobao.hsf.app.spring.util.HSFSpringProviderBean.onApplicationEvent(HSFSpringProviderBean.java:387)
  6. at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167)
  7. at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
  8. at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:393)
  9. at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:347)
  10. at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:883)
  11. at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)
  12. at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:443)
  13. at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:325)
  14. at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
  15. at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5028)
  16. at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5547)
  17. at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
  18. at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
  19. at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
  20. at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
  21. at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1086)
  22. at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1891)
  23. at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
  24. at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  25. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  26. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  27. at java.lang.Thread.run(Thread.java:748)
  28. Caused by: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Failed to start HSF server! ERR-CODE: [HSF-0016], Type: [ENV], More: [http://edas.console.aliyun.com/code?faq=HSF-0016]
  29. at com.taobao.hsf.model.metadata.ServiceMetadata.exportSync(ServiceMetadata.java:351)
  30. at com.taobao.hsf.app.api.util.HSFApiProviderBean.publish(HSFApiProviderBean.java:516)
  31. ... 23 more
  32. Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Failed to start HSF server! ERR-CODE: [HSF-0016], Type: [ENV], More: [http://edas.console.aliyun.com/code?faq=HSF-0016]
  33. at java.util.concurrent.FutureTask.report(FutureTask.java:122)
  34. at java.util.concurrent.FutureTask.get(FutureTask.java:192)
  35. at com.taobao.hsf.threadpool.impl.SingleThreadScheduledExecutor$RunnableScheduleFutureDecorator.get(SingleThreadScheduledExecutor.java:198)
  36. at com.taobao.hsf.model.metadata.ServiceMetadata.exportSync(ServiceMetadata.java:341)
  37. ... 24 more
  38. Caused by: java.lang.RuntimeException: java.lang.RuntimeException: Failed to start HSF server! ERR-CODE: [HSF-0016], Type: [ENV], More: [http://edas.console.aliyun.com/code?faq=HSF-0016]
  39. at com.taobao.hsf.model.metadata.ServiceMetadata.export(ServiceMetadata.java:315)
  40. at com.taobao.hsf.model.metadata.ServiceMetadata$1.call(ServiceMetadata.java:336)
  41. at com.taobao.hsf.model.metadata.ServiceMetadata$1.call(ServiceMetadata.java:333)
  42. at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  43. at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
  44. at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
  45. at com.taobao.hsf.threadpool.impl.SingleThreadScheduledExecutor$RunnableScheduleFutureDecorator.run(SingleThreadScheduledExecutor.java:169)
  46. ... 3 more
  47. Caused by: java.lang.RuntimeException: Failed to start HSF server! ERR-CODE: [HSF-0016], Type: [ENV], More: [http://edas.console.aliyun.com/code?faq=HSF-0016]
  48. at com.taobao.hsf2dubbo.DubboProtocol.registerProvider(DubboProtocol.java:72)
  49. at com.taobao.hsf2dubbo.DubboProtocol.export(DubboProtocol.java:45)
  50. at com.taobao.hsf.protocol.MultiplexingProtocol.export(MultiplexingProtocol.java:48)
  51. at com.taobao.hsf.edas.tps.component.WhiteListTPSRuleProtocolInterceptor.export(WhiteListTPSRuleProtocolInterceptor.java:51)
  52. at com.taobao.hsf.service.ServicePubComponent.export(ServicePubComponent.java:35)
  53. at com.taobao.hsf.edas.tps.component.TPSRuleProtocolInterceptor.export(TPSRuleProtocolInterceptor.java:38)
  54. at com.taobao.hsf.tps.component.TPSRuleProtocolInterceptor.export(TPSRuleProtocolInterceptor.java:38)
  55. at com.taobao.hsf.protocol.AbstractDelegateProtocolInterceptor.export(AbstractDelegateProtocolInterceptor.java:26)
  56. at com.taobao.hsf.registry.RegistryProtocolInterceptor.export(RegistryProtocolInterceptor.java:42)
  57. at com.taobao.hsf.grouping.component.GroupingProtocolInterceptor.export(GroupingProtocolInterceptor.java:55)
  58. at com.taobao.hsf.protocol.AbstractDelegateProtocolInterceptor.export(AbstractDelegateProtocolInterceptor.java:26)
  59. at com.taobao.hsf.route.protocol.MachineGroupProtocolInterceptor.export(MachineGroupProtocolInterceptor.java:34)
  60. at com.taobao.hsf.plugins.eagleeye.protocol.EagleEyeProtocolInterceptor.export(EagleEyeProtocolInterceptor.java:37)
  61. at com.taobao.hsf.process.component.CodeployProtocolInterceptor.export(CodeployProtocolInterceptor.java:31)
  62. at com.taobao.hsf.protocol.DelayPublishProtocolInterceptor.export(DelayPublishProtocolInterceptor.java:26)
  63. at com.taobao.hsf.metadata.store.MetadataReportProtocolInterceptor.export(MetadataReportProtocolInterceptor.java:46)
  64. at com.taobao.hsf.model.metadata.ServiceMetadata.export(ServiceMetadata.java:310)
  65. ... 9 more
  66. Caused by: com.taobao.hsf.exception.HSFException:
  67. error message : fail to start HSF remoting server module
  68. at com.taobao.hsf.io.provider.impl.ProviderServerImpl.startHSFServer(ProviderServerImpl.java:95)
  69. at com.taobao.hsf2dubbo.DubboProtocol.registerProvider(DubboProtocol.java:61)
  70. ... 25 more
  71. Caused by: java.net.BindException: 地址已在使用
  72. at sun.nio.ch.Net.bind0(Native Method)
  73. at sun.nio.ch.Net.bind(Net.java:433)
  74. at sun.nio.ch.Net.bind(Net.java:425)
  75. at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
  76. at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:128)
  77. at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:558)
  78. at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1283)
  79. at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:501)
  80. at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:486)
  81. at com.taobao.hsf.io.netty.server.NettyBindHandler.bind(NettyBindHandler.java:58)
  82. at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:501)
  83. at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:486)
  84. at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:989)
  85. at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:254)
  86. at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:365)
  87. at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
  88. at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403)
  89. at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463)
  90. at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
  91. at com.taobao.hsf.io.netty.util.PooledThreadFactory$PooledByteBufRunnable.run(PooledThreadFactory.java:37)
  92. ... 1 more
  93. 2018-10-11 14:31:23,028 org.apache.catalina.core.ApplicationContext log
  94. INFO: Closing Spring root WebApplicationContext
  95. 2018-10-11 14:31:23,041 org.apache.catalina.core.ApplicationContext log
  96. INFO: Shutting down Logback

6.最后,把三个war包分别放到taobao-tomcat的deploy目录,跟taobao-hsf.sar目录同级,依次启动配置中心、三个tomcat即可

阿里云EDAS在本地CentOS7.5 系统搭建测试环境,部署配置中心以及部署多个war包的更多相关文章

  1. 杂项-分布式-EDAS:深度解析阿里云EDAS服务

    ylbtech-杂项-分布式-EDAS:深度解析阿里云EDAS服务 1.返回顶部 1. 深度解析阿里云EDAS服务 弹性伸缩 摘要: 第一种只适用于业务较少的情况,而在新业务不断增加的情况下,增加新应 ...

  2. 阿里云EDAS功能简介

    尊敬的 EDAS 用户: 您好!为了给您带来更好的服务和使用体验,EDAS 产品团队将对 EDAS 标准版(含按量付费和包年包月)进行一轮调整,包括按量付费标准版价格和免费额度的更新,以及标准版套餐的 ...

  3. 阿里云服务器建站——centos7部署apache+mysql+php

    自己也是忙活了半天,才完成了阿里云服务器的建站,这里就来分享一下. 首先如果是要自己搭建一个网站的话,除了服务器以外还要购买域名,并且要去备案,一般在哪买的域名都有备案的系统,备案的话一般要两到三个星 ...

  4. 阿里云服务器安装SQLServer本地无法远程访问

    新买的阿里云服务器,安装上sqlserver2012,本机连接测试没有问题,但是回到本地,使用ip远程连接报错. 尝试了网上各种办法,都是失败.最后找到原因,原来在阿里云的控制台上有设置: 首先进入安 ...

  5. 阿里云专有网络下一键安装RouterOS-ROS系统

    1.阿里云环境centos6.9 x64: 内网网卡为eth0 阿里云的linux下硬盘名称为/dev/vda 注意阿里云的安全组建议开放任意协议和端口,任意IP允许访问 今天测试阿里云2C4G的死活 ...

  6. 阿里云ECS下基于Centos7.4安装MySQL5.7.20

     1.首先登录阿里云ECS服务器,如下图所示: 2.卸载MariaDB 说明:CentOS7.x默认安装MariaDB而不是MySQL,而且yum服务器上也移除了MySQL相关的软件包.因为Maria ...

  7. 阿里云数据库导出-本地mysql导入

    因阿里云数据库标准访问模式不支持外网接入 因此导出一份到本地,注意选择编码为utf8 mysql 命令行用source导入有utf8编码的sql文件时导入的数据有乱码解决办法 set names ut ...

  8. 服务化改造的云上利器 | 阿里云 EDAS 重大升级发布

    11月22日,广东云栖大会企业级互联网架构专场上,阿里云发布了全新版本的企业级分布式应用服务EDAS. 新版本增强了对主流微服务框架的原生支持,实现SpringCloud & Dubbo用户代 ...

  9. 阿里云遇到的坑:CentOS7防火墙(Firewalld),你关了吗?

    阿里云官方教程: https://help.aliyun.com/knowledge_detail/41317.html 百度参考的牛人教程(推荐): http://www.111cn.net/sys ...

随机推荐

  1. OpenCV-Python入门教程4-颜色空间转换

    一.颜色空间转换 import cv2 import numpy as np img = cv2.imread('lena.jpg') # 转换成灰度图 img_gray = cv2.cvtColor ...

  2. UIDebuggingInformationOverlay 调试

    https://archimboldi.me/posts/%E7%BF%BB%E8%AF%91-uidebugginginformationoverlay.html http://ryanipete. ...

  3. Spring Cloud、Spring Boot与Docker 学习资料汇总

    使用Spring Cloud与Docker实战微服务https://gitee.com/itmuch/spring-cloud-bookhttps://eacdy.gitbooks.io/spring ...

  4. python--使用队列结构来模拟共享打印机等候时间

    按书里的样例抄的. 可以看到,将打印速度由第分钟5页提高到10页之后, 每个学生提交打印任务到打印完成的时间明显缩短. =========================== 在计算机科学实验室里考虑 ...

  5. 一脸懵逼学习Hadoop中的MapReduce程序中自定义分组的实现

    1:首先搞好实体类对象: write 是把每个对象序列化到输出流,readFields是把输入流字节反序列化,实现WritableComparable,Java值对象的比较:一般需要重写toStrin ...

  6. CentOS6.9安装HDFS

    1.安装依赖包 yum install -y gcc openssh-clients 2.升级glib2.14 升级glibc-2.14用到的rpm 下载地址:https://pan.baidu.co ...

  7. 上传文件---未能找到路径“D:\MyProject\Files\”的一部分

    C# 使用控件FileUpload 上传文件,简单实例: protected void btnUpload_Click(object sender, EventArgs e) { string pat ...

  8. 1. ELK 之elasticsearch 简介、获取、安装

    简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Ap ...

  9. TopCoder SRM502 Div1 500 贪心 01背包

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-500.html SRM502 Div1 500 好题. 首先,如果已经确定了解决所有问题的优先级, ...

  10. Java基础总结02:环境变量的配置

    (一)Windows系统下配置环境变量 ※在"系统变量"中设置3项属性JAVA_HOME.PATH.CLASSPATH(JDK1.5之后此项属性不必再配),若已存在则点击" ...