博客
关于我
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,连上后可看到是集群了
你可能感兴趣的文章
mysql 使用sql文件恢复数据库
查看>>
mysql 修改默认字符集为utf8
查看>>
Mysql 共享锁
查看>>
MySQL 内核深度优化
查看>>
mysql 内连接、自然连接、外连接的区别
查看>>
mysql 写入慢优化
查看>>
mysql 分组统计SQL语句
查看>>
Mysql 分页
查看>>
Mysql 分页语句 Limit原理
查看>>
MySql 创建函数 Error Code : 1418
查看>>
MySQL 创建新用户及授予权限的完整流程
查看>>
mysql 创建表,不能包含关键字values 以及 表id自增问题
查看>>
mysql 删除日志文件详解
查看>>
mysql 判断表字段是否存在,然后修改
查看>>
MySQL 到底能不能放到 Docker 里跑?
查看>>
mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
查看>>
MySQL 加锁处理分析
查看>>
mysql 协议的退出命令包及解析
查看>>
mysql 参数 innodb_flush_log_at_trx_commit
查看>>
mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
查看>>