记一次Elasticsearch的升级

本文详细记录了一次从Elasticsearch 1.6.1到5.5.0的大版本升级过程,包括安装配置集群、改造Mapping和查询语句、数据迁移及遇到的问题与解决方案。升级步骤涉及设置集群名称、配置内存锁定、安装elasticsearch-head和Kibana等工具,以及调整Mapping以适配新版本。在数据迁移中,采用reindex和双写策略确保业务连续性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

笔者所在公司前段时间对线上Elasticsearch进行了一次比较大的升级,版本由1.6.1升级到了5.5.0,由于版本跨度较大,在升级的过程中踩了不少坑,所以将整个过程记录下来,希望能够给需要的同学提供一点帮助。整个升级过程大概分为了下面几步:

  • 安装新的ES集群
  • 对Mapping和程序代码进行改造
  • 迁移数据并进行双写

接下来就逐条说明。

安装并配置Elasticsearch集群

ES的安装很简单,在每台服务器上执行下面的命令:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.tar.gz
# 解压
tar zxvf elasticsearch-5.5.0.tar.gz
# 将解压后的目录移到/opt下
mv ./elasticsearch-5.5.0 /opt   

下载并解压5.5.0的包,然后直接运行bin目录下的elasticsearch命令即可正常启用ES。如果我们不做任何配置,这样运行起来的ES其实是处于测试环境的,我们这里需要在正式环境使用ES,因此还需要做一些配置。其中比较重要的配置有如下几个:

1、 cluster.name

指定集群的名称,如果某个集群想添加新的节点,那么这个节点所配置的集群名称必须和集群中其他节点的名称保持一致。

2、 node.name

节点名称,方便我们在管理节点的时候区分当前是哪个节点,所以只要取一个有意义的名字即可,比如可以利用当前机器的IP来命名:node-159,159是这台机器的IP。

3、 path.datapath.logs

这两个参数默认情况下指向的是/{ES_HOME}/data/{ES_HOME}/logs目录,但是不排除以后ES升级了将原目录删除的可能,如果数据文件和日志文件都在默认路径下就有被误删的风险。因此,这里建议将两者单独存放,比如,数据放在/data/elasticsearch目录下,日志可以放在/var/log/elasticsearch目录下。

4、 bootstrap.memory_lock

这个配置在正式环境中非常重要,通过将其设为true,可以对jvm的内存进行锁定,从而避免了物理内存中数据的换入/换出,而且在正式环境里,ES启动的时候也会做一个检查,如果发现不能锁定内存,将导致程序启动失败。

5、 network.host

默认情况下这个值是127.0.0.1,这就意味着我们只能通过本机来请求ES的rest api,并且,如果你希望搭建集群,那么也只能发现本机的其他节点。 因此,在正式环境,需要将其指定为本机的IP。

6、 http.port

默认是9200,一般也不需要改。

7、 discovery.zen.ping.unicast.hosts

Zen 发现机制是ElasticSearch中默认的用来发现新节点的功能模块,在1.6的版本中,默认采用多播的模式来寻找其他节点,但是在比较大的集群里,这种多播的模式会产生很多不必要的流量开销,因此,2.0之后的版本只能使用单播模式。单播模式是这样的,新加入的节点会发送一个ping请求到事先设置好的地址中,来通知集群它已经准备好加入到集群中了,这个事先设置好的地址就是这个参数指定的地址。

8、 discovery.zen.minimum_master_nodes

这个参数主要的作用就是避免脑裂现象的发生,那什么是脑裂现象呢?由于某些节点的失效,部分节点的网络连接会断开,并形成一个与原集群一样名字的集群,这种情况就称为脑裂(split-brain)现象。脑裂现象最大的问题在于,新形成的两个集群会同时索引和修改集群的数据。而这个参数的含义是说:需要多少个节点才能选举一个Master节点,默认值是1。根据经验这个值一般设置成 N/2 + 1,N是集群中节点的数量,例如一个有3个节点的集群,minimum_master_nodes 应该被设置成 3/2 + 1 = 2(向下取整)。由于节点数不满足选举新的mater的条件,因此也就一定程度避免了脑裂现象。

除了上面的这几条配置,我们比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值