其实准备了解Elasticsearch已经好几天了,本以为它跟我之前的软件一样,安装、集群配置、api demo就完事了,我这是看了好几天了,都没有头绪,主要是安装简单、操作复杂,知识点也很多,我计划可能有很多章去学习;白天都要上班,天生不喜欢偷懒,还好工作地方相隔比较近,有几个小时的时间好好放松哈,晚上再学习二个小时。
如果慢了,不要介意,不要退关哈!!我也是想坚持做一件事,活了人生三分之一,还不知道坚持的滋味,想好好尝尝。。。
千里之行始于足下,咋们就开始了。。。
安装步骤
1.由于elasticsearch 5.0 以及以后版本 使用了Java lambda表达式等新特性,因此jdk 版本必须是1.8 以上版本(含1.8)
# jdk下载连接
链接:https://pan.baidu.com/s/1gyHQPUT2zPtXnwLb6sLTbg
提取码:8hv8
# 安装流程
tar -zxvf jdk-8u11-linux-x64.tar.gz
mv jdk1.8.0_11/ /usr/local/
cd /usr/local/
mv jdk1.8.0_11 jdk8
vim /etc/profile
# 在profile最后添加
export JAVA_HOME=/usr/local/jdk8
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
# 执行生效
source /etc/profile
# 验证
java -version
2.elasticsearch的安装包下载
(1)下载连接
# 可以查看最新版本下载
https://www.elastic.co/cn/downloads/elasticsearch
# 提供百度网盘下载- elasticsearch-7.9.0-linux-x86_64.tar
链接:https://pan.baidu.com/s/1daGOb_Rp7yrcidFIZqM2YQ
提取码:nuk7
3.elasticsearch的安装过程
tar -zxvf elasticsearch-7.9.0-linux-x86_64.tar.gz
# 个人习惯
mv elasticsearch-7.9.0 /usr/local/
cd /usr/local/elasticsearch-7.9.0
# 必须修改 config中的文件
vim config/elasticsearch.yml
# network.host: 192.168.225.136 --- 本机的ip,为了通过ip访问
4.启动
./bin/elasticsearch
# 启动报错看后面的错误处理方法
配置介绍
1.config/elasticsearch.yml
#集群名称
cluster.name: my-application
#节点名称
node.name: node-1
#是不是主节点
node.master: true
# 节点服务器所在的机柜信息,此配置可不设
node.attr.rack: r1
# 存放数据的路径
path.data: /data/elasticsearch/es_data
# 存放日志的路径
path.logs: /data/elasticsearch/es_logs
# 设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,
# 当jvm开始swapping时es的效率会降低,频繁的交换,会导致IOPS变高
bootstrap.memory_lock: true
#网关地址
network.host: 192.168.225.136
#端口
http.port: 9200
# 配置该节点会与哪些候选地址进行通信,hostname,ip ,ip+port
discovery.seed_hosts: ["host1", "host2"]
# 集群初始化的提供的master候选地址,第一次启动时将从该列表中获取master
cluster.initial_master_nodes: ["node1"]
#内部节点之间沟通端口
transport.tcp.port: 9301
#时间放长,防止脑裂
# 控制节点加入某个集群或者开始选举的响应时间(默认3s)
discovery.zen.ping_timeout: 120s
#配置有机会参与选举为master的节点
discovery.zen.ping.unicast.hosts: ["192.168.1.124:9200","192.168.1.124:9201", "192.168.1.124:9202"]
#最大集群节点数
node.max_local_storage_nodes: 3
TransportClient类的可用配置
# 默认值为false,当设置为true时,ES会读取集群中的节点信息
client.transport.sniff: false
# 默认值为false,当设置为true时,ES会忽视配置中的集群名称并尝试连接
# 到某个可连接集群上,而不管集群名称是否匹配。
client.transport.ignore_cluster_name: false
# 默认为5s,此参数指定了ping命令响应的超时时间
client.transport.ping_timeout: 60s
# 默认为5s,此参数指定了检查节点可用性的时间间隔。
client.reansport.nodes_sampler_interval: 5s
http.cors.x
http.cors.enabled #是否支持跨域,默认为false
http.cors.allow-origin 当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。比如只允许本地地址。/https?:\/\/localhost(:[0-9]+)?/
http.cors.max-age 浏览器发送一个“预检”OPTIONS请求,以确定CORS设置。最大年龄定义多久的结果应该缓存。默认为1728000(20天)
http.cors.allow-methods 允许跨域的请求方式,默认OPTIONS,HEAD,GET,POST,PUT,DELETE
http.cors.allow-headers 跨域允许设置的头信息,默认为X-Requested-With,Content-Type,Content-Length
http.cors.allow-credentials 是否返回设置的跨域Access-Control-Allow-Credentials头,如果设置为true,那么会返回给客户端。
Network
# 该节点的网络访问ip -- 这个参数是用来同时设置bind_host和publish_host上面两个参数
network.host: 192.168.0.1
# 设置节点之间通信的端口
transport.tcp.port: 9300
# 设置是否压缩tcp传输时的数据,默认为false,不压缩。
transport.tcp.compress: true
# 定义http传输监听的端口
http.port: 9200
# 设置http交互中传输内容的最大长度
http.max_content_length: 100mb
# 是否使用http协议对外提供服务,默认为true,开启。
http.enabled: false
Gateway
# gateway的类型,默认为local即为本地文件系统,
# 可以设置为本地文件系统,分布式文件系统,Hadoop的HDFS,
# 和amazon的s3服务器
gateway.type: local
# 控制集群在达到多少个节点之后才会开始数据恢复,
# 通过这个设置可以避免集群自动相互发现的初期,shard分片不全的问题,
# 假如es集群内一共有5个节点,就可以设置为5,那么这个集群必须有5个节点启动后才会开始数据分片,
# 如果设置为3,就有可能另外两个节点没存储数据分片
gateway.recover_after_nodes: 1
# 初始化数据恢复的超时时间,假如gateway.recover_after_nodes参数设置为5,
# 就是5个节点全部启动后,再过5分钟开始数据恢复
gateway.recover_after_time: 5m
#启动几个节点后开始数据恢复,假如gateway.recover_after_nodes这个参数设置为5,
# 那么等到这5个节点全部启动后直接可以数据恢复,
# 不用等待gateway.recover_after_time设置的时间
gateway.expected_nodes: 2
其他配置
https://blog.csdn.net/Dengrz/article/details/107210322
https://www.cnblogs.com/chadiandianwenrou/p/6427989.html
2.jvm.options
# 设置内存
-Xms256m
-Xmx256m
错误处理
1.错误1
java.lang.RuntimeException: can not run elasticsearch as root
这个错误很明显,就是不能在root角色下启动,也是为了安全起见
# 添加linux用户
# 添加一个用户为els01
useradd els01
# 密码设置成123,两次输入
passwd els01
# 用户切换
su els01
# root用户给els01授权文件夹
chown chown -R els01:els01 /usr/local/elasticsearch-7.9.0
2.启动中报错,需要修改配置,下面是4个错误
ERROR: [4] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max number of threads [3791] for user [els01] is too low, increase to at least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[4]: 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
(1)max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
# 在root用户中修改
vim /etc/security/limits.conf
# 在最后添加
# * 表示匹配所有用户, nofile表示用户可以打开文件的最大数目
* soft nofile 65536
* hard nofile 65536
# 保存重启才能生效
# 验证
ulimit -Hu
ulimit -Su
(2)max number of threads [3791] for user [els01] is too low, increase to at least [4096]
# 在root用户中修改
vim /etc/security/limits.conf
# 在最后添加
# * 表示匹配所有用户, nofile表示配置最大打开线程数
* soft nproc 4096
* hard nproc 4096
# 保存重启才能生效
# 验证
ulimit -Hn
ulimit -Sn
# 看max user processes 字段
ulimit -a
# 特殊情况:
修改上述的之后,普通用户和root执行ulimit -a 显示的max user processes不一样
这里需要修改 /etc/security/limits.d/20-nproc.conf
* soft nproc 4096
(3)max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
# 在root用户中修改
vi /etc/sysctl.conf
# 增加
vm.max_map_count = 262144
# 保存后立即生效
sysctl -p
# 验证
sysctl -a|grep vm.max_map_count
(4)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
# 错误解释
# 在config/elasticsearch.yml中配置以下三者,最少其一
#[discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes]
# 我这里修改的是:node1是节点的node-name的值
cluster.initial_master_nodes: ["node1"]
3.启动报错
ERROR: [1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
解决方法
# 在/etc/security/limits.conf中增加
* hard memlock unlimited
* soft memlock unlimited
# 修改/etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
# 立即生效
1.在/etc/security/limits.conf中增加
/bin/systemctl daemon-reload
网友评论