Bean的冒险船


  • 首页

  • 归档

  • 标签

  • 公益404

  • 搜索

Springboot Redis Session 消息监听遗漏Bug记录

发表于 2018-12-21

场景

Springboot使用Redis作为分布式节点的共享Session, 使用Kafka传输日志到ELK,出现每小时百万条报警,报警日志均为WARN级别,如下:

1
2
RedisOperationsSessionRepository:Unable to publish SessionDestroyedEvent for session
RedisMessageListenerContainer:Execution of message listener failed, and no ErrorHandler has been set

Session失效监听失败, 报警源码如下:
RedisOperationsSessionRepository
RedisMessageListenerContainer

解决

紧急解决

阅读全文 »

Centos Node安装记录

发表于 2018-12-20

系统版本为Centos6.9

方式一:从EPEL库安装Node.js

可用node版本较低

1
2
3
4
5
6
7
8
# 安装
yum install epel-release
yum install nodejs
yum install npm
# 查看
node --version
npm --version

方式二(推荐):下载源代码,编译安装

可使用最新版本node

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 下载
cd /usr/local/src
wget https://nodejs.org/dist/v11.5.0/node-v11.5.0.tar.gz
# 解压
tar zxvf node-v11.5.0.tar.gz
cd node-v11.5.0
# 配置
./configure
# 编译
make install
# 查看
node --version
npm --version

阅读全文 »

Centos Python2升级记录

发表于 2018-12-20

系统版本为Centos6.9, 查看已安装Python版本为2.6.6

1
2
3
4
5
cat /etc/redhat-release
CentOS release 6.9 (Final)
python -V
Python 2.6.6

升级

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 下载
cd /usr/local/src
wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz
# 解压
tar zxf Python-2.7.15.tgz
cd Python-2.7.15
# 配置
./configure
# 编译(make all:即make, 仅编译;make install:编译并安装;make clean:清除编译结果;make distclean:清除所有生成的文件)
make install
make clean
# 查看版本
/usr/local/bin/python2.7 -V
# 建立软连接,将系统默认的python指向python2.7
mv /usr/bin/python /usr/bin/python2.6
ln -s /usr/local/bin/python2.7 /usr/bin/python
# yum不支持 python2.7 ,此时yum已经无法使用,更改如下恢复yum
vim /usr/bin/yum
将yum引用python的路径, 由/usr/bin/python 更改为 /usr/bin/python2.6

查看当前版本

1
2
python -V
Python 2.7.15

Kafka Manager引入

发表于 2018-12-09

Kafka Manager

为简化维护kafka集群的工作,yahoo构建了基于Web的kafka管理工具。通过kafka manager, 可以直观地发现集群中topic、partition的使用与分布等。
Kafka Manager Github地址
Kafka概念介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
yum install -y java-1.8.0-openjdk
yum install java-devel
git clone https://github.com/yahoo/kafka-manager
cd kafka-manager
curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo
mv bintray-sbt-rpm.repo /etc/yum.repos.d/
yum clean all
yum repolist all
yum install sbt -y
# 资源为墙外资源, 构建时间较长
sbt clean dist
# 成功后解压 kafka-manager-1.3.3.21.zip
cd target/universal
unzip kafka-manager-1.3.3.21.zip
# 配置zk地址
vim /conf/application.conf
kafka-manager.zkhosts="$domain1:2181,$domain2:2181,$domain3:2181"
# 后台启动, 选择未使用的端口号,默认为9000
nohup ./kafka-manager -Dhttp.port=8096 &
# 浏览器访问
$kafka-manager-domain:8096

安装参考

Kafka Api

阅读全文 »

Kubernetes Pod 之 Readiness 探针引入

发表于 2018-11-24

背景

近期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 Secret & ConfigMap

发表于 2018-10-27

一、Secret & ConfigMap 作用

Kubernetes上部署应用时,经常需要传配置信息给应用,如数据库配置,实现方案有多种,如:

  • 将配置信息放在应用的配置文件中。这种方式的坏处显而易见,每次配置更改均要重新打包镜像。
  • 在 Dockerfile 中指定环境变量,配置信息通过环境变量传入。这种方式的局限性在于每次修改配置都要修改yaml文件后重启容器,而且若大量的配置放到环境变量中,可读性低。另外,如果我们需要在不同的容器中引用相同的数据,如果应用程序是运行在集群上的时候,使用环境变量配置的方式是难以管理的。

Kubernetes中提供了Secret(用于比较私密的数据)和ConfigMap(用于非私密的数据)两种资源可以很好的解决上述问题。

二、Secret & ConfigMap 区别

Secret 和 ConfigMap 本质区别就是 Secret 的数据是用Base64编码混淆过的,对于比较机密的数据(如API密钥)使用 Secret 是一个很好的做法,但是对于一些非私密的数据(比如数据目录)用 ConfigMap 来保存即可。
安全性实际是扯淡的,Secret的实现,仅仅是ConfigMap把value用Base64 Encode一下。只要Decode就能还原数据,相当于明文存储。Base64不是加密算法,仅是编码。

三、Secret & ConfigMap 生成

Secret

创建:

echo_pwd_base64

①命令行创建
1
kubectl create secret generic mysecret --from-literal=test-db-username=YWRtaW4= --from-literal=test-db-password=MTIzNDU2
阅读全文 »

微服务之网关引入

发表于 2018-10-25

背景

微服务架构中,单个大应用被拆分成多个自成体系的小系统,小系统的服务通常是通过提供RestFul Api风格的接口供其他应用调用。
每个小系统通常有限流、安全校验、监控、日志、熔断等功能模块,随着小系统的增多,负责请求响应处理的公共模块的提出势在必行。在众多解决方案中,服务网关脱颖而出。

定义

服务网关 = 路由转发 + 过滤器

服务网关:出现在系统边界上集中式的强管控服务,可看成企业应用级防火墙。

路由转发:集中接收外界请求,转发到不同的后端微服务。

过滤器:在服务网关中完成一系列的横切功能,比如限流、安全校验、监控、日志。

阅读全文 »

JVM GC优化初探

发表于 2018-09-30

JVM内存模型

jvm_memory_structure

堆内存&非堆内存

阅读全文 »

塞尔达传说(旷野之息)全神庙位置概览

发表于 2018-09-28

基础120 + DLC16共计136神庙

map_all
注:双子峰有三个神庙

游戏截图

阅读全文 »

Kibana Sentinl插件引入

发表于 2018-08-25

Sentinl是Kibana免费的监控预警与报告插件,与付费软件X-Pack功能类似, 可实现监控日志,通知报警邮件。
安装配置参考, 安装完成后,Kibana显示如下:
kibana_sentinl_ui
每项监控通过配置Raw,实现报警,示例如下

阅读全文 »
123…7
MonkeyBean

MonkeyBean

行云流水 天马行空

62 日志
16 标签
GitHub 微博
友情链接
  • 耀耀的博客
  • 7nocturnal的博客
  • xiaofeng的博客
  • Angus的博客
© 2016 - 2022 MonkeyBean
由 Hexo 强力驱动
主题 - NexT.Pisces