Elasticsearch用 Java 编写的,所以前提必须安装JDK环境
1、批量安装JDK1.8
# 安装JDK脚本,这里要输入几台次各服务器密码,首先把JDK上传到某一台服务器上,然后通过免密传输安装配置软件
for i in {102,103,104};
do
scp /opt/jdk-8u221-linux-x64.tar.gz root@192.168.5.$i:/opt/
ssh root@192.168.5.$i "tar -zxf /opt/jdk-8u221-linux-x64.tar.gz -C /usr/local/ \
&& echo export JAVA_HOME=/usr/local/jdk1.8.0_221 >> /etc/profile \
&& export JRE_HOME=${JAVA_HOME}/jre >> /etc/profile \
&& export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib >> /etc/profile \
&& export PATH=${JAVA_HOME}/bin:$PATH >> /etc/profile \
&& source /etc/profile && java -version"
done
2、ES集群安装
Elasticsearch的安装很简单,下载下来解压即可;Elasticsearch 要求不能使用超级用户root运行,所以我们建立一个elastic账号,并把软件的权限赋予elastic账号并使用elastic账号运行Elasticsearch。 9200:对外服务的http 端口 9300:节点间通信的tcp端口
# 首先把ES压缩文件(elasticsearch-5.6.10.tar.gz)上传到某一台服务器上,然后通过免密传输安装配置软件
for i in {102,103,104};
do
scp /opt/elasticsearch-5.6.10.tar.gz root@192.168.5.$i:/opt/
ssh root@192.168.5.$i "tar -zxf /opt/elasticsearch-5.6.10.tar.gz -C /usr/local/ \
&& echo "创建elastic用户" \
&& adduser elastic \
&& echo "开始输入elastic用户密码,最少八位" \
&& passwd elastic \
&& echo "给elastic用户elasticsearch目录的授权" \
&& chown -R elastic:elastic /usr/local/elasticsearch-5.6.10/"
done
# 以下避免启动出现问题,需要在每台服务器root用户下进行以下设置
vim /etc/sysctl.conf
#加入
vm.max_map_count=655360
#然后使其生效
sysctl -p
# 修改文件描述符太低错误
vim /etc/security/limits.conf
# 加入
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
3、 配置elasticsearch环境变量
# 102机器创建ES数据日志存放目录
mkdir -p /var/lib/elasticsearch && chown -R elastic /var/lib/elasticsearch/
修改第一台机器102,es环境变量
进入配置文件目录:
cd /usr/local/elasticsearch-5.6.10/config
# 修改前先备份
cp /usr/local/elasticsearch-5.6.10/config/elasticsearch.yml /usr/local/elasticsearch-5.6.10/config/elasticsearch.yml.bak
# 编辑文件:
vi elasticsearch.yml
#内容配置如下:
# 集群名字自定义
cluster.name:elasticsearch
#节点名称
node.name:node-1
# 默认绑定的是["127.0.0.1", "[::1]"]回环地址,集群下要服务间通信,需绑定一个ipv4或ipv6地址
network.host:192.168.1.100
# 对外服务的http 端口, 默认 9200-9300 。可以为它指定一个值或一个区间,当为区间时会取用区间第一个可用的端口。
http.port:9200
#### =========== 节点发现配置 ES中默认采用的节点发现方式是 zen(基于组播(多播)、单播)。在应用于生产前有两个重要参数需配置=============
# discovery.zen.ping.unicast.hosts: ["host1","host2:port","host3[portX-portY]"]
单播模式下,设置具有master资格的节点列表,新加入的节点向这个列表中的节点发送请求来加入集群。
discovery.zen.ping.unicast.hosts:["192.168.1.103","192.168.1.104"]
# 这个参数控制的是,一个节点需要看到具有master资格的节点的最小数量,然后才能在集群中做操作。官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量
discovery.zen.minimum_master_nodes: 2
# ES数据存储目录
path.data: /var/lib/elasticsearc
# ES日志存储目录
path.logs: /var/lib/elasticsearch
4、在102机器上elasticsearch.yml文件分发到其他节点
#需要输入服务器密码
for i in {103,104};
do
ssh root@192.168.5.$i "echo 备份192.168.5.$i >> elasticsearch.yml文件 \ && cp /usr/local/elasticsearch-5.6.10/config/elasticsearch.yml /usr/local/elasticsearch-5.6.10/config/elasticsearch.yml.bak \ && echo 创建ES数据日志存放目录 \ && mkdir -p /var/lib/elasticsearch && chown -R elastic /var/lib/elasticsearch/"
scp /usr/local/elasticsearch-5.6.10/config/elasticsearch.yml root@192.168.5.$i:/usr/local/elasticsearch-5.6.10/config/elasticsearch.yml
done
5、配置103,104机器elasticsearch.yml文件
1、103机器elasticsearch.yml
#节点名称
node.name:node-2
# 默认绑定的是["127.0.0.1", "[::1]"]回环地址,集群下要服务间通信,需绑定一个ipv4或ipv6地址
network.host:192.168.5.103
2、104机器elasticsearch.yml
#节点名称
node.name:node-3
# 默认绑定的是["127.0.0.1", "[::1]"]回环地址,集群下要服务间通信,需绑定一个ipv4或ipv6地址
network.host:192.168.5.104
6、修改ES堆内存
内存不够用,默认es配置使用1G堆内存,如果的你的虚拟机没有这么大的内存,请在config/jvm.options中调整。
# 堆内存设置,根据具体情况来(生产环境中一定要在jvm.options中调大它的jvm内存)
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms2g
-Xmx2g
7、其他参数配置(这一步根据情况来进行配置)
<< elasticsearch.yml>>
transport.tcp.compress: false
是否压缩tcp传输的数据,默认false
http.cors.enabled: true
是否使用http协议对外提供服务,默认true
http.max_content_length: 100mb
http传输内容的最大容量,默认100mb
node.master: true
指定该节点是否可以作为master节点,默认是true。ES集群默认是以第一个节点为master,如果该节点出故障就会重新选举master。
node.data: true
该节点是否存索引数据,默认true。
discover.zen.ping.timeout: 3s
设置集群中自动发现其他节点时ping连接超时时长,默认为3秒。在网络环境较差的情况下,增加这个值,会增加节点等待响应的时间,从一定程度上会减少误判。
discovery.zen.ping.multicast.enabled: false
是否启用多播来发现节点。
# 生产环境中指定当发生OOM异常时,heap的dump path,好分析问题。在jvm.options中配置:
-XX:HeapDumpPath=/var/lib/elasticsearch
还有重要的操作系统配置,请参照:
https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config.html
8、ES启动关闭后台运行ES
1. 切换至elasticsearch目录,并以elastic用户运行
cd /usr/local/elasticsearch-6.4.0/
su elastic
./bin/elasticsearch
# 后台运行es
./bin/elasticsearch -d
2.关闭ES
非后台运行的:ctrl + c
后台运行的:kill -9 $(ps aux|grep elasticsearch | grep -v grep | awk '{print $2}')
9、集群环境校验
- 查看节点信息:http://192.168.5.102:9200/
- 查看集群状态:http://192.168.5.102:9200/_cluster/health?pretty
- 查看节点列表:http://192.168.5.102:9200/_cat/nodes?v
10、其他ES启动问题
问题一:max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
解决:修改切换到root用户修改配置limits.conf 添加下面两行
命令:vi /etc/security/limits.conf
* hard nofile 65536
* soft nofile 65536
问题二:max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
解决:切换到root用户,进入limits.d目录下修改配置文件。
vi /etc/security/limits.d/90-nproc.conf
修改如下内容:
* soft nproc 1024
#修改为
* soft nproc 2048
问题三:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解决:切换到root用户修改配置sysctl.conf
vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并执行命令:
sysctl -p
切换到es的用户。
然后,重新启动elasticsearch,即可启动成功。