ELK-02-elasticsearch集群部署和节点扩缩

0. 测试环境信息

主机系统节点http.porttcp.port集群es版本
192.168.10.201centos7.5es-1100109300ror-es5.4
192.168.10.201centos7.5es-2100119301ror-es5.4
192.168.10.201centos7.5es-3100129302ror-es5.4

节约资源,部署同一主机的伪集群,3节点同为master与data的节点角色。

es节点角色:

Master-eligible node:
A node that has node.master set to true (default), which makes it eligible to be elected as the master node, which controls the cluster.

Data node:
A node that has node.data set to true (default). Data nodes hold data and perform data related operations such as CRUD, search, and aggregations.

Ingest node:
A node that has node.ingest set to true (default). Ingest nodes are able to apply an ingest pipeline to a document in order to transform and enrich the document before indexing. With a heavy ingest load, it makes sense to use dedicated ingest nodes and to mark the master and data nodes as node.ingest: false.

1. 集群部署

1.1 部署

jdk部署:
清除主机openjdk,部署java version "1.8.0_121"

下载:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.0.tar.gz

解压:
tar -xf elasticsearch-5.4.0.tar.gz -C /xx/es1/ && mv elasticsearch-5.4.0 elasticsearch

编辑配置:
1)jvm.options[修改Xms和Xmx符合主机内存配置,单台最大不超过32G]
2)elasticsearch.yml[如下1.2配置](每个节点配置自己的端口信息等,避免同一主机冲突)

创建用并赋权:(创建3个节点路径,如xx/log/es1等)
useradd -m es
chown es.es -R  /xx/es/
chown es.es -R  /xx/log/
chown es.es -R  /xx/public/

修改主机配置:
1)es用户文件句柄数大于1024
echo "es soft nofile 204800" >>/etc/security/limits.conf
echo "es hard nofile 204800" >>/etc/security/limits.conf
sysctl -p 
2)修改主机虚拟内存数量
echo "vm.max_map_count=512000" >> /etc/sysctl.conf
sysctl -p 

启动:
1)配置1.3的systemd文件(区别每个节点不同的信息)
    systemctl daemon-reload
2)启动es
   systemctl start es1
   systemctl start es2
   systemctl start es3

1.2 配置文件

cluster.name: ror-es
node.master: true
node.data: true
node.name: es-1
node.attr.tag: cold
path.data: /file/bk-es-cluster/public/es1
path.logs: /file/bk-es-cluster/log/es1
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: "192.168.10.201"
http.port: 10010
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["192.168.10.201:9300", "192.168.10.201:9301", "192.168.10.201:9302"]
discovery.zen.minimum_master_nodes: 2
thread_pool.search.size: 1000
thread_pool.search.queue_size: 1000
thread_pool.bulk.queue_size: 1000
cluster.routing.allocation.same_shard.host: true
http.cors.enabled: true
http.cors.allow-origin: "*"

*其他两节点配置相同,注意修改节点名称、路径信息、端口信息等配置
-----------------------------------------------

cluster.name: es的集群名称
node.master: 该节点是否有资格被选举成为master
node.data: 该节点是否存储索引数据
node.name: 节点名称
path.data: 索引数据的存储路径
path.logs: 日志文件的存储路径
bootstrap.memory_lock: 内存锁定检查
bootstrap.system_call_filter: 系统调用过滤器检查
network.host: 监听IP
http.port: 对外服务的http端口
transport.tcp.port: 节点间交互的tcp端口
discovery.zen.ping.unicast.hosts: 集群中的主节点的初始列表
discovery.zen.minimum_master_nodes: 保证集群中的节点可以知道其它N个有master资格的节点
thread_pool.search.size:
thread_pool.search.queue_size:
thread_pool.bulk.queue_size:

cluster.routing.allocation.same_shard.host:阻止主副本分片被分配到同一台物理机,提高可用性【伪集群可以取消该配置】

1.3 systemd文件

[Unit]
Description=es1
Documentation=http://www.elastic.co
Wants=network-online.target
After=network-online.target
[Service]
Environment=ES_HOME=/xx/es1/elasticsearch
Environment=CONF_FILE=/xx/es1/elasticsearch/config/elasticsearch.yml
Environment=JAVA_HOME=/jdk/jdk1.8.0_121
Environment=LOGS_HOME=/xx/log/es1
User=es
Group=es
ExecStart=/xx/es1/elasticsearch/bin/elasticsearch -p /xx/es1/elasticsearch/es.pid
StandardOutput=null
StandardError=journal
SuccessExitStatus=143
LimitNOFILE=102400
TimeoutStopSec=20
[Install]
WantedBy=multi-user.target

*其他两节点配置相同,注意修改名称、路径信息等配置

2. 节点扩缩测试

2.1 测试目的与环境

主机系统节点http.porttcp.port集群es版本
192.168.10.201centos7.5es-1100109300ror-es5.4
192.168.10.201centos7.5es-2100119301ror-es5.4
192.168.10.201centos7.5es-3100129302ror-es5.4
-----------------------------------------------------------------------------
192.168.10.201centos7.5es-01100209400ror-es5.4
192.168.10.201centos7.5es-02100219401ror-es5.4
192.168.10.201centos7.5es-03100229402ror-es5.4

举例:es-1、es-2、es-3节点主机配置较低,可以更新新高配置主机,所以应该将es-01 ~ es-03的节点加入集群后,剔除es-1 ~ es-3节点

2.2 测试操作

2.2.1 部署步骤
0.如果没有做配置修改,es分片自动进行,es扩容操作其实将es新节点加入es集群既可,但是可能数据量的问题,需要一些其他操作;缩容的情况,如果副本做的好,可以直接停掉缩容的节点主机,也可以配置路由进行向该节点分片,后停掉该节点
1.部署es01~es03,3个节点es
2.修改es01~es03, 3个节点配置
3.依次启动es01~es03, 3个节点,数据量大的情况可能分片太慢,可以做调整,API命令请看2.2.2的信息
4.依次禁止es-1~es-3节点继续存储分片信息,并停止节点;修改路由设置禁止分片API命令请看2.2.2的信息
5.观察新节点集群分片是否良好
2.2.2 API操作
1.修改同时分片操作个数和数据传输带宽
curl -H "Content-Type: application/json" -XPUT 192.168.10.201:10010/_cluster/settings -d '{"persistent": {"cluster.routing.allocation.node_concurrent_recoveries": "8","indices.recovery.max_bytes_per_sec": "80mb"}}'
cluster.routing.allocation.node_concurrent_recoveries:属性表示集群中每个节点上分片并发恢复的个数,默认为2。可根据老数据节点的 CPU 核数 * 4来确定具体的值,但不要超过50。例如,老数据节点为4核16G,则建议该值设置为16;老数据节点为16核64G,则建议该值设置为50。如果发现调大了该值后集群的稳定性受到影响,可适当减小该值。
indices.recovery.max_bytes_per_sec:属性表示节点之间数据传输的最大带宽限制,默认为40mb。该值不宜设置的过高,否则会破坏集群的稳定性。客户可以5mb为步长,逐步调整该限制值,并持续观察集群的稳定性,最终选择一个相对平衡的值。


2.集群路由设置:(es-2节点举例)
1) 操作:不要将分片分配给{es-02}节点
curl -H "Content-Type: application/json" -XPUT 192.168.10.201:10010/_cluster/settings -d '{ "transient" : { "cluster.routing.allocation.exclude._name" : "es-2" } }'
2) 将_nmae参数置空,就会重新分片到所有节点
3) exclude._xxx,这个参数可以是ip或主机名等,如果需要请看官方文档说明
4)该API命令是临时生效,重启整个es集群,配置失效(不要单一停启节点,要重启整个集群失效)
2.2.3 可视化工具观察分片
  1. 源节点数据:
    源节点数据
  2. 加入集群后所有节点集群数据:(向新节点分片数据)
    所有节点集群数据
  3. 新集群数据:(重新分片完成)
    新集群数据

3.实际案例分享

3.1 环境信息

1.开始是3台es节点主机
2.性能和数据达到瓶颈后,添加6台主机专门做数据节点
3.前面虚机达到性能瓶颈后,新加6台物理机,替换之前6台数据节点
在这里插入图片描述

3.2 操作过程

开始:
1.部署es3节点集群,提供应用使用

之后:(性能和数据达到瓶颈后)
2.新部署6台es节点
3.配置6台数据节点配置的节点信息,只是数据节点而非master节点
4.依次启动6台数据节点
5.分片分配均匀后,修改原3台主机配置,只是mster节点而非数据节点
6.修改路由配置禁止maser节点存放分片数据,后依次重启master节点


最终:(虚机达到性能瓶颈后,新加6台物理机)
7.删除不需要的索引数据,防止后续分片耗时
8.备份原9台es的配置文件
9.还原 原9台es配置与jvm,新6台es修改和原data节点配置一致,并修改名称等信息
10.依次启动新6台es,观察数据是否正常迁移与分片
11.加快分片操作:
curl -H "Content-Type: application/json" -XPUT es_ip:es_port/_cluster/settings -d '{"persistent": {"cluster.routing.allocation.node_concurrent_recoveries": "40","indices.recovery.max_bytes_per_sec": "80mb"}}'
12.数据正常后,修改集群路由,禁止分片到老6台数据节点:依次执行6台信息
curl -H "Content-Type: application/json" -XPUT es_ip:es_port/_cluster/settings -d '{ "transient" : { "cluster.routing.allocation.exclude._name" : "xxx" } }'
13.老6台主机没有数据后,停止原data节点, 观察新集群数据是否正常迁移与分片

3.3 注意事项

如果集群索引多,并且每个索引特别大,提前规划好时间

该案例有500+条索引,基本每条索引在5k~1G大小,但又一条索引是达到了150G,
并且该索引只有4个分片+1个副本

在前面扩缩操作的时候,在缩容每台节点的时候,
cluster.routing.allocation.node_concurrent_recoveries=40
indices.recovery.max_bytes_per_sec=60mb
其他索引都在5min内重新分配好,150G的索引在10~20min内分配好

【仅我测试环境数据信息】
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值