一、准备环境配置
下载地址:
Java :http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
elasticsearch : https://www.elastic.co/downloads/elasticsearch
1、java环境配置
- 方法一:软链Java到系统path环境
tar zxvf jdk-8u102-linux-x64.tar.gz -C /data/server
ln -s /data/server/jdk1.8.0_102/bin/java* /usr/bin/
- 方法二:/etc/profile 或es启动程序中指定
vim /etc/profile # 或 vim ./bin/elasticsearch
export JAVA_HOME=/data/server/jdk1.8.0_102
# java 配置只启用ipv4 的端口,ipv6连接可能会有问题
export _JAVA_OPTIONS="-Djava.net.preferIPv4Stack=true"
2、系统环境配置
- 提高相关配置限制
可能会遇到的报错信息:
max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
先配置好相关配置,解决:
vim /etc/sysctl.conf
添加如下配置,sysctl -p
配置生效
vm.max_map_count=655360
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
vim /etc/security/limits.d/90-nproc.conf
如果文件存在,这里也需要修改
* soft nofile 65536
* hard nofile 65536
二、elasticsearch 集群搭建
1、基本需求
1,每个服务器3个ES节点,每个节点JVM内存分配25G,挂载到四个不同的路径;
2,每个ES节点多个数据节点;master节点10G
3,ES集群间副本不在同一个服务器上;
4,ES集群任何一个节点故障不影响集群;
5,ES集群任何一个服务器故障不影响集群;
6,主节点和数据节点进行区分;
由于线上服务器内存大都128G以上,而es节点建议是jvm内存不超过32G,资源合理利用考虑,一个服务器三个ES节点,同时保证一个ES节点的副本不能在同一个服务器上。不然一个服务器宕机,es集群受影响。
2、安装配置
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.2.tar.gz
tar zxvf elasticsearch-6.2.2.tar.gz -C /data/server
下面的配置根据个人具体情况配置
- 每个服务器3个ES节点,每个节点JVM内存分配25G
一个服务器多个节点:将elasticsearch-6.2.2文件夹复制几份,将各个节点的值设置不同
每个节点JVM内存分配25G
vim elasticsearch-6.2.2/config/jvm.options # 修改如下配置
# 最多不要超过32G
-Xms25g
-Xmx25g
这里踩过es的一个坑,需要修改jvm.options配置,不然es出问题是会在启动用户宿主目录下产生大量日志占满磁盘
vim elasticsearch-6.2.2/config/jvm.options
# -XX:+HeapDumpOnOutOfMemoryError # 注释掉这一行
-XX:HeapDumpPath=/data/HeapDumpPath # 修改heapDump日志路径到容量充裕的分区
配置文件 elasticsearch.yml 如下:
grep -v "^#" elasticsearch-6.2.2/config/elasticsearch.yml |grep -v "^$"
cluster.name: logs_production # 集群名称,同名称为集群节点
node.name: node102_01 # 节点名称,默认会随机取名称
node.master: true # 是否为master节点
node.data: true # 是否为数据节点
path.data: /data/01,/data/02 # 如果在path.data中写多个目录用“,”分隔,功能类似于raid 0,而不是做备份
network.host: 10.100.0.102 # 监听主机
http.port: 9201 # 监听端口
transport.tcp.port: 9301 # 传输端口
transport.tcp.compress: true
# 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.zen.ping.unicast.hosts: ["10.100.0.101:9301", "10.100.0.102:9301","10.100.0.103:9301"]
cluster.routing.allocation.same_shard.host: true
添加优化配置,只在master节点配置即可
discovery.zen.ping_timeout: 200s
discovery.zen.fd.ping_timeout: 200s
discovery.zen.fd.ping_interval: 30s
discovery.zen.fd.ping_retries: 5
在虚拟云主机上可能出现的问题:
ERROR: [1] bootstrap checks failed
[1]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
解决方法:在es配置中加入下面命令即可
bootstrap.system_call_filter: false
==启动,elasticsearch 不允许root启动,需要配置普通用户启动。==
elasticsearch目录以及path.data授权给普通用户。
useradd es
su - es -c "/data/server/elasticsearch-6.2.2/bin/elasticsearch -d"
- 一个服务器多个ES节点,同时保证一个ES节点的副本不能在同一个服务器上
cluster.routing.allocation.same_shard.host
允许执行检查以防止在单个主机上根据主机名和主机地址分配同一分片的多个实例。默认为false,意味着默认情况下不执行检查。此设置仅适用于在同一台机器上启动多个节点的情况。
- es 2 版本支持,es 5版本之后不支持的 配置项
如果5之后版本配置,官方建议生成索引时再设置
索引分片数 index.number_of_shards: 5 (5xx版本以后不支持index)
索引副本数 index.number_of_replicas: 1 (5xx版本以后不支持index)
- 脑裂问题
假设使用两个节点, 启动后, 集群会选举一个master, 一切ok. 但是如果存在网络问题或者某个节点无响应(负载过高), 就会认为对方dead了, 然后两个节点自动选举为master, 在后续建索引的时候造成数据不一致.
两个节点防脑裂的配置, minimum_master_nodes决定了选主需要的最少节点数, N/2+1, 两个节点即2 discovery.zen.minimum_master_nodes: 2
但是, 此时一个节点挂了, 则整个集群挂了(无法选举主节点了)
三、安装插件:
1、安装插件 cerebro (head,kopf插件 新版本已不支持)
github地址:https://github.com/lmenezes/cerebro/releases
es5版本后不支持head,kopf,这里安装cerebro
unzip cerebro-0.7.2.zip
cd cerebro-0.7.2/
./bin/cerebro -Dhttp.port=9205 -Dhttp.address=10.100.0.104
浏览器访问:http://10.100.0.104:9205
2、安装监控报警插件sentinl-v5.2.2.zip
github 地址:https://github.com/sirensolutions/sentinl/releases
# 插件安装:
/data/server/kibana-5.2.2/bin/kibana-plugin install