linux环境 [ubuntu、麒麟等系统] 安装配置Elasticsearch分布式存储集群及配置

  • 简介及应用场景
  • 一、使用离线rpm方式安装
  • Elasticsearch用户及目录权限样式
  • 二、使用zip压缩包方式安装
  • Elasticsearch用户及目录权限样式
  • 三、集群配置信息,如需要单机配置以下 [192.168.80.130] 对应配置即可
  • (1)master [192.168.80.130] elasticsearch.yml
  • (2)node [192.168.80.131] elasticsearch.yml
  • (3)node [192.168.80.132] elasticsearch.yml
  • 四、启动Elasticsearch
  • 五、Elasticearch解释
  • 六、Elasticsearch集群是如何工作的?
  • 七、常见错误
  • 异常1
  • 异常2
  • 异常3


简介及应用场景

  1. Elasticsearch (简称ES)是一个基于Lucene构建的开源、分布式、RESTful 接口全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以百计的服务器存储以及处理PB级的数据。它可以在很短的时间内在存储、搜索和分析大量的数据。 它通常作为具有复杂搜索场景情况下的核心发动机。ES是由java语言编写的。
  2. 应用场景,大型分布式日志分析系统 ELK elasticsearch(存储日志)+logstash(收集日志)+kibana(展示数据)。
    大型电商商品搜索系统、网盘搜索引擎等,主要用于大数据收集。

一、使用离线rpm方式安装

上传zip包到linux安装大家都会,我这里就不多说了;
elasticsearch简称es服务,es服务安装需要jdk环境,需要jdk1.8及以上,我这里已经装好jdk;
我这里使用的是离线安装,上传的rpm源安装,把rpm源上传到服务器,使用rpm -ivh rpm文件名称,如下图:

麒麟arm系统安装docker vsftpd镜像_ubuntu

安装顺序如下:
先安装 elasticsearch-lib-xxx.rpm
再安装 elasticsearch-systemd-xxx.rpm
最后安装 elasticsearch-5.6.8-1.x86_64.rpm

大部分操作系统rpm安装好后,目录结构如下图所示:

type

path

home

/usr/share/elasticsearch/

bin

/usr/share/elasticsearch/bin/

config(file)

/etc/elasticsearch/

config(env)

/etc/sysconfig/elasticsearch

data

/var/lib/elasticsearch/

logs

/var/log/elasticsearch/

plugins

/usr/share/elasticsearch/plugins

Elasticsearch用户及目录权限样式

使用rpm安装的es服务,已自动创建 用户:elasticsearch 用户组:elasticsearch 我们就不用重新创建用户了!
目录权限样式如下图

麒麟arm系统安装docker vsftpd镜像_linux_02

二、使用zip压缩包方式安装

直接上传zip包到想要安装的目录,直接解压后即可,解压目录如下:

麒麟arm系统安装docker vsftpd镜像_运维_03

Elasticsearch用户及目录权限样式

使用zip方式安装需要创建es用户,因为es服务不能使用root用户启动,这是出于系统安全考虑设置的条件。
由于es服务可以接收用户输入的脚本并且执行,为了系统安全考虑,建议创建一个单独的用户用来运行Elasticsearch,如下图所示,创建es用户组和es用户并授权解压后的文件夹:
创建用户组:groupadd es
创建用户并把该用户加入刚创建的组内:useradd es -g es -p es
将文件夹授权给刚创建的用户:chown -R es:es /usr/local/elasticsearch-5.6.8

麒麟arm系统安装docker vsftpd镜像_centos_04

三、集群配置信息,如需要单机配置以下 [192.168.80.130] 对应配置即可

(1)master [192.168.80.130] elasticsearch.yml

# 集群名称 所有节点要相同
cluster.name: my-elasticsearch
# 本节点名称,单机版可不设置默认即可
node.name: node-130
------------------NetWork----------------------
# 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。 
network.bind_host: 0.0.0.0
# 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。
network.publish_host: 0.0.0.0
# 这个参数是用来同时设置bind_host和publish_host上面两个参数,默认默认为0.0.0.0
network.host: 0.0.0.0
# 对外访问的http端口,默认9200
http.port: 9200
# head插件设置,单机版可不设置默认即可
http.cors.enabled: true
#设置可以访问的ip 这里全部设置通过,单机版可不设置默认即可
http.cors.allow-origin: "*"
#作为master节点,单机版可不设置默认即可
node.master: true
#是否存储数据,单机版可不设置默认即可
node.data: false
#设置节点 访问的地址 设置master所在机器的ip,单机版可不设置默认即可
discovery.zen.ping.unicast.hosts: ["192.168.80.130"]

(2)node [192.168.80.131] elasticsearch.yml

# 集群名称 所有节点要相同
cluster.name: my-elasticsearch
# 本节点名称
node.name: node-131
------------------NetWork----------------------
# 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。 
network.bind_host: 0.0.0.0
# 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。
network.publish_host: 0.0.0.0
# 这个参数是用来同时设置bind_host和publish_host上面两个参数,默认默认为0.0.0.0
network.host: 0.0.0.0
# 对外访问的http端口,默认9200
http.port: 9200
# head插件设置
http.cors.enabled: true
#设置可以访问的ip 这里全部设置通过
http.cors.allow-origin: "*"
#作为master节点
node.master: false
#是否存储数据
node.data: true
#设置节点 访问的地址 设置master所在机器的ip
discovery.zen.ping.unicast.hosts: ["192.168.80.130"]

(3)node [192.168.80.132] elasticsearch.yml

# 集群名称 所有节点要相同
cluster.name: my-elasticsearch
# 本节点名称
node.name: node-132
------------------NetWork----------------------
# 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。 
network.bind_host: 0.0.0.0
# 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。
network.publish_host: 0.0.0.0
# 这个参数是用来同时设置bind_host和publish_host上面两个参数,默认默认为0.0.0.0
network.host: 0.0.0.0
# 对外访问的http端口,默认9200
http.port: 9200
# head插件设置
http.cors.enabled: true
#设置可以访问的ip 这里全部设置通过
http.cors.allow-origin: "*"
#作为master节点
node.master: false
#是否存储数据
node.data: true
#设置节点 访问的地址 设置master所在机器的ip
discovery.zen.ping.unicast.hosts: ["192.168.80.130"]

四、启动Elasticsearch

进入master、node服务器进行相应的启动与停止

1.使用rpm安装的启动方式:
#使用root用户设置elasticsearch开启自启
systemctl enable elasticsearch.service
#使用root用户启动elasticsearch
systemctl start elasticsearch.service
#使用root用户查看启动状态、查看启动进程
systemctl status elasticsearch.service
#使用root用户停止服务
systemctl stop elasticsearch.service
ps -ef|grep elasticsearch
# 或者查看es服务启动日志文件
cd /usr/share/elasticsearch/logs
tail -f elasticsearch.log

2.使用zip压缩包安装的启动方式:
#切换为zip解压后创建的es用户启动
su es
#使用es用户,进入解压后的目录bin文件夹,使用./或者sh后台启动es服务如下:-d代表后台启动
cd /usr/local/elasticsearch-5.6.8/bin
./elasticsearch -d
# 查看es服务进程
ps -ef|grep elasticsearch
# 停止es服务进程
kill -9 进程号
# 或者查看es服务日志文件
cd /usr/local/elasticsearch-5.6.8/logs
tail -f elasticsearch.log

五、Elasticearch解释

Elasticsearch集群中有的节点一般有三种角色:master node、data node和client node。

  1. master node——master节点点主要用于元数据(metadata)的处理,比如索引的新增、删除、分片分配等。
  2. client node——client 节点起到路由请求的作用,实际上可以看做负载均衡器。
  3. data node——data 节点上保存了数据分片。它负责数据相关操作,比如分片的CRUD,以及搜索和整合操作。这些操作都比较消耗 CPU、内存和 I/O 资源;
定义发现的节点:
注意,分布式系统整个集群节点个数N要为奇数个!!!
discovery.zen.ping.unicast.hosts:["192.168.80.130:9300", "192.168.80.131:9300", "192.168.80.132:9300"]
是否参与master选举和是否存储数据
#node.master: true
#node.data: true
分片数和副本数
#index.number_of_shards: 5
#index.number_of_replicas: 1

六、Elasticsearch集群是如何工作的?

elasticsearch集群一旦建立起来以后,会选举出一个master,其他都为slave节点。
但是具体操作的时候,每个节点都提供写和读的操作。就是说,你不论往哪个节点中做写操作,这个数据也会分配到集群上的所有节点中。

七、常见错误

异常1

max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

解决方案

# 编辑limits.conf文件,添加以下两行即可解决
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

异常2

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

解决方案

# 编辑limits.conf文件,添加以下两行即可解决
vim /etc/security/limits.conf
* soft nproc  4096
* hard nproc  4096

异常3

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决方案

# 编辑sysctl.conf文件,添加以下一行即可解决,注意,这里配置完之后需要重启一下linux,否则不一定起效果
vim /etc/sysctl.conf
vm.max_map_count=262144