搭建环境
本次实验准备了6台Centos7的虚拟机来搭建ES集群环境,虚拟机内网IP如下:
master1 192.168.10.55
master2 192.168.10.108
data1 192.168.10.59
data2 192.168.10.60
client 192.168.10.54
ingest 192.168.10.61
ES中节点分为四种类型:
1) 主节点 master节点
主要职责就是负责集群管理,如索引创建或删除,发现集群其它节点并确定那些分片分配到相应的节点,默认情况下任何一个节点都有可能被选举为master节点,但是索引数据何搜索查询等操作会占用大量CPU、内存和IO资源,为了保证集群的稳定,通常分离主节点和数据节点;
node.master: true
node.data: false
node.ingest: false
2)数据节点 data节点
数据节点主要是存储索引数据,主要对文档进行增删改查操作,数据节点对CPU、内存和IO要求较高;
node.master: false
node.data: true
node.ingest: false
3)负载均衡节点 client节点
当一个节点既不配置为主节点也不配置为数据节点时,该节点只能处理路由请求,处理搜索,分发索引操作;
node.master: false
node.data: false
node.ingest: false
4) 预处理节点 ingest节点
预处理节点在索引数据之前可以对数据做预处理,默认所有的节点都支持ingest操作,但是也可以专门设置一个Ingest节点;
node.master: false
node.data: false
node.ingest: true
1.环境准备
Elasticsearch是基于Lucene的,Lucene是基于Java,所以每一台机器上需要安装java环境,这里我们安装的java1.8,安装java不再累述; 下载Elasticsearch安装包:下载地址
2.安装ES
Elasticsearch需要使用非root用户来运行,所以我们使用普通用户来操作,首先我们将安装包保存在/data
目录下。该目录属主和属组均为普通用户。
2.1 解压并修改配置文件(这里以master1为例其它类似,其它的对应上面的node.*:bool来配置)
[xidian@localhost data]$ ls
elasticsearch-6.5.4 elasticsearch-6.5.4.tar.gz elasticsearch-analysis-ik-6.5.4.zip
[xidian@localhost data]$ cd elasticsearch-6.5.4/
[xidian@localhost elasticsearch-6.5.4]$
编辑/config/elasticsearch.yml
文件
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: es-cluster 集群名字,集群中所有的节点中该名称要相同
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: node-master1 节点名称:集群中每一个节点名字要不相同
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
node.master: true 该节点可以被选为master
node.data: false 该节点不做数据节点
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0 允许其它机器访问
#
# Set a custom port for HTTP:
#
#http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
discovery.zen.ping.unicast.hosts: ["192.168.10.55", "192.168.10.108", "192.168.10.54", "192.168.10.59", "192.168.10.60",
"192.168.10.61"] 集群中其它节点IP地址
#
# Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1):
#
discovery.zen.minimum_master_nodes: 2 配置集群最少主节点数目,注意这里计算公式为(可以被选举为master节点数)/2+1 本次实验中有两个可以被选举为master 所以这里设置为(2/2+1=2)
#
# For more information, consult the zen discovery module documentation.
2.2 启动ES
在前台启动ES:
[xidian@localhost elasticsearch-6.5.4]$ ./bin/elasticsearch
2.3 可能会报错
可能会报如下错:
1、max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
2、max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]
2.4.解决方法
第二个错误: 切换到root用户,编辑 /etc/sysctl.conf文件并在文件末尾追加如下内容
[root@localhost elasticsearch-6.5.4]# vi /etc/sysctl.conf
vm.max_map_count=262144 这里的数据根据ES报错来决定
sysctl -p
第一个错误: 切换到root用户,并编辑/etc/security/limits.conf文件,在文件末尾追加下面内容后重启机器
[xidian@localhost elasticsearch-6.5.4]$ ulimit -n 查看当前用户最大文件描述符数量
4096
[xidian@localhost elasticsearch-6.5.4]$ su
[root@localhost elasticsearch-6.5.4]# vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
3. 查看集群状态
http://192.168.10.54:9200/_cluster/state?pretty
{
"cluster_name": "es-cluster",
"compressed_size_in_bytes": 10518,
"cluster_uuid": "dLW0ST1FQzKh4B6j5BEkrw",
"version": 9,
"state_uuid": "inyNT61mS2iagLICITEIpQ",
"master_node": "ce9CvxUyQ0Gqhzb7dRXB9g",
"blocks": {},
"nodes": {
"rKqY1PCDTBK4qfm76w-2hA": {
"name": "node-data2",
"ephemeral_id": "e_RrOvOfQg25xSgxP5a9oQ",
"transport_address": "192.168.10.60:9300",
"attributes": {
"ml.machine_memory": "3974705152",
"ml.max_open_jobs": "20",
"xpack.installed": "true",
"ml.enabled": "true"
}
},
"iq14LHD0R4yAtDIyVbJ13Q": {
"name": "node-data1",
"ephemeral_id": "w0baIUfcSEKhDhlGhpQ4KQ",
"transport_address": "192.168.10.59:9300",
"attributes": {
"ml.machine_memory": "3974705152",
"ml.max_open_jobs": "20",
"xpack.installed": "true",
"ml.enabled": "true"
}
},
"Pl_ar_PDSTiOiJP4-pSsRA": {
"name": "node-ingest",
"ephemeral_id": "frHNQNPETMO3k1mNrmtpDA",
"transport_address": "192.168.10.61:9300",
"attributes": {
"ml.machine_memory": "3974705152",
"ml.max_open_jobs": "20",
"xpack.installed": "true",
"ml.enabled": "true"
}
},
"xv2bWTIuToyufkbnyUSq3A": {
"name": "node-client",
"ephemeral_id": "6zh4NTq5RPe6_wScCoM0TQ",
"transport_address": "192.168.10.54:9300",
"attributes": {
"ml.machine_memory": "3974705152",
"ml.max_open_jobs": "20",
"xpack.installed": "true",
"ml.enabled": "true"
}
},
"ce9CvxUyQ0Gqhzb7dRXB9g": {
"name": "node-master2",
"ephemeral_id": "NcP-06JwSgGdRdAcrc15Cw",
"transport_address": "192.168.10.108:9300",
"attributes": {
"ml.machine_memory": "3974705152",
"ml.max_open_jobs": "20",
"xpack.installed": "true",
"ml.enabled": "true"
}
},
"z1A28w3ZTgeDLafAZwN47A": {
"name": "node-master1",
"ephemeral_id": "l4d4x536Qd22RPuGUGVD2g",
"transport_address": "192.168.10.55:9300",
"attributes": {
"ml.machine_memory": "3974705152",
"ml.max_open_jobs": "20",
"xpack.installed": "true",
"ml.enabled": "true"
}
}
},
...
4.设置开机自启
新建文件elasticsearch
#!/bin/bash
#
#chkconfig: 345 63 37
#description: elasticsearch
#processname: elasticsearch-6.5.4
export ES_HOME=/data/elasticsearch-6.5.4 # 这里是我es安装目录
case $1 in
start)
su xidian<<! # 这里是我启动es的用户名
cd $ES_HOME
./bin/elasticsearch -d -p pid
exit
!
echo "elasticsearch is started"
;;
stop)
pid=`cat $ES_HOME/pid`
kill -9 $pid
echo "elasticsearch is stopped"
;;
restart)
pid=`cat $ES_HOME/pid`
kill -9 $pid
echo "elasticsearch is stopped"
sleep 1
su xidian<<! # 这里是我启动es的用户名
cd $ES_HOME
./bin/elasticsearch -d -p pid
exit
!
echo "elasticsearch is started"
;;
\*)
echo "start|stop|restart"
;;
esac
exit 0
将该文件拷贝到/etc/init.d/
目录下并赋予权限
chmod 777 /etc/init.d/elasticsearch
添加和删除服务并设置开机启动方式
chkconfig --add elasticsearch
chkconfig --del elasticsearch
启动和关闭服务
service elasticsearch start
service elasticsearch stop
service elasticsearch restart
设置服务启动方式
chkconfig elasticsearch on
chkconfig elasticsearch off
查看chkconfig是否注册了我们的服务 sudo chkconfig –list
elasticsearch 0:关 1:开 2:开 3:开 4:开 5:开 6:关
mongod 0:关 1:关 2:关 3:开 4:关 5:开 6:关
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
这里0-6的含义为:
0表示:表示关机
1表示:单用户模式
2表示:无网络连接的多用户命令行模式
3表示:有网络连接的多用户命令行模式
4表示:不可用
5表示:带图形界面的多用户模式
6表示:重新启动
然后重启我们的机器验证ES服务是否开机自启。