consul线上部署的一些总结(持续更新中。。。)

   最近线上consul部署遇到的一些问题,和开发有点区别。还是总结下一些所谓的方法吧。如果大家有好的方法欢迎讨论

【1】war包丢到tomcat中注册不到consul,但是服务是可以访问的

  在本地发开因为是springboot直接启动,所以注册没问题,通过idea配置外部tomcat运行时还是没问题。But当我把war信誓旦旦的放到正式服务器上,what?竟然没有成功。一直注册不进去,分析了半天发现idea是把编译文件直接放到了\webapps\ROOT下。为了验证我又把ROOT下的对应文件拷到另一个tomcat中竟然注册成功了(前提是配置文件里的注册discover地址要改成和tomcat端口一样才行)。

所以在服务器的tomcat中修改了对应编译jar的文件如下:

之后通过写了shell脚本进行的编译部署:

(1)先把存在wars包所在项目进行编译:unzip xxx.war -d  路径名/xxx

(2)./startup.sh

这样运行后成功注册到了consul中

【2】重复注册服务

线上有个服务重复启动后发现注册了两次,通过修改实例名进行保证实例的唯一性。

server:
  port: 8095
  number: 1001
spring:
  application:
    name: xx-service
  cloud:
    # 使用consul作为注册中心
    consul:
      # 正式环境service模式
      host: ${CONSUL_HOST:172.16.56.9}
      port: ${CONSUL_PORT:8500}
      discovery:
        port: ${server.port}
        register: true
        instance-id: ${spring.application.name}:${server.port}:${server.number}

通过给部署的实例进行编码拼接到 instance-id中

以上方式也有问题,就是部署比较麻烦,所以可以根据机器唯一表示定义instance-id,例如机器ip

#主机名
instance-id: ${spring.application.name}-${server.port}-${spring.cloud.client.hostname}
#ip地址
instance-id: ${spring.application.name}-${server.port}-${spring.cloud.client.ip-address}

【3】删除无效服务

可以通过consul的api进行操作

如果你不知道服务对应的实例id,首先查看下consul的日志:

通过consul日志查看具体哪个服务实例有问题,找到对应的id通过命令删除:

curl -X PUT 'http://xxx:8500/v1/agent/service/deregister/xx-service'

不报错再看服务就好了。

还要一些其他问题后续再进行更新。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值