博客
关于我
Centos7安装elastic 6.x(6.8.8)集群(亲测可行)
阅读量:408 次
发布时间:2019-03-05

本文共 4082 字,大约阅读时间需要 13 分钟。

安装elastic集群

注意:别选太高版本的es,比如7.6.2 就需要jdk11了,我们选一个jdk8可以支持的版本。本文选择6.8.8,貌似这已经是最后一个支持jdk8的了

我们这里仅仅安装es,不考虑elk

下载安装包

一般要下载历史的版本,才能支持jdk8,官方会说明要求的jdk版本

如何查找到历史的版本:

找到 past release 下载历史的版本

在这里插入图片描述

正式开始安装集群

总体的教程参考官方文档即可:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/zip-targz.html

我们预先有了node1、node2、node3三台centos7的虚拟机,打算在这三个节点中搭建集群。首先是在node1先搭建单个节点试下

搭建es单节点

先安装一个单节点的es,并能单机跑起来,之后再考虑集群

  • 先关闭麻烦的防火墙,三个节点都关闭
  • 上传 elasticsearch-6.8.8.tar.gz 到node1
  • 解压到 /usr/local/es/
  • 配置环境变量,方便执行命令(可选)
# esexport ES_HOME=/usr/local/es/elasticsearch-6.8.8export PATH=$PATH:$ES_HOME/bin
  • 创建 es 用户(因为不允许用root启动es,用户名叫什么不要紧非root即可)
useradd espasswd es输入密码
  • 将 elasticsearch-6.8.8 目录的所有者改成es用户,否则启动时会没权限而失败(此目录本是root用户解压出来的)
cd /usr/local/es/elasticsearch-6.8.8chown -R es:es elasticsearch-6.8.8
  • 切换到es用户并启动

如不小心创建的用户名不喜欢,强迫症的话可以删除 (userdel -r 用户名(连home目录等删掉))

su - es#查看是否加到环境变量里头which elasticsearch#启动elasticsearch

如果没有上一步,会报没有权限的错误

Exception in thread "main" java.nio.file.AccessDeniedException: /usr/local/es/elasticsearch-6.8.8/config/jvm.options
  • 连接
    另外开一个shell窗口(当然另外开了,刚刚你是前台启动的模式,已经占用了窗口了)

运行时看到如下的信息,就是表示起来了

[root@node1 ~]# curl http://localhost:9200{  "name" : "G92wP23",  "cluster_name" : "elasticsearch",  "cluster_uuid" : "uz2s38YkQK-Tgh5JcP9HZw",  "version" : {    "number" : "6.8.8",    "build_flavor" : "default",    "build_type" : "tar",    "build_hash" : "2f4c224",    "build_date" : "2020-03-18T23:22:18.622755Z",    "build_snapshot" : false,    "lucene_version" : "7.7.2",    "minimum_wire_compatibility_version" : "5.6.0",    "minimum_index_compatibility_version" : "5.0.0"  },  "tagline" : "You Know, for Search"}

至此,单节点启动成功了。但是,仍然推荐停掉单节点,做如下改进

改进

上述不能远程连接,改一下配置文件

cd /usr/local/es/elasticsearch-6.8.8/vim config/elasticsearch.yml搜索network.host,可以看到是注释掉的(搜不要也不要紧,这步的目的只是不想配置乱写在某个位置)在下面增加 `network.host: 0.0.0.0`  (0.0.0.0就表示不限制连接者的IP)

不知道为什么,改后启动就出错了,日志提示ERROR。还原刚刚的配置就没问题(在启动过程也有这个信息提示但仅仅是WARN)。如下

ERROR: [2] bootstrap checks failed[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535][2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

第一问题解决

如下操作全部用root用户vim /etc/security/limits.conf,增加如下两行内容(**数值参考日志提示的数字**)* soft nofile 65535* hard nofile 65535

第二个问题解决

如下操作全部用root用户vim /etc/sysctl.conf,增加如下一行代码(**数值参考日志提示的数字**)vm.max_map_count=262144#执行命令使得生效(一定要执行!!!)sysctl -p

补充问题,有时候还可能报线程问题,我们顺便一起加上

max number of threads [3818] for user [es] is too low, increase to at least [4096]

如下操作全部用root用户vim etc/security/limits.conf,在末尾增加(**数值参考日志提示的数字**)* soft nproc 4096* hard nproc 4096

修改后叉掉shell的tab,重新登录,这样才能生效

用chrome的ElasticSearch Head的插件即可连接(本地测试可以,也不知道这插件会不会偷偷发送密码)

补充问题

1、如何查看我启动成功了?

除了上述可以连接,还可以jps发现Elasticsearch的进程
2、如何关闭es进程?

  • ctrl+c关闭(适用于前台启动)
  • jps查看进程id,killkill -9

3、如何后台启动?

elasticsearch -d
(启动后jps可看到进程,但是访问http://node1:9200/的话需要等一等,可能还没那么快可以完全起来)

4、如何要求连接使用密码?

(留到后续教程)

搭建es集群

我们先停掉单节点

  • 在node2和node3建es用户(参考上面章节)
  • 为了避免麻烦,将node2和node3也一起更新对linux文件描述符、线程数、内存等的配置,详见上述启动报错的章节
  • 进一步修改配置文件
cd vim config/elasticsearch.yml#必填,三个节点都用一样的值cluster.name: my-es-cluster#必填,三个节点的值各不相同,自己取个有意义的节点的名字node.name: node1#必填,支持ip或域名(三个节点的值一样)discovery.zen.ping.unicast.hosts: ["node1", "node2", "node3"]#非必须,但是为了能远程访问,请添加。三个节点的值一样network.host: 0.0.0.0#可能不需要官网没提到,但是很多博客提到了要改(三个节点的值一样)discovery.zen.minimum_master_nodes: 2#可能不需要官网没提到,但是很多博客提到了要改(三个节点的值一样)gateway.recover_after_nodes: 3
  • 将node1的es目录拷贝到node2和node3
cd /usr/localscp -r es root@node2:@PWDscp -r es root@node3:@PWD

千万要注意:拷贝过去之后要把node2和node3机器上的 elasticsearch-6.8.8 下的data和logs目录 清理掉! 如果还启动不了,建议把node1的data和logs也可以一起清理掉。如果不清理,上述单节点启动时自动创建的data和logs目录会在scp拷贝到node2和node3后产生干扰,导致各节点不能成为一个集群整体(因为data下有数据干扰)。参考:https://www.cnblogs.com/lingblog/p/11924616.html

  • 将node2和node3上的es目录授权给es用户,分别执行(用root来执行)
cd /usr/local/eschown -R es:es elasticsearch-6.8.8

启动es的时要注意,如果曾经使用root启动,即使root启动失败,也会产生root的日志文件,导致用es用户启动时没有权限追加日志到root的日志文件,解决办法是重新执行上述命令

  • 逐个节点启动es

    elasticsearch -d
    (如果启动过程有问题,可以直接elasticsearch 让日志打印在前台,容易排查)

  • 检查是否集群成功

* 在node1或node2或node3随便一台机器上执行`curl http://node1:9200/_cat/nodes?v`  (将集群节点列出)* 可以使用chrome的es插件连上,连任何一个节点即可,例如http://node1:9200,连上后可看到是集群了
你可能感兴趣的文章
multiprocessing.pool.map 和带有两个参数的函数
查看>>
MYSQL CONCAT函数
查看>>
multiprocessing.Pool:map_async 和 imap 有什么区别?
查看>>
MySQL Connector/Net 句柄泄露
查看>>
multiprocessor(中)
查看>>
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>
MySQL CRUD 数据表基础操作实战
查看>>
multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
查看>>
mysql csv import meets charset
查看>>
multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
查看>>
MySQL DBA 数据库优化策略
查看>>
multi_index_container
查看>>
MySQL DBA 进阶知识详解
查看>>
Mura CMS processAsyncObject SQL注入漏洞复现(CVE-2024-32640)
查看>>
Mysql DBA 高级运维学习之路-DQL语句之select知识讲解
查看>>
mysql deadlock found when trying to get lock暴力解决
查看>>
MuseTalk如何生成高质量视频(使用技巧)
查看>>
mutiplemap 总结
查看>>
MySQL DELETE 表别名问题
查看>>