本文章使用的ES版本是6.8.23,环境是Liunx系统
ES所有版本下载路径是:
https://www.elastic.co/cn/downloads/past-releases#elasticsearch
ELK版本匹配兼容的地址是:
https://www.elastic.co/cn/support/matrix#matrix_compatibility
一:单机版不加密部署
1.配置ES服务端允许跨域访问
修改elasticsearch-6.8.23\config目录下的elasticsearch.yml,增加以下配置:
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: “*”
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
这个配置可以无脑加,不管是单机还是集群配置,因为在浏览器访问ES不加此配置就会出现跨域问题!
2.启动ES
因为ES不能用root账号登陆,所以需要创建一个用户授权给ES启动包使用:
新建用户adduser username
> 例如 adduser es
1
设置密码passwd username
注意:可以不用设置密码,看个人习惯,此命令也是忘记密码修改密码的命令
将es目录权限赋给刚创建的用户
chown -R username /usr/local/elasticsearch-6.8.23
查看当前目录对应的文件目录哪些用户拥有权限:ll
切换用户 su username
进入到es的bin目录启动 ./elasticsearch -d
查看日志,看是否启动成功,如果没有成功,并出现以下类似日志信息
[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方法就是:
第一步:修改 /etc/security/limits.conf,修改到提示值即可
vim /etc/security/limits.conf
* hard nofile 65536
1
第二步:修改sysctl.conf配置文件
vim /etc/sysctl.conf
vm.max_map_count=262144
注意: >= 262144就行
修改完配置参数之后再执行以下命令使其生效
sysctl -p
至此,单机版的ES就部署完成,在浏览器直接使用服务器IP+9200端口即可访问成功!
二:单机版加密部署
1.配置ES服务端允许跨域访问
修改elasticsearch-6.8.23\config目录下的elasticsearch.yml,增加以下配置:
http.cors.enabled: true
http.cors.allow-origin: “*”
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
这个配置可以无脑加,不管是单机还是集群配置,因为在浏览器访问ES不加此配置就会出现跨域问题!
开启x-pack安全认证配置
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
2.然后启动ES,启动步骤请参考单机版不加密部署的第2点
启动过程中会报错,暂时忽略。
3.设置密码(有两种,一种是自动生成,一种是手动设置)
#自动生成密码
./elasticsearch-6.8.23/bin/elasticsearch-setup-passwords auto
#手动生成密码
./elasticsearch-6.8.23/bin/elasticsearch-setup-passwords interactive
在浏览器直接访问(ip+端口号)
然后输入用户名:elastic,密码就是刚刚自己设置的,或者系统自动输出的
看到以上界面就代表ES设置密码登陆成功!
另外,如果忘记密码需要重置密码的话,单机版可以执行以下命令
curl -H “Content-Type:application/json” -XPOST -u elastic
‘http://127.0.0.1:9200/_xpack/security/user/elastic/_password‘ -d ‘{ “password” : “123456” }‘
三:集群版非加密部署
1.修改elasticsearch-6.8.23\config目录下的elasticsearch.yml配置文件
服务器节点1
# 集群的名字,保证唯一,所有都必须一致
cluster.name: cluster-es
# 节点名称,必须不一样
node.name: node-1
# 必须为本机的ip地址
network.host: 0.0.0.0
# 服务器断开,在同一机器下必须不一样
http.port: 9200
# 设置集群自动发现机器ip集合,采用广播模式
discovery.zen.ping.unicast.hosts: [“10.0.0.1”,“10.0.0.2”]
# 防止脑裂。声明大于几个的投票主节点有效,请设置为(nodes / 2) + 1 (75行)
# 因为我这里只部署了两台服务器,所以是设置为1
discovery.zen.minimum_master_nodes: 1
# 允许跨域
http.cors.enabled: true
http.cors.allow-origin: “*”
http.cors.allow-headers:Authorization,X-Requested-With,Content-Length,Content-Type
服务器节点2
# 集群的名字,保证唯一,所有都必须一致
cluster.name: cluster-es
# 节点名称,必须不一样
node.name: node-2
# 必须为本机的ip地址
network.host: 0.0.0.0
# 服务器断开,在同一机器下必须不一样
http.port: 9200
# 设置集群自动发现机器ip集合,采用广播模式
discovery.zen.ping.unicast.hosts: [“10.0.0.1”,“10.0.0.2”]
# 防止脑裂。声明大于几个的投票主节点有效,请设置为(nodes / 2) + 1 (75行)
# 因为我这里只部署了两台服务器,所以是设置为1
discovery.zen.minimum_master_nodes: 1
# 允许跨域
http.cors.enabled: true
http.cors.allow-origin: “*”
http.cors.allow-headers:Authorization,X-Requested-With,Content-Length,Content-Type
注意:
复制配置到服务器的时候要注意 “”(双引号是否英文格式的双引号),如果不是英文格式的双引号怎部署失败
如果有多台节点,就只修改node.name参数和discovery.zen.ping.unicast.hosts就行,其他不需要变动
如果ES安装包有data文件夹,请rm -rf data 删除掉,初次启动前,这个数据是没有的,如果想修改data的存储路径,可以在配置文件修改路径
2.启动ES,启动步骤请参考单机版不加密部署的第2点,每个节点服务器都是一样的启动方式
3.启动没有报错,就代表启动成功,可以浏览器输入IP+端口号认证,也可以安装head插件认证
四:集群版加密部署
1:先关闭ES的进程(服务)
2:然后生成TSL证书,找任意一台节点服务器操作即可
在ES的config目录下执行以下命令,(注意:在那个目录执行命令,证书就生成在当前目录)
cd /usr/local/elasticsearch-6.8.23/config
#–days: 表示有效期多久(天),如果不设置此参数,默认的有效期是3年
/usr/local/elasticsearch-6.8.23/bin/elasticsearch-certutil ca --days 99999
运行命令后需要输入密码,可以直接按回车键设置为空(若输入了密码,且在配置文件使用该证书 时,需要在elasticsearch.keystore中加入该密码)
ls查看当前执行命令目录会发现多了个 elastic-stack-ca.p12文件,这个就是ca颁发的证书。
查看证书有效期的命令是
openssl pkcs12 -in elastic-stack-ca.p12 -nodes | openssl x509 -noout -enddate
图一是没有设置days参数的有效期
图二是设置了days=99999的有效期
3.创建私钥证书
执行命令
/usr/local/elasticsearch-6.8.23/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --days 99999
ls命令查看
4.此时在当前目录生成名为 elastic-certificates.p12 的文件,它是单个PKCS#12密钥存储库,其中包括节点证书、节点密钥和CA证书。默认情况下,elasticsearch-certutil 生成没有主机名信息的证书(也就是说,它们没有任何主题可选名称字段)。这意味着可以对集群中的每个节点使用此证书,但您必须关闭主机名验证。将当前服务器生成的证书文件elastic-certificates.p12拷贝到其他节点服务器的config目录下,因为集群通讯就是通过这个证书。
5.配置elasticsearch.yml配置文件
服务器节点1
# 集群的名字,保证唯一,所有都必须一致
cluster.name: cluster-es
# 节点名称,必须不一样
node.name: node-1
# 必须为本机的ip地址
network.host: 0.0.0.0
# Http端口,在同一机器下必须不一样
http.port: 9200
# 设置集群自动发现机器ip集合,采用广播模式
discovery.zen.ping.unicast.hosts: [“10.0.0.1”,“10.0.0.2”]
# 防止脑裂。声明大于几个的投票主节点有效,请设置为(nodes / 2) + 1 (75行)
# 因为我这里只部署了两台服务器,所以是设置为1
discovery.zen.minimum_master_nodes: 1
# 允许跨域
http.cors.enabled: true
http.cors.allow-origin: “*”
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
# 加密节点间通信-每个节点容器都要添加
xpack.security.transport.ssl.enabled: true
# 只验证证书是否受信任,不执行主机名验证。还可以设置成 full(还要验证主机名)、none(不验证证书)
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
# 指定证书
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
# 将密钥存储库也用做信任存储库
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
服务器节点2
# 集群的名字,保证唯一,所有都必须一致
cluster.name: cluster-es
# 节点名称,必须不一样
node.name: node-2
# 必须为本机的ip地址
network.host: 0.0.0.0
# Http端口,在同一机器下必须不一样
http.port: 9200
# 设置集群自动发现机器ip集合,采用广播模式
discovery.zen.ping.unicast.hosts: [“10.0.0.1”,“10.0.0.2”]
# 防止脑裂。声明大于几个的投票主节点有效,请设置为(nodes / 2) + 1 (75行)
# 因为我这里只部署了两台服务器,所以是设置为1
discovery.zen.minimum_master_nodes: 1
# 允许跨域
http.cors.enabled: true
http.cors.allow-origin: “*”
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
# 设置证书
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
6.启动ES,启动步骤请参考单机版不加密部署的第2点,每个节点服务器都是一样的启动方式
7.保证每个节点启动成功之后执行以下命令
#手动设置密码命令
/usr/local/elasticsearch-6.8.23/bin/elasticsearch-setup-passwords interactive
8.在浏览器直接访问(ip+端口号)
然后输入用户名:elastic,密码就是刚刚自己设置的,或者系统自动输出的
到这里为止,ES加密访问集群已经部署成功了!
9.另外,如果想通过head插件访问ES,可以按照以下步骤安装
下载head插件:https://github.com/mobz/elasticsearch-head
把下载好的head插件解压,然后改名为ROOT,然后准备一个新的tomcat,把tomcat的webapps文件下的内容文件全部清空,接着把改名为ROOT的head插件迁移到webapps中去,然后修改tomcat端口号,启动tomcat即可
启动成功后就用以下路径访问
http://10.0.0.1:8000/?auth_user=elastic&auth_password=W0A67ogjHAdGOBhE32fp
部署的ES服务器IP加端口号,用户名auth_user=elastic是固定的,密码auth_password就是自己设置的密码
连接成功后出现如下的图就代表安装成功了