主机 | 系统 | 节点 | http.port | tcp.port | 集群 | es版本 |
---|---|---|---|---|---|---|
192.168.10.201 | centos7.5 | es-1 | 10010 | 9300 | ror-es | 5.4 |
192.168.10.201 | centos7.5 | es-2 | 10011 | 9301 | ror-es | 5.4 |
192.168.10.201 | centos7.5 | es-3 | 10012 | 9302 | ror-es | 5.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.
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
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:阻止主副本分片被分配到同一台物理机,提高可用性【伪集群可以取消该配置】
[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
*其他两节点配置相同,注意修改名称、路径信息等配置
主机 | 系统 | 节点 | http.port | tcp.port | 集群 | es版本 |
---|---|---|---|---|---|---|
192.168.10.201 | centos7.5 | es-1 | 10010 | 9300 | ror-es | 5.4 |
192.168.10.201 | centos7.5 | es-2 | 10011 | 9301 | ror-es | 5.4 |
192.168.10.201 | centos7.5 | es-3 | 10012 | 9302 | ror-es | 5.4 |
----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- |
192.168.10.201 | centos7.5 | es-01 | 10020 | 9400 | ror-es | 5.4 |
192.168.10.201 | centos7.5 | es-02 | 10021 | 9401 | ror-es | 5.4 |
192.168.10.201 | centos7.5 | es-03 | 10022 | 9402 | ror-es | 5.4 |
举例:es-1、es-2、es-3节点主机配置较低,可以更新新高配置主机,所以应该将es-01 ~ es-03的节点加入集群后,剔除es-1 ~ es-3节点
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.观察新节点集群分片是否良好
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集群,配置失效(不要单一停启节点,要重启整个集群失效)
1.开始是3台es节点主机
2.性能和数据达到瓶颈后,添加6台主机专门做数据节点
3.前面虚机达到性能瓶颈后,新加6台物理机,替换之前6台数据节点
开始:
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节点, 观察新集群数据是否正常迁移与分片
如果集群索引多,并且每个索引特别大,提前规划好时间
该案例有500+条索引,基本每条索引在5k~1G大小,但又一条索引是达到了150G,
并且该索引只有4个分片+1个副本
在前面扩缩操作的时候,在缩容每台节点的时候,
cluster.routing.allocation.node_concurrent_recoveries=40
indices.recovery.max_bytes_per_sec=60mb
其他索引都在5min内重新分配好,150G的索引在10~20min内分配好
【仅我测试环境数据信息】