Skip to content

elasticsearch安装

官网:https://www.elastic.co/products/elasticsearchhttps://www.elastic.co/guide/en/elasticsearch/reference/5.6/index.html

一、下载地址

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.2.tar.gz后面的为版本号

linux:wget命令直接下载,然后解压

二、外网访问权限

config目录下面elasticsearch.yml,修改为 network.host: 0.0.0.0

三、修改启动所需内存

修改config目录下的jvm.option文件,修改jvm的最大内存和最小内存 -Xms128M -Xmx128M

四、配置es出现相关问题处理(阿里云、腾讯云,亚马逊云安装问题集合),修改完需要重新登录用户:

常见配置问题资料:https://www.jianshu.com/p/c5d6ec0f35e0

  1. 问题一

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error='Cannot allocate memory' (errno=12) There is insufficient memory for the Java Runtime Environment to continue. Native memory allocation (mmap) failed to map 986513408 bytes for committing reserved memory. An error report file with more information is saved as: /usr/local/software/temp/elasticsearch-6.2.2/hs_err_pid1912.log 解决:内存不够,购买阿里云的机器可以动态增加内存

  1. 问题二

[root@iZwz95j86y235aroi85ht0Z bin]# ./elasticsearch [2018-02-22T20:14:04,870][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main] org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.2.2.jar:6.2.2] at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.2.2.jar:6.2.2] 解决:用非root用户 添加用户:useradd -m 用户名 然后设置密码 passwd 用户名

  1. 问题三

./elasticsearch Exception in thread "main" java.nio.file.AccessDeniedException: /usr/local/software/temp/elasticsearch-6.2.2/config/jvm.options 解决:权限不够 chmod 777 -R 当前es目录

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

每个进程最大同时打开文件数太小,可通过下面2个命令查看当前数量,修改/etc/security/limits.conf文件,增加配置,(前面为启动的用户名) 命令:ulimit -Hn、ulimit -Sn

lcy               soft    nofile          65536
lcy               hard    nofile          65536
  1. max number of threads [3818] for user [es] is too low, increase to at least [4096]

问题同上,最大线程个数太低。修改配置文件/etc/security/limits.conf(和问题1是一个文件),增加配置,(前面为启动的用户名) ulimit -Hu、ulimit -Su

lcy               soft    nproc           4096
lcy               hard    nproc           4096
  1. max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

修改/etc/sysctl.conf文件,增加配置vm.max_map_count=262144

vi /etc/sysctl.conf
sysctl -p
  1. Exception in thread "main" java.nio.file.AccessDeniedException: /usr/local/elasticsearch/elasticsearch-6.2.2-1/config/jvm.options

elasticsearch用户没有该文件夹的权限,执行命令

chown -R es:es /usr/local/elasticsearch/

  1. ERROR: [1] bootstrap checks failed the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

修改以下集群配置,打开注释,es默认是集群启动,如果是单机默认也是一个节点的集群。如果是多个节点用,分割。

#集群名称,所有节点必须一致
cluster.name: my-application
#节点名称,节点不能重复
node.name: node-1
#主节点的名称
cluster.initial_master_nodes: ["node-1"]
#或者不使用上面的cluster配置使用以下配置
discovery.type: single-node
#节点地址
discovery.seed_hosts: ["127.0.0.1"]

五、启动命令

在bin目录下直接启动:./elasticsearch 但是会滞留,不能离开 后台启动:./elasticsearch -d 使用jps查看当前使用java的进程,查看是否后台启动

节点状态检查

查看集群状态:192.168.56.66:9200/_cat/health?v 查看索引列表:192.168.56.66:9200/_cat/indices?v

六、es集群

集群作用

  • ⾼可⽤:⾼可⽤(High Availability)是分布式系统架构设计中必须考虑的因素之⼀,它通常是指,通过设计减少系统不能提供服务的时间。如果系统每运⾏100个时间单位,会有1个时间单位⽆法提供服务,我们说系统的可⽤性是99%。

  • 负载均衡:将流量均衡的分布在不同的节点上,每个节点都可以处理⼀部分负载,并且可以在节点之间动态分配负载,以实现平衡。

  • ⾼性能:将流量分发到不同机器,充分利⽤多机器多CPU,从串⾏计算到并⾏计算提⾼系统性能。

Node节点:⼀个 Elasticsearch 实例即⼀个 Node,⼀台机器可以有多个实例,正常使⽤下每个实例应该会部署在不同的机器上。Elasticsearch 的配置⽂件中可以通过配置文件的node.master、node.data 来设置节点类型。

  • node.master:表示节点是否具有成为主节点的资格。true代表的是有资格竞选主节点,false代表的是没有资格竞选主节点。

  • node.data:表示节点是否存储数据

Node节点组合

  1. 主节点+数据节点(master+data):节点即有成为主节点的资格,⼜存储数据

  2. 数据节点(data):节点没有成为主节点的资格,不参与选举,只会存储数据

  3. 客户端节点(client):不会成为主节点,也不会存储数据,主要是针对海量请求的时候可以进⾏负载均衡分⽚

每个索引有⼀个或多个分⽚,每个分⽚存储不同的数据。分⽚可分为主分⽚( primaryshard)和复制分⽚(replica shard),复制分⽚是主分⽚的拷⻉。默认每个主分⽚有⼀个复制分⽚, ⼀个索引的复制分⽚的数量可以动态地调整,复制分⽚从不与它的主分⽚在同⼀个节点上。

集群的配置文件

#集群名称--每个节点必须一样
cluster.name: my-application
#节点名称
node.name: node-1
#是不是有资格主节点
node.master: true
#是否存储数据
node.data: true
#最⼤集群节点数
node.max_local_storage_nodes: 3
#⽹关地址,如果非本机的写具体ip地址
network.host: 0.0.0.0
#端⼝
http.port: 9200
#内部节点之间沟通端⼝
transport.tcp.port: 9300
#es7.x 之后新增的配置,写⼊候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["example.com:9300","example.com:9400","example.com:9500"]
#es7.x 之后新增的配置,初始化⼀个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
#数据和存储路径
path.data: /software/elasticsearch/data
path.logs: /software/elasticsearch/logs

kibana的配置

需要修改kibana的es集群配置。

打开配置 kibana.yml,添加elasticsearch.hosts: ["http://example.com:9200","http://example.com:9201","http://example.com:9202"],这里需要注意的是内部通信的端口和开放的端口 启动kibana,可以看到集群信息