ElasticSearch集群部署

作者:dominating

1、准备

集群规划

ip 节点
192.168.255.143 node-1
192.168.255.142 node-2
192.168.255.141 node-3

下载jdk-8u161-linux-x64.tar.gz,ElasticSearch 6依赖1.8.0以上的java环境
下载ElasticSearch,elasticsearch-6.1.2.tar.gz(https://www.elastic.co/downloads/elasticsearch)

配置JAVA环境变量
解压jdk-8u161-linux-x64.tar.gz,配置环境变量
vim /etc/profile

export JAVA_HOME=/opt/jdk1.8.0_161
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

添加之后保存,退出
source /etc/profile
检查是否生效
java -version
修改limit.conf
vim /etc/security/limit.conf 添加以下内容

* soft nofile 65536
* hard nofile 131072
* soft nproc 65536
* hard nproc 524288
* soft memlock unlimited
* hard memlock unlimited

修改sysctl.conf
vim/etc/sysctl.conf
在最后一行加入 vm.max_map_count=655360
运行命令sysctl -p 使之生效

2、配置节点

角色
master node:master节主要用于元数据(metadata)的处理,比如索引的新增、删除、分片分配等。

node.master=true

data node:data 节点上保存了数据分片。它负责数据相关操作,比如分片的 CRUD,以及搜索和整合操作。这些操作都比较消耗 CPU、内存和 I/O 资源;

node.master=false
node.data=true

client node:client 节点起到路由请求的作用,实际上可以看做负载均衡器( 对于没有很多请求的业务,client node可以不加)。

node.master=false
node.data=false

默认情况下,节点配置是同时作为一个主节点和一个数据节点。这是非常方便的小集群,但随着集群的发展,分离主节点和数据节点就是必要的
1、添加elasticsearch用户

groupadd elsearch
useradd elsearch -g elsearch -p elasticsearch

2、 切换用户到elsearch解压elasticsearch-6.1.2.tar.gz,另外两个节点也如此操作
3、 master节点配置文件elasticsearch.yml

vim opt/elasticsearch-6.1.2/config/elasticsearch.yml
# ---------------------------------- Cluster -------------------------------
# 簇名称,分布式部署,确保该名称唯一。
cluster.name: my-escluster
# ------------------------------------ Node --------------------------------
# 节点名称
node.name: node-1
#生产环境最好将master和data节点分开,即master为true时,data设置成false
node.master: true
node.data: true
# ------------------------------------ Paths--------------------------------
# 数据存储
path.data: /data/elasticsearch/data
path.logs: /data/logs/elasticsearch
# ------------------------------------ Memory-------------------------------
bootstrap.memory_lock: true
# ------------------------------------ Network------------------------------
# IP地址
network.host: 192.168.255.143
# 端口
http.port: 9200
# ------------------------------------ Discovery----------------------------
discovery.zen.ping.unicast.hosts: ["192.168.255.143", "192.168.255.142","192.168.255.141"]
#为防止脑裂,最少可工作的候选主节点个数为 (master节点数/2)+1
discovery.zen.minimum_master_nodes: 2
# ------------------------------------ Gateway------------------------------
gateway.recover_after_nodes: 3
gateway.recover_after_time: 5m

4、 拷贝到节点2,候选主节点,修改节点名称、信息(只列举不一样的配置)

node.name: node-2
node.master: true
node.data: false
network.host: 192.168.255.141

5、拷贝到节点3,data节点,修改节点名称、信息(只列举不一样的配置)

node.name: node-3
node.master: false
node.data: true
network.host: 192.168.255.142

3、启动集群

1、 运行三个节点(顺序无关),必须得用普通用户启动,ElasticSearch无法使用root用户启动
进入pt/elasticsearch-6.1.2/bin目录下,运行./ elasticsearch或者./ elasticsearch -d(守护进程运行)
2、 测试是否成功
查看集群健康值

crul ‘http://192.168.255.143:9200/_cat/health?v’

或者浏览器访问http://192.168.255.143:9200/_cat/health?v,响应为以下内容则成功部署
这里写图片描述
查看集群节点
curl ‘192.168.255.143:9200/_cat/nodes?v’
这里写图片描述

4、常见错误

1、uncaught exception in thread [main] org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
不能使用root用户启动
2、 ERROR: bootstrap checks failed memory locking requested for elasticsearch process but memory is not locked
内存锁定失败,切换到root用户,修改limits.conf配置文件,vim /etc/security/limits.conf
添加* soft memlock unlimited * hard memlock unlimited
临时取消:ulimit -l unlimited
3、 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
最大虚拟内存太小,切换到root用户下,修改配置文件sysctl.conf
sudo vim /etc/sysctl.conf
添加下面配置: vm.max_map_count=655360
并执行命令: sysctl -p
4、 max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
调用的程序数量太少
按照上述所说的准备里修改limits.conf配置文件, 修改之后查询,ulimit -a 如果没有变化,需要修改/etc/pam.d/su,将session required pam_limits.so
注释打开,保存,重启就会生效
临时修改,ulimit -n 65536

猜你喜欢

转载自blog.csdn.net/supermapsupport/article/details/79542992