场景
Springboot使用Redis作为分布式节点的共享Session, 使用Kafka传输日志到ELK,出现每小时百万条报警,报警日志均为WARN级别,如下:
Session失效监听失败, 报警源码如下:
RedisOperationsSessionRepository
RedisMessageListenerContainer
Springboot使用Redis作为分布式节点的共享Session, 使用Kafka传输日志到ELK,出现每小时百万条报警,报警日志均为WARN级别,如下:
Session失效监听失败, 报警源码如下:
RedisOperationsSessionRepository
RedisMessageListenerContainer
系统版本为Centos6.9
可用node版本较低
可使用最新版本node
系统版本为Centos6.9, 查看已安装Python版本为2.6.6
升级
查看当前版本
为简化维护kafka集群的工作,yahoo构建了基于Web的kafka管理工具。通过kafka manager, 可以直观地发现集群中topic、partition的使用与分布等。
Kafka Manager Github地址
Kafka概念介绍
近期CI/CD进程中遇到这样一个问题,线上应用滚动更新过程中,大概两分钟的时间,应用不能对外提供服务。
k8s管理容器应用,容器组的pods逐个销毁重建(新增新pod, 销毁旧pod,完成替换)。
单个pod的资源分配较低(如cpu分配0.1-0.2核,内存分配256-512M)。
pod可对外提供服务的过程:新pod启动时,系统分配应用进程Id,应用建立各项连接池:连接数据库(mysql), 一致缓存(redis)、监控(infludb)、服务中心(zookeeper)、配置中心(apollo)等。进入pod内,通过netstat -antp可查看,系统分配地址,建立各项连接的过程。连接建立完成后,系统分配应用的服务端口,开始对外提供服务。
原有判断pod启动成功的标志是pod内是否分配了应用进程Id,这种方式带来的问题显而易见:新pod分配了应用进程Id后,并不能立即对外提供服务,旧的Pod却已经被销毁。新pod的应用进程Id建立后,k8s认为该pod已经可以正常提供服务,则将流量导入,但实际新pod的应用服务端口尚未建立。
Kubernetes上部署应用时,经常需要传配置信息给应用,如数据库配置,实现方案有多种,如:
Kubernetes中提供了Secret(用于比较私密的数据)和ConfigMap(用于非私密的数据)两种资源可以很好的解决上述问题。
Secret 和 ConfigMap 本质区别就是 Secret 的数据是用Base64编码混淆过的,对于比较机密的数据(如API密钥)使用 Secret 是一个很好的做法,但是对于一些非私密的数据(比如数据目录)用 ConfigMap 来保存即可。
安全性实际是扯淡的,Secret的实现,仅仅是ConfigMap把value用Base64 Encode一下。只要Decode就能还原数据,相当于明文存储。Base64不是加密算法,仅是编码。
|
|
微服务架构中,单个大应用被拆分成多个自成体系的小系统,小系统的服务通常是通过提供RestFul Api风格的接口供其他应用调用。
每个小系统通常有限流
、安全校验
、监控
、日志
、熔断
等功能模块,随着小系统的增多,负责请求响应处理的公共模块的提出势在必行。在众多解决方案中,服务网关脱颖而出。
服务网关
= 路由转发
+ 过滤器
服务网关
:出现在系统边界上集中式的强管控服务,可看成企业应用级防火墙。
路由转发
:集中接收外界请求,转发到不同的后端微服务。
过滤器
:在服务网关中完成一系列的横切功能,比如限流、安全校验、监控、日志。
Sentinl是Kibana免费的监控预警与报告插件,与付费软件X-Pack功能类似, 可实现监控日志,通知报警邮件。
安装配置参考, 安装完成后,Kibana显示如下:
每项监控通过配置Raw,实现报警,示例如下