在项目部署过程中,我们可能使用到es集群,目前网上在搭建es集群的时候有很种,配置文件的参数也不同,导致部署过程遇到很多问题,因此写下了这篇博客。在之前有关es的博客中,提到过,自es7.0之后,由于种种原因,es的变化很大,这也导致了在部署上,es7与之前的版本在部署上的不同,这也就是为什么目前es集群部署方式有很多种的原因。所以这个博客的中重点是es7中集群的搭建,不适用于其他版本(关键)。
Centos7.2 Elasticsearch7.1 三个主节点的配置(10.10.10.1 10.10.10,2 10.10.10.3)
1、首先创建es的用户,这一点与之前版本的相同,因为es启动时,不允许使用root用户启动。创建用户后,并切换到新添加的用户下进行后续操作
# 添加用户组
groupadd es
# 添加用户
useradd -m -g es es
# 配置密码
passwd es
#增加sudo权限(在最后添加 es ALL=(ALL) NOPASSWD:ALL )
visudo
#切换用户
su es
2、下载es,这里可以使用自己的安装包(如果自己封装了插件的话),或者从官网上进行下载,如果使用7.1的话可以直接使用下面的方式进行下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.1-linux-x86_64.tar.gz
3、将es压缩包进行解压
tar xvf elasticsearch-7.1.1-linux-x86_64.tar.gz /usr/data/elasticsearch
4、配置(这个配置文件需要同步到10.10.10.1 10.10.10,2 10.10.10.3三个主机上)
4.1 修改es的配置文件
vi /usr/data/elasticsearch/config/elasticsearch.yml
# 增加以下内容
# 集群名称必须相同
cluster.name: es-test
node.name: node-3
# 当前节点是否可以被选举为master节点,是:true、否:false
node.master: true
# 当前节点是否用于存储数据,是:true、否:false
node.data: true
# 数据和日志存储的地方,建议与es的安装目录区分,方式es删除后数据的丢失
path.data: /data/es/data
path.logs: /data/es/logs
# 需求锁住物理内存,是:true、否:false
bootstrap.memory_lock: false
# SecComp检测,是:true、否:false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
# 有些时候并不需要此配置,我的没有设置
network.publish_host: 10.240.0.8
# 主机访问的端口号
http.port: 9200
# es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
# es7之后,不需要discover.zen.ping.unicast.hosts这个参数,用discovery.seed_hosts替换
discovery.seed_hosts: ["10.10.10.1","10.10.10.2","10.10.10.3"]
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes:["10.10.10.1","10.10.10.2","10.10.10.3"]
# 是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
# "*" 表示支持所有域名
http.cors.allow-origin: "*"
4.2 修改 jvm.options
vim config/jvm.options
# 按需修改如下内存大小即可
-Xms4g
-Xmx4g
4.3 创建数据和日志目录(也就是4.1中配置的路径)
mkdir -p /data/es/data
mkdir -p /data/es/logs
4.4 在三台机器上分别启动es
./usr/data/elasticsearch/bin/elasticsearch
# 后台启动的话,使用下面的这个命令
./usr/data/elasticsearch/bin/elasticsearch -d
4.5 检查集群是否部署成功,可参考 《ES7(ElasticSearch7) 操作集群基础》
# 检查集群的健康状态
GET /_cat/health?v
# 集群中所有的节点
GET /_cat/nodes?v
1、在新版7.0的es中,对es的集群发现系统做了调整,不再有discovery.zen.minimum_master_nodes这个控制集群脑裂的配置,转而由集群自主控制,并且新版在启动一个新的集群的时候需要有cluster.initial_master_nodes初始化集群列表。
2、在es7中,discovery.zen.* 开头的参数,有些已经失效
1、每个进程最大同时打开文件数太小
vim /etc/security/limits.conf
# 增加如下:
# elsearch为用户名
elsearch soft nofile 65536
elsearch hard nofile 65536
# 保存之后,退出当前用户重新登录生效,可用如下命令查看是否修改成功
ulimit -Hn
ulimit -Sn
2、申请锁定内存失败
vim config/elasticsearch.yml
# 修改,不锁定内存
bootstrap.memory_lock: false
3、 最大虚拟内存太小
vim /etc/sysctl.conf
# 增加如下:
vm.max_map_count=262144
# 修改完之后,执行如下命令生效
sysctl -p
4、 因为Centos6不支持SecComp,而ES5.2.0默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动
vim config/elasticsearch.yml
设置为false
bootstrap.system_call_filter: false
5、 最大线程数太小
vim /etc/security/limits.conf
# 增加如下:
# elsearch为用户名
elsearch soft nproc 4096
elsearch hard nproc 4096
# 保存之后,退出当前用户重新登录生效,可用如下命令查看是否修改成功
ulimit -Hu
ulimit -Su
6、 network.host 监听 0.0.0.0 之后无法组成集群
解决:
vim config/elasticsearch.yml
# 增加如下配置,用于集群内各机器间通信:
network.publish_host: 10.240.0.8
1、ElasticSearch 7.1.1 集群环境搭建
2、Elasticsearch 7.0.0 集群搭建
3、ES7(ElasticSearch7) 操作集群基础
4、7.0.0 elasticsearch 集群部署踩坑记