赞
踩
在资源有限情况下解决生产环境下ES集群之间数据同步的问题
先简单介绍一下我我司生产环境下的ES集群情况,一共四个集群,集群之间逻辑网络隔离。业务人员平时查询数据,需要登录每个集群的Kibana挨个进行查询。现在的需求能不能在一界面可以完成所有就集群数据的查询。
版本一:跨集群搜索
这种场景首先想到就是CCS(跨集群搜索),但是目前集群互相ping不通,首先解决这个问题,方法就是,修改四个集群每个节点的IP地址(修改子网掩码),使他们在同一网段,能够ping通。然后在kibana的界面直接配置CCS。步骤 kibana主页点击 management --> remote cluster --add a remote cluster
这个办法运行了一段时间后,虽然在数据查询上确实解决了业务人员当下的问题,但是随着人员增加而且水平层次不齐,还是直接在生产环境下直接用管理员账号(一开始确实管理不严)存在很大风险(误删数据),一次不合理的查询直接将集群搞黄,甚至搞红。针对这一情况需要新的解决方案。
解决思路,首先要对业务人员进行用户管理而且进行权限限制,比如只分配(只有读的权限,而且只能读指定索引)这个ES6.8版本以上的x-pack都已实现,而我们的生产集群版本在6.7以下,需要另外安装插件等,如果直接在原有的集群进行操作,风险很大,万一集群起不来,造成数据丢失,损失就有点大,最好能在别的地方运行一个ES实例,这样不经可以避开在生产集群上进行配置,还能解决业务人员直接在生产集群上操作造成集群不稳定的现象,
版本二:另起炉灶,配置身份认证和鉴权,专门提供ES数据查询
一开始的思路就是重新运行一个ES实例(新的物理服务器上)然后加入到CCS(跨集群搜索)中,但是有一个问题始终避免不了,如果配置身份认证和鉴权,新的ES实例与生产集群之间数据无法打通,必须在生产集群上进行配置,所以只能另想办法,想到了通过Logstash实现集群之间的数据同步。同时还能实现用户管理。
具体做法就是新的ES实例物理服务器上,运行logstash,每个五分钟从四个生产集群同步最近五分中的数据过来,然后在新的ES实例上(单节点)配置用户认证和鉴权。就这样解决了最初的问题。
运行了一段时间,也收到业务人员的反馈,主要的问题就是,数据不一致问题,具体就是在专属ES查询服务器上有时收不到数据,但是在生产集群可以搜到,还有就是数据存在延迟,而且分钟级别。经过排查问题出在logstash上,这里的数据同步流程是:原始数据经过处理先到生产集群中,然后logstash再从生产集群中把数据每个五分钟一个批次同步到ES专属查询服务器上,所以存在数据延迟和数据不一致的问题。
本着解决问题的态度,开始着手安排,经过一番折腾,想到了通过logstash双写机制来解决数据延迟和数据不一致的问题
版本三:logstash双写
这回是在生产集群侧进行logstash配置文件修改,在output模块增加一个ES输出到ES专属查询节点上,就这样就这样轻而易举解决问题。
这里插一句,ES专属查询节点上的数据一开始只保留三个月,超过三个月的数据需要在生产集群中查询,这里我们通过ES自带的curator配合Linux的crontab命令实现ES索引的自动化生命周期管理(自动删除三个月的数据),但是数据量不断增加,单节点Es有点吃不消内存和磁盘经常爆满,经过我们与业务人员的沟通,我们发现平常他们只查询一个礼拜的数据,极小的可能才会查询一年上的数据,所以后来我们直接把索引的存留时间直接调整为7天,这样大大缓解了内存和磁盘存储占用压力。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。