elasticsearch内存引起的结点无法正常运行

效果
1,kibana看服务red
2,/_cat/nodes发现少个结点
3,阿里云容器里看结点正常运行,重启提示找不到主结点。不过测试ping能通。
4,/_cat/indices 无法打开。

最后发现开结点有点慢,发现内存占用90%,偶尔飙到98%。怀疑内存不够
最后吧机器内的hadoop关了,内存降到90%以下就好了。

springcloud中怎么蓝绿发布嘞

百度上搜的有好多理论。就不说了
springcloud没啥管理界面。
搜到一个springcloudadmin的,结果是个第三方的。觉得不太稳。

我们的环境是,阿里云的docker,springcloud经典全家桶。
服务更新的时候是,同时启动版本1和版本2,两个服务,然后关掉老的版本1.
这样会造成5~10秒的服务中断

单一服务的时候,是用的阿里负载均衡的蓝绿发布。但使用注册服务eureka的话这样就不行了。

再说下早期的弯路,也是搜百度,springcloud如何优雅关闭,然后找到了,每个服务可以执行 shutdown方法,但这其实并没有什么卵用。阿里关闭服务的时候已经算是优雅关闭了。用这个效果一样。

最终解决的方向是,eureka里的 /status?value=OUT_OF_SERVICE
格式是 PUT方法(必须PUT别的不行)
http://eureka/apps/服务名(大小写都行)/[服务id]/status?value=OUT_OF_SERVICE
这样在eureka中服务会显示OUT_OF_SERVICE,新的请求就不会走这个服务了,如果想回滚只要这个服务没有删重新设置成UP就行了。
注意:如果里面运行着队列的话会继续执行的,并不会终止。

如何制作一个UI界面方便管理呢。
最早看贴子有说用postman的
然后想过做个html解析,处理下eureka页面。

现在的方案是,改写eureka的url
eureka.instance.status-page-url=http://处理页面/hoststatus?servicename=${spring.application.name}&clientid=${clientid}
这个配置是在每个服务里的。这样注册后,会在eureka中看到这个链接,不再是/info
这个页面里可以写个开关服务的按钮就行了。比较容易实现。

jmater,2毫秒间隔请求接口实测,0异常。

aliyun在docker容器服务里配置elasticsearch5

第一步,制作镜像。官方镜像没有x-pack。

FROM kibana:5.6.3
ENV TIME_ZONE Asia/Shanghai
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "${TIME_ZONE}" > /etc/timezone
RUN kibana-plugin install x-pack
EXPOSE 5601

第二部,多节点发布
这里举例发布一个主节点,一个数据节点。
aliyun的容器里配置

elasticsearch:
      container_name: elasticsearch
      restart: always
      environment:

        - LANG=C.UTF-8
        - JAVA_HOME=/docker-java-home/jre

        - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      expose:
        - '9200:9200/tcp'
        - '9300:9300/tcp'
      memswap_limit: 0
      labels:
        aliyun.scale: '1'
      command:

        - elasticsearch 
        - '-E'
        - cluster.name=searcher #所有节点设置成一样的
        - '-E'
        - node.master=true #主节点true,数据节点false
        - '-E'
        - node.name=elasticsearch #节点名不能一样
  
        - '-E'
        - network.host=172.19.0.27#这里需要些容器的ip否则互相找不到,而且不能加引号
        - '-E'
        - discovery.zen.ping.unicast.hosts=172.19.0.32:9300 #互相发现的节点和ip
      shm_size: 0
      #image: 'elasticsearch:5.6.3' #如果不装或手动装xpack的话可以用官方镜像。官方镜像安装xpack比较消内存,可能因内存不足提示killed安装失败。
      image: 'xx[这里是你的镜像]x/elastic_search:0.1.0'
      memswap_reservation: 0
      volumes:
        - esdata1:/usr/share/elasticsearch/data
      kernel_memory: 0
      mem_limit: 0

swagger-ui在spring-cloud里无法设置basepath的坑

在springcloud里网关做的路由,隐藏了微服务的名称。
单发现无论怎么设置host和basepath都没效果,结果发现是版本的坑
用2.6.1是可以的2.7设置无效。

<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>

<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>


	

springcloud中缓存的小坑坑

在springboot中使用缓存是很随意的,dao中能加缓存 service中能加缓存,crontroller中都能加缓存。
但如果把springcloud包引入后会发现缓存不能随便用了,只能在dao层中使用
别的层如果还想用缓存注解尝试过把核心库中一个jar换成早期测试版可以办到。。。但这样会让微服务间无法正常请求数据。

目前只能在dao中使用缓存
参数设置方式只能是root.args[0],root.args[0].id 这种,不能用其他的别名

Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR unknown command config

在阿里云部署springboot项目发现异常。在测试服是正常的,正式服使用了aliyun的redis服务

异常:
Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR unknown command config

应该是阿里云对redis进行了限制

需要增加:
@Configuration
public class RedisConfig {
@Bean
public static ConfigureRedisAction configureRedisAction() {
return ConfigureRedisAction.NO_OP;
}
}