一、 官网下载地址
https://www.elastic.co/downloads/elasticsearch
二、 选择自己对应的es版本下载,并安装JDK1.8+
注意: elasticsearch 运行需要有JAVA_HOME环境变量
如果没有添加 进行如下操作 但是需要在安装JDK的条件下
1. 执行java -verbose
最下边会出现安装目录
[Loaded java.lang.Shutdown$Lock from /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.144-0.b01.el7_4.x86_64/jre/lib/rt.jar]
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.144-0.b01.el7_4.x86_64 就是安装目录
修改 /etc/profile 文件 我是centos7 在 etd/profile.d/ 目录下自建个java.sh用于配置java环境 此目录下文件会加载到etc/profile里
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.144-0.b01.el7_4.x86_64
执行 source /etc/profile
立即生效
三、 下载完成后解压安装包
示例(请将文件名改为自己的安装包名):
tar -zxvf elasticsearch-7.2.0-linux-x86_64.tar.gz
在解压后的文件夹里创建一个data文件夹,一会存数据文件用
mkdir data
目录结构介绍:
bin:可执行文件,运行es的命令
config:配置文件目录
config/elasticsearch.yml:ES启动基础配置
config/jvm.options:ES启动时JVM配置
config/log4j2.properties:ES日志输出配置文件
lib:依赖的jar
logs:日志文件夹
modules:es模块
plugins:可以自己开发的插件
data:我们自己创建的,存放es存储文件
四、 对ES进行一些基础配置,打开config目录 elasticsearch.yml配置
1 配置集群名称(默认是被注释的,并且默认有一个集群名)
cluster.name: my-application
2 配置当前es节点名称(默认是被注释的,并且默认有一个节点名)
node.name: node-1
3 配置存储数据的目录路径(用逗号分隔多个位置)和日志文件路径
#
path.data: /home/esroot/elasticsearch-7.2.0/data
#
# Path to log files:
#
path.logs: /home/esroot/elasticsearch-7.2.0/logs
#
4 绑定地址为特定IP地址(设置其它节点和该节点交互的ip地址,如果不设置它会自动判断)默认为0.0.0.0,绑定这台机器的任何一个ip
network.host: 0.0.0.0
5 集群启动时,设置master节点列表 用逗号分隔
cluster.initial_master_nodes: ["node-1", "node-2"]
6 保存配置
五、 启动ES
1 启动bin目录下的elasticsearch报错(这是ES的一种安全措施,不让用root用户)
[root@localhost bin]# ./elasticsearch
future versions of Elasticsearch will require Java 11; your Java version from [/usr/local/java/jdk1.8.0_201/jre] does not meet this requirement
[2019-07-11T22:47:02,963][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [node-1] 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:163) ~[elasticsearch-7.2.0.jar:7.2.0]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-7.2.0.jar:7.2.0]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-7.2.0.jar:7.2.0]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-7.2.0.jar:7.2.0]
at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-7.2.0.jar:7.2.0]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115) ~[elasticsearch-7.2.0.jar:7.2.0]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-7.2.0.jar:7.2.0]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:105) ~[elasticsearch-7.2.0.jar:7.2.0]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:172) ~[elasticsearch-7.2.0.jar:7.2.0]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:349) ~[elasticsearch-7.2.0.jar:7.2.0]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-7.2.0.jar:7.2.0]
... 6 more
2 创建用户并赋予es安装目录权限
创建一个esroot用户并设置初始密码
useradd -c 'ES user' -d /home/esroot esroot
passwd esroot
将es安装目录属主权限改为esroot用户
chown -R esroot
切换用户到esroot
su esroot
3 使用esroot用户重启es
注意 : 如果报如下错误 说明 esroot 没有此目录的权限 需要把Elasticsearch文件夹复制到 esroot自己的根目录里然后在操作 建议把elasticsearch安装到执行用户目录下
错误: 找不到或无法加载主类 org.elasticsearch.tools.java_version_checker.JavaVersionChecker
解决后 再次启动es 发现还有错误
问题:max file descriptors [4096] for elasticsearch process is too low,
increase to at least [65536]
原因:每个进程最大同时打开文件数太小 查看当前系统同时打开进程数的默认值:
ulimit -Hn
ulimit -Sn
解决方案:切换到root账户,修改/etc/security/limits.conf文件 增加配置,用户退出后重新登录生效su root 输入密码 vi /etc/security/limits.conf 在文件最后,增加如下配置:
# -
#
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
esroot hard nofile 65536
esroot soft nofile 65536
esroot soft nproc 4096
esroot hard nproc 4096
# End of file
第一列表示用户和组(@开头) * 号表示全部用户。第二列表示软限制还是硬限制,第三列表示限制的资源类型,第四列表示限制的最大值
hard和soft的区别: soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错,一般情况下都是设为同一个值。
core是内核文件,nofile是文件描述符,noproc是进程,一般情况下只限制文件描述符数和进程数就够了
一下具体介绍
-----------分割线,上面是配置文件的模板,下面是自己添加的------------------------
* soft nofile 655350 #表示任何一个用户可以打开的最大的文件描述符数量
* hard nofile 655350
* soft nproc 655350 #表示任何一个用户可以打开的最大的进程数
* hard nproc 655350
@student hard nofile 65535 #student组中的任何人最多能打开文件描述符数量是65535,并且会在打开65000个时发出警告
@student soft nofile 65000
@student hard nproc 50 #student组中的任何人不能拥有超过50个进程,并且会在拥有30个进程时发出警告
@student soft nproc 30
再次启动 如果报
问题:max virtual memory areas vm.max_map_count [65530] is too low,increase to at least [262144]原因:elasticsearch用户拥有的内存权限太小,至少需要262144 解决:切换到root用户,在/etc/sysctl.conf文件最后添加一行 vm.max_map_count=655360 添加完毕之后,执行命令: sysctl -p
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
vm.max_map_count=655360
~
~
再次切换到esroot普通用户,重新启动es服务。
执行命令ss -taln
[root@localhost ~]# ss -taln
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:9000 *:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 *:88 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 80 :::3306 :::*
LISTEN 0 128 :::9200 :::*
LISTEN 0 128 :::9300 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25
设置防火墙 开启 9200端口号访问
· 可在浏览器中输入如下地址:http://192.168.1.54:9200/
· 如果显示如上信息,则代表Linux下ES已经搭建完毕(单机)
停止
· 若是es的前台运行,则用ctrl + c 来停止。
· 若是es的后台运行,则用kill -9 进程号 来停止。(可通过jps命令,查看es进程号)
附详细配置
cluster.name: elasticsearch
# 配置的集群名称,默认是elasticsearch,es服务会通过广播方式自动连接在同一网段下的es服务,通过多播方式进行通信,同一网段下可以有多个集群,通过集群名称这个属性来区分不同的集群。
node.name: "Franz Kafka"
# 当前配置所在机器的节点名,你不设置就默认随机指定一个name列表中名字,该name列表在es的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。
node.master: true
指定该节点是否有资格被选举成为node(注意这里只是设置成有资格, 不代表该node一定就是master),默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。
node.data: true
# 指定该节点是否存储索引数据,默认为true。
index.number_of_shards: 5
# 设置默认索引分片个数,默认为5片。
index.number_of_replicas: 1
# 设置默认索引副本个数,默认为1个副本。如果采用默认设置,而你集群只配置了一台机器,那么集群的健康度为yellow,也就是所有的数据都是可用的,但是某些复制没有被分配
# (健康度可用 curl 'localhost:9200/_cat/health?v' 查看, 分为绿色、黄色或红色。绿色代表一切正常,集群功能齐全,黄色意味着所有的数据都是可用的,但是某些复制没有被分配,红色则代表因为某些原因,某些数据不可用)。
path.conf: /path/to/conf
# 设置配置文件的存储路径,默认是es根目录下的config文件夹。
path.data: /path/to/data
# 设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例:
# path.data: /path/to/data1,/path/to/data2
path.work: /path/to/work
# 设置临时文件的存储路径,默认是es根目录下的work文件夹。
path.logs: /path/to/logs
# 设置日志文件的存储路径,默认是es根目录下的logs文件夹
path.plugins: /path/to/plugins
# 设置插件的存放路径,默认是es根目录下的plugins文件夹, 插件在es里面普遍使用,用来增强原系统核心功能。
bootstrap.mlockall: true
# 设置为true来锁住内存不进行swapping。因为当jvm开始swapping时es的效率 会降低,所以要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。 同时也要允许elasticsearch的进程可以锁住内# # 存,linux下启动es之前可以通过`ulimit -l unlimited`命令设置。
network.bind_host: 192.168.0.1
# 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,绑定这台机器的任何一个ip。
network.publish_host: 192.168.0.1
# 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。
network.host: 192.168.0.1
# 这个参数是用来同时设置bind_host和publish_host上面两个参数。
transport.tcp.port: 9300
# 设置节点之间交互的tcp端口,默认是9300。
transport.tcp.compress: true
# 设置是否压缩tcp传输时的数据,默认为false,不压缩。
http.port: 9200
# 设置对外服务的http端口,默认为9200。
http.max_content_length: 100mb
# 设置内容的最大容量,默认100mb
http.enabled: false
# 是否使用http协议对外提供服务,默认为true,开启。
gateway.type: local
# gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,hadoop的HDFS,和amazon的s3服务器等。
gateway.recover_after_nodes: 1
# 设置集群中N个节点启动时进行数据恢复,默认为1。
gateway.recover_after_time: 5m
# 设置初始化数据恢复进程的超时时间,默认是5分钟。
gateway.expected_nodes: 2
# 设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。
cluster.routing.allocation.node_initial_primaries_recoveries: 4
# 初始化数据恢复时,并发恢复线程的个数,默认为4。
cluster.routing.allocation.node_concurrent_recoveries: 2
# 添加删除节点或负载均衡时并发恢复线程的个数,默认为4。
indices.recovery.max_size_per_sec: 0
# 设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制。
indices.recovery.concurrent_streams: 5
# 设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。
discovery.zen.minimum_master_nodes: 1
# 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.ping.timeout: 3s
# 设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。
discovery.zen.ping.multicast.enabled: false
# 设置是否打开多播发现节点,默认是true。
discovery.zen.ping.unicast.hosts: ["host1", "host2:port", "host3[portX-portY]"]
# 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。
elasticsearch7版本引入的新集群协调子系统了解一哈,新增两个如下配置项
discovery 和cluster 设置,以便群集中的节点可以相互发现并选择主节点。
#设置提供群集中其他节点的列表,这些节点符合主要条件且可能是实时且可联系的,以便为发现过程设定种子。 此设置通常应包含群集中所有符合主节点的节点的地址。 此设置包含主机数组或逗号分隔的字符串。 每个值应采用host:port或host的形式
discovery.seed_hosts
#当您第一次启动全新的Elasticsearch集群时,会出现一个集群引导步骤,该步骤确定在第一次选举中计票的主要合格节点集因此当您在生产模式下启动全新集群时,必须明确列出符合条件的节点的名称或IP地址,这些节点的投票应在第一次选举中计算 集群中第一个主节点启动 许设置此项
cluster.initial_master_nodes
有个坑 需要详细记录一下 我在window里安装es 与linux里安装的es 始终无法通信 配置到一个集群里
报错如下
[2019-07-30T11:02:21,462][WARN ][o.e.c.c.Coordinator ] [node-1] failed to validate incoming join request from node [{node-2}{kAGAg2OgRs23B18o02Bi8g}{G5CsI1qRQ_qoNSH-svOUgQ}{192.168.1.54}{192.168.1.54:9300}{ml.machine_memory=1922908160, ml.max_open_jobs=20, xpack.installed=true}]
org.elasticsearch.transport.RemoteTransportException: [node-2][192.168.1.54:9300][internal:cluster/coordination/join/validate]
Caused by: org.elasticsearch.cluster.coordination.CoordinationStateRejectedException: join validation on cluster state with a different cluster uuid bpTA6ZzARoaSpNFW_Lt_fg than local cluster uuid LcwnN93RSdGl8VqtEjZ8xA, rejecting
at org.elasticsearch.cluster.coordination.JoinHelper.lambda$new$4(JoinHelper.java:147) ~[elasticsearch-7.2.0.jar:7.2.0]
at org.elasticsearch.xpack.security.transport.SecurityServerTransportInterceptor$ProfileSecuredRequestHandler$1.doRun(SecurityServerTransportInterceptor.java:250) ~[?:?]
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-7.2.0.jar:7.2.0]
我换成两个都是linux的系统就没问题 应该是不同系统之间 uuid匹配不了 所以不能在一个集群里