elasticsearch(下面称为ES)是一个基于Lucene的搜索服务器(By 百度百科:查看),所以他需要java的环境即jdk。如何安装jdk就不在赘述了,无非就是删除原版本后解压再添加环境变量
注1:如果已经安装了ES和ik,需要重新安装,需要把/usr/share/elasticsearch/plugins/路径下ik删除,避免版本不匹配导致ES不能启动
注2:再往linux中安装软件时,尤其是需要在网页上测试的软件时,需要将防火墙关闭,ES就是,如果不关闭防火墙,可以ping通,但是加上9200端口进行访问时便会连接失败。
注3:在虚拟机或者真正的服务器上,必须要把ip地址写死,否则会出现一些莫名其妙的错误,(今天在虚拟机上搭建es,自动获取ip的状态下宿主机无法ping通,写死之后便可以ping通了)
wget https:
//artifacts
.elastic.co
/downloads/elasticsearch/elasticsearch-6
.3.1.
tar
.gz
修改配置文件:vim elasticsearch-6.3.1/config/elasticsearch.yml
在该配置文件的末尾复制添加上如下信息即可,省的一个个找修改再取消注释,如下信息其实就是该文件中需要修改的汇总,为了简便,可以直接复制添加。
# 集群的名字,需要自定义,如果是想要搭建es集群,则保持此项相同即可
cluster.name: luying
# 节点名字,需要自定义,如果想要搭建es集群,则保证此项不同即可
node.name: luying-master
# 是否是master
node.master: true
# ES的监听地址,这样别的机器也可以访问,有的教程说此项设置成0.0.0.0代表任意ip都可以访问本es,但失
# 败了,还是写成本机ip为正确写法,不要写成localhost,那样其他ip无法访问,一定要写固定ip
network.host: 192.168.2.133
# 默认的就好,es启动后通过web访问es,只需输入ip:9200,出现一个json即代表成功
http.port: 9200
# 本机最大允许运行节点个数,默认即可
node.max_local_storage_nodes: 3
# 增加新的参数,这样head插件可以访问es,解决跨域访问问题,一把用不到
# http.cors.enabled: true
# http.cors.allow-origin: "*"
后台启动命令:./elasticsearch -d
分别拷贝下载的es文件在三个不同的文件夹下,分别配置config/elasticsearch.yml
实例: ES1文件夹下的配置:
.............
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
# 集群的名字 必须与其他机器相同
cluster.name: niezp
# 节点名字,必须与其他节点不同
node.name: niezp-slave1
# 修改一下ES的监听地址,这样别的机器也可以访问
network.host: 192.168.174.148
# 不能和其他的节点相同
http.port: 9202
#这里要说下,这里的IP地址就是你的mater es的机器ip地址,比如部署在本机可以下127.0.0.1 别的机器就写别的机器的ip
discovery.zen.ping.unicast.hosts: ["192.168.174.148"]
node.max_local_storage_nodes: 3
# 增加新的参数,这样head插件可以访问es
#http.cors.enabled: true
#http.cors.allow-origin: "*"
实例: ES2文件夹下的配置:
.......
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
# 集群的名字 必须与其他机器相同
cluster.name: niezp
# 节点名字,必须与其他节点不同
node.name: niezp-slave2
# 修改一下ES的监听地址,这样别的机器也可以访问
network.host: 192.168.174.148
# 不能和其他的节点相同
http.port: 9201
#同实例1说明
discovery.zen.ping.unicast.hosts: ["192.168.174.148"]
node.max_local_storage_nodes: 3
# 增加新的参数,这样head插件可以访问es
#http.cors.enabled: true
#http.cors.allow-origin: "*"
-c: 加上备注文字,备注文字保存在passwd的备注栏中。
-d:指定用户登入时的主目录,替换系统默认值/home/<用户名>
-D:变更预设值。
-e:指定账号的失效日期,日期格式为MM/DD/YY,例如06/30/12。缺省表示永久有效。
-f:指定在密码过期后多少天即关闭该账号。如果为0账号立即被停用;如果为-1则账号一直可用。默认值为-1.
-g:指定用户所属的群组。值可以使组名也可以是GID。用户组必须已经存在的,期默认值为100,即users。
-G:指定用户所属的附加群组。
-m:自动建立用户的登入目录。
-M:不要自动建立用户的登入目录。
-n:取消建立以用户名称为名的群组。
-r:建立系统账号。
-s:指定用户登入后所使用的shell。默认值为/bin/bash。
-u:指定用户ID号。该值在系统中必须唯一。0~499默认是预留给系统用户账号,所以该值必须大于499。
举例:useradd -u 544 -d /usr/testuser1 -g users -m esuser1
建立一个新用户账户esuser1,并设置UID为544,主目录为/usr/esuser,属于users组。使用useradd命令所建立的账号,实际上是保存在/etc/passwd文本文件中。
删除用户
usermod -G GROUPS USERNAME:改变用户的附加组,会完全替换原有的附加组
usermod -G -a GROUPS USERNAME:在原有附加组的基础上追加附加组
usermod -d PATH USERNAME:修改家目录。修改后原先家目录中的文件不能访问了,因为在当前的家目录中并不存在这些文件。
usermod -l NEWNAME USERNAME:改变用户名
usermod -e USERNAME:指定该用户的过期时间
usermod -L USERNAME:锁定用户
usermod -U USERNAME:解锁用户
密码管理:只能用根用户操作,被操作的只能是非根用户
passwd –stdio:标准输入读取密码
passwd -l:锁定用户账号(root only)
passwd -u username:解锁用户账号(root only)
passwd -d username:删除用户密码。用户密码删除后不能登录。
passwd [username] : 修改密码
group管理:
-:第一位表示文件类型
d 文件夹
- 普通文件
l 链接
b 块设备文件
p 管道文件
c 字符设备文件
s 套接口文件
owner/group/others三种身份各有自己的read/write/execute权限:
rwx :第2-4位表示这个文件的属主拥有的权限。r是读、w是写、x是执行
rwx :第5-7位表示和这个文件属主所在同一个组的用户所具有的权限
rwx :第8-10位表示其他用户所具有的权限
常用的linux文件权限:
各权限的分数对照表如下: r:4 w:2 x:1;每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,下面则是常用的权限示例
444 r--r--r--
600 drw-------
644 drw-r--r--
666 drw-rw-rw-
700 drwx------
744 drwxr--r--
755 drwxr-xr-x
777 drwxrwxrwx
修改文件权限:
数字类型改变档案权限:chmod [-R] xyz 档案或目录
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有档案都会变更
符号类型改变档案权限:
文件的九个权限分别对应(1)user (2)group (3)others三种身份,那么我们就可以藉由u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成r, w, x,也就是可以使用底下的方式来看:
示例:设定一个档案的权限成为『-rwxr-xr-x』
注意:三种身份之间用“,”连接,中间没有任何空格符,并且可以任意组合。
ACL权限分配:chmod 权限分配是对所有用户进行设置,但在权限细分需求时存在不足, 此时可使用acl权限分配。(ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。它在UGO权限管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制。它被设计为UNIX文件权限管理的一个补充。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。)
什么是ACL权限呢?
获取管理员权限:即获取sudo权限
修改网卡信息:将ip地址写死,避免出现无法访问的情况。
修改网卡文件: /etc/sysconfg/network-scripts/...
关闭防火墙,或者开放对应端口
sudo vim /etc/selinux/config
在生产环境中,防火墙是不可以关闭的,需要的是开放端口。
注释下面两行:
#SELINUX=enforcing
#SELINUXTYPE=targeted
elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
Exception in thread "main" java.nio.file.AccessDeniedException: /opt/app/elasticsearch-6.6.0/config/jvm.options
使用的用户对安装目录的文件没有权限造成的,(可能是当前登录的用户没有权限,也可能是在更改安装目录的所有者的时候没有递归安装)
解决办法:
切换用户在启动es,如果报同样错误,使用chown -R 用户名:用户组名 目录路径
更改文件所有者。
[WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [es1] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: Unable to access ‘path.data’ (/var/es/dat)
因为不是root用户,在配置文件的时候。数据目录和日志目录等不能应该放在用户家目录下,防止因为该用户不能在所设置的目录下创建文件而引起报错。
[unknown] unable to install syscall filter:
java.lang.UnsupportedOperationException: seccomp unavailable: CONFIG_SECCOMP not compiled into kernel, CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER are needed
Centos6不支持SecComp,而高版本ES在5.X之后默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动
解决办法(两种):
1.可以把Centos内核升级到Centos7。
2.修改配置文件,关闭ES启动时候的安全检测。具体elasticsearch.yml中配置
initial heap size [104857600] not equal to maximum heap size [209715200]; this can cause resize pauses and prevents mlockall from locking the entire heap
【1】: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
【2】: max number of threads [1024] for user [es] 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]
【1】系统设置的文件描述符太少了
【2】为用户设置的可以开启的线程太少了
这两个可以通过配置文件vi /etc/security/limits.conf 更改,添加如下内容:(这里只为启动ES的es用户更改了安全限制)
es soft nofile 65536 #solf是软限制的意思,hard是硬限制;软限制可以在程序的进程中自行改变(突破限制),而硬限制则不行(除非程序进程有root权限)
es hard nofile 65536 #nofile 文件描述符
es soft nproc 4096 #nproc 进程的限制
es hard nproc 4096
这里两个的设置没有让其立即生效的命令,因此如果修改之后重启ES还报该错则需要重启机器。另外网上很多直接把第一项换为“ * ”,*是指所有用户,如果在生产中强烈不建议这样做,可能会对其他用户造成影响。
其实生产环境,服务器是很难重启的,所以很少有软件安装时需要重启,此处并不需要重启,将当前用户重新登入,就可以了。
【3】虚拟内存区域最大映射值太小了 通过vi /etc/sysctl.conf 可以更改。
切换到root用户修改配置sysctl.confvi /etc/sysctl.conf
添加下面配置:vm.max_map_count=655360
并执行命令:sysctl -p
(可以使其永久)
本机可以访问.但是局域网外的其他机器无法访问
修改elasticsearch.yml配置文件,network.host项,绑定本机的IP
PS:在配置文件中的localhost,回环IP,路径是tmp的一定要注意更改。
SettingsException[Failed to load settings from [elasticsearch.yml]]; nested: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found [VALUE_STRING]];
配置文件格式错误:
配置文件的key:value之间的:后面必须有一个空格。
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.
内存不足导致Java无法运行,(在elasticsearch和logstash中均可能出现)
解决办法:
这个时候查看一下free -m 查看可用内存,然后查看config下的jvm.options文件,-Xms1g
和-Xmx1g
配置的内存大小,更改此而配置项或者添加内存均可。
第一次启动使用root用户启动,在config目录下创建了文件,需要删除
Error: Port 5601 is already in use. Another instance of Kibana may be running!
这是因为5601的端口被占用了,一般有因为以下几种可能而导致:
netstat -tunlp|grep 5601 #查看端口占用情况,找到端口对应的进程id
ps aux | grep PID #查看对应的进程
#然后根据进程情况确定更改哪一个程序的端口号,使其不冲突即可
Caused by: java.net.BindException: Cannot assign requested addres
配置外网
进入 config/ elasticsearch.ym
打开配置文件elasticsearch.yml 将 network.host: 192.168.0.1 修改为本机IP 0.0.0.0
[warning][license][xpack] License information from the X-Pack plugin could not be obtained from Elasticsearch for the [data] cluster. [invalid_index_name_exception] Invalid index name [_xpack], must not start with '_'., with { index_uuid="_na_" & index="_xpack" } :: {"path":"/_xpack","statusCode":400,"response":"{\"error\":{\"root_cause\":[{\"type\":\"invalid_index_name_exception\",\"reason\":\"Invalid index name [_xpack], must not start with '_'.\",\"index_uuid\":\"_na_\",\"index\":\"_xpack\"}],\"type\":\"invalid_index_name_exception\",\"reason\":\"Invalid index name [_xpack], must not start with '_'.\",\"index_uuid\":\"_na_\",\"index\":\"_xpack\"},\"status\":400}"}
Kibana连接elasticsearh的时候,浏览器中报错为
Cannot connect to the Elasticsearch cluster currently configured for Kibana.
`To use the full set of free features in this distribution of Kibana, please update Elasticsearch to the default distribution.```
看报错信息显示因该是版本的问题,但是理论上elatic官网上的一套应该是没有问题的,我试着卸载X-pack,发现es不能卸载,然后尝试了很多办法无果后,提交给了官网,收到回复如下:
您好,
非常感谢您的回复。
初步了解您的情况之后,我找到了一个跟您问题相似的帖子,麻烦您参考下
https://discuss.elastic.co/t/license-information-from-the-x-pack-plugin-could-not-be-obtained-from-elasticsearch-for-the-data-cluster/148030/9
不知道您是否方便尝试用下oss only的kibana?
https://www.elastic.co/downloads/kibana-oss
麻烦您看下是否能帮助解决您的问题~ 如果还有问题欢迎随时与我联系。您也可以加我的微信:(这个就不显示了)
希望Elastic能带给您一个无与伦比的使用体验!
Best regards,
重点在上周新版本更新中,我直接用了最新的6.6.1,然后就没有问题了,哈哈
elasticsearch 6.6.1的新报错
Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file logs/gc.log due to Permission denied
Exception in thread "main" org.elasticsearch.bootstrap.BootstrapException: java.nio.file.AccessDeniedException: /opt/app/elasticsearch-6.6.1/config/elasticsearch.keystore
Likely root cause: java.nio.file.AccessDeniedException: /opt/app/elasticsearch-6.6.1/config/elasticsearch.keystore
第一次启动es使用了root用户,在config目录下创建了文件elasticsearch.keystore,只需要进入之后把文件删除,然后用es的用户启动就可以了。
浏览器连接不上Kibana,资源无限重定向(特别早遇到的报错,今天想起来了)
在使用6.6.1的Kibana的时候,集群跑一个周末,不操作,等到周一的时候,会出现浏览器连接补了Kibana的情况,但是Kibana的进程什么的都正常,报错信息好像是因为资源无限重定向这样的信息。
这个问题咨询官网好像也是版本问题,具体情况我忘记了,但是现在记得还有一个这样的问题,大家如果遇到了可以
今天搭建集群的时候遇到新的报错,是因为我在一个节点启动了es,生成了数据文件,然后没有删除数据文件,就把目录用scp拷贝到其他的节点上而造成的,具体的报错信息如下:
failed to send join request to master [{node10}{nIHo2TdDRw-1-nbhr-Lmzw}{n_vGmHO9R2umfw99C5nOSg}{192.168.56.10}{192.168.56.10:9300}{ml.machine_memory=1968349184, ml.max_open_jobs=20, xpack.installed=true, ml.enabled=true}], reason [RemoteTransportException[[node10][192.168.56.10:9300][internal:discovery/zen/join]]; nested: IllegalArgumentException[can't add node {node11}{nIHo2TdDRw-1-nbhr-Lmzw}{XcZDBLmxRCeKsHm4jp2M8w}{192.168.56.11}{192.168.56.11:9300}{ml.machine_memory=1968349184, ml.max_open_jobs=20, xpack.installed=true, ml.enabled=true}, found existing node {node10}{nIHo2TdDRw-1-nbhr-Lmzw}{n_vGmHO9R2umfw99C5nOSg}{192.168.56.10}{192.168.56.10:9300}{ml.machine_memory=1968349184, xpack.installed=true, ml.max_open_jobs=20, ml.enabled=true}
with the same id but is a different node instance];
删除安装目录下的data文件夹,然后重新启动即可。
更多问题可以参考博客:https://blog.csdn.net/wang909125961/article/details/87937335
csdn作者名字:wang__xg;链接地址:https://blog.csdn.net/wang909125961
或者
http://www.360doc.com/content/16/0801/19/17130779_580079662.shtml