1.安装jdk:
由于es是基于java的,所以先安装jdk:
yum install java-1.8.0-openjdk* -y
此命令install结束后不用再去配置环境变量了,直接输入java -version即可查看到环境配置完成
2.远程下载elasticsearch
依次输入命令即可
3.运行前的准备
3.1 创建新用户
如果你直接以root用户启动bin下的elasticsearch,会报错,大致的意思就是不能以root用户启动elasticsearch
1. useradd es #创建一个es用户
2. passwd es #为es用户创建密码
3.2 创建完成后给es账号赋予root权限:
如果不给es权限,很多事做不了。修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
es ALL=(ALL) ALL
保存:wq!(需要使用有个感叹号)
3.3 解压压缩包
新建一个文件夹,将下好的tar压缩包放到文件夹中,我个人是放在/usr/local/workspace下,解压
3.4 创建data和logs文件夹
在workspace下创建data和logs文件夹,用来存放elasticsearch的数据和日志,为什么不用默认的呢?因为有可能你会经历升级,这样的话默认的文件夹就用不了了
3.5 修改系统配置
elasticsearch对系统配置也是有要求的,可以去看官网
1.
vi /etc/security/limits.conf
添加以下内容:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
#当你将elasticsearch.yml中的bootstrap.memory_lock: true打开,就必须设置下面两个,否则报错
* hard memlock unlimited
* soft memlock unlimited
2.
vi /etc/sysctl.conf
添加以下代码:
vm.max_map_count = 655360
保存后执行
sysctl -p
使得配置生效
3.6 修改elasticsearch.yml的配置
- 集群的名称
通过 cluster.name
可以配置集群的名称,集群是一个整体,因此名称都要一致,所有主机都配置成相同的名称,配置示例:
cluster.name: germey-es-clusters
- 节点的名称
通过 node.name
可以配置每个节点的名称,每个节点都是集群的一部分,每个节点名称都不要相同,可以按照顺序编号,配置示例:
node.name: es-01
其他的主机可以配置为 es-02
、es-03
等。
- 是否有资格成为主节点
通过 node.master
可以配置该节点是否有资格成为主节点,如果配置为 true,则主机有资格成为主节点,配置为 false 则主机就不会成为主节点,可以去当数据节点或负载均衡节点。注意这里是有资格成为主节点,不是一定会成为主节点,主节点需要集群经过选举产生。这里我配置所有主机都可以成为主节点,因此都配置为 true,配置示例:
node.master: true
- 是否是数据节点
通过 node.data
可以配置该节点是否为数据节点,如果配置为 true,则主机就会作为数据节点,注意主节点也可以作为数据节点,当 node.master
和 node.data
均为 false,则该主机会作为负载均衡节点。这里我配置所有主机都是数据节点,因此都配置为 true,配置示例:
node.data: true
- 数据和日志路径
通过 path.data
和 path.logs
可以配置 Elasticsearch 的数据存储路径和日志存储路径,可以指定任意位置,这里我指定存储到 1T 硬盘对应的路径下,另外注意一下写入权限问题,配置示例:
path.data: /usr/local/workspace/data/elasticsearch
path.logs: /usr/local/workspace/logs/elasticsearch
- 设置访问的地址和端口
我们需要设定 Elasticsearch 运行绑定的 Host,默认是无法公开访问的,如果设置为主机的公网 IP 或 0.0.0.0
就是可以公开访问的,这里我们可以都设置为公开访问或者部分主机公开访问,如果是公开访问就配置为:
network.host: 0.0.0.0
如果不想被公开访问就不用配置。
另外还可以配置访问的端口,默认是 9200:
http.port: 9200
- 集群地址设置
通过 discovery.zen.ping.unicast.hosts
可以配置集群的主机地址,配置之后集群的主机之间可以自动发现,这里我配置的是内网地址,配置示例:
discovery.zen.ping.unicast.hosts: ["10.0.0.4", "10.0.0.5", "10.0.0.6", "10.0.0.7", "10.0.0.8", "10.0.0.9", "10.0.0.10"]
这里请改成你的主机对应的 IP 地址。
但是该配置已过时,建议使用新的配置:discovery.seed_hosts
官网原话: This setting was previously known as discovery.zen.ping.unicast.hosts
. Its old name is deprecated but continues to work in order to preserve backwards compatibility. Support for the old name will be removed in a future version.
- 节点数目相关配置
为了防止集群发生“脑裂”,即一个集群分裂成多个,通常需要配置集群最少主节点数目,通常为 (可成为主节点的主机数目 / 2) + 1,例如我这边可以成为主节点的主机数目为 7,那么结果就是 4,配置示例:
discovery.zen.minimum_master_nodes: 4
另外还可以配置当最少几个节点回复之后,集群就正常工作,这里我设置为 4,可以酌情修改,配置示例:
gateway.recover_after_nodes: 4
bootstrap.memory_lock: true #系统默认会进行内存交换,这样会导致 Elasticsearch 的性能变差,所以要置为true
bootstrap.system_call_filter: false
#下面两个是为了能让head插件可以正常访问
http.cors.enabled: true
http.cors.allow-origin: "*"
#初始化主节点,必须设置,否则报错找不到主节点,根据你设置的主节点进行设置
cluster.initial_master_nodes: ["es-01", "es-02","es-03"]
3.7 修改文件夹的权限
由于压缩tar文件夹是以root用户压缩的,所以压缩出来的文件夹归属权也是root用户的,如果不修改归属权,会导致es用户操作不了该文件夹下的所有文件,比如修改文本,创建文件等
使用命令:chown -R <用户> <文件夹>
chown -R es /usr/local/workspace
- R 是递归遍历将该文件夹下的所有子孙文件的归属权全部改掉
还有一点要注意的是,如果你设置的elasticsearch的data和logs文件夹是在root用户所创建的文件夹下,一定要修改你创建的这两个文件夹的归属权,否则elasticsearch没有权限在data或logs文件夹下创建文件,就会导致启动失败
3.8 启动
进入bin文件夹下,运行elasticsearch脚本,可以加-d参数,后台运行:
./elasticsearch -d
3.9 查看单个节点是否启动成功:
curl -get localhost:9200
localhost 看你设置的host,如果指定了ip,那么localhost就没用了
3.10 外部访问
让外部浏览器可以访问,关闭防火墙:systemctl stop firewalld.service
或者开放9200端口(作为Http协议,主要用于外部通讯)和9300端口(9300作为Tcp协议,jar之间就是通过tcp协议通讯,ES集群之间是通过9300进行通讯)
3.11 关闭elasticsearch服务
使用jps查看elasticsearch运行id,然后使用kill -9 id ,关闭
3.12 集群
如果单个节点启动没问题,那么就将系统复制几份,我是用的虚拟机,所以我是直接复制虚拟机,然后修改下elasticsearch.yml中的几个集群配置就行了
3.13 查看集群是否启动成功
curl -XGET 'http://localhost:9200/_cluster/state?pretty'
运行后会有每个节点的信息
3.14 单节点集群
如果你的项目比较小,还不需要特别庞大的集群,但是又考虑到之后的扩展性而使用集群时,可以使用单节点集群。单节点集群的配置非常简单,只需要在elasticsearch.yml中配置如下属性即可
discovery.type: single-node(注意该配置只在单节点集群中使用,多节点集群不能使用,使用默认类型,即不要这属性)
cluster.name: search
node.name: es-node
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
network.host: 192.168.20.105
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
其他的cluster.initial_master_nodes等集群配置不用填,以免报错
3.15 其他报错
1.Caused by: java.lang.IllegalStateException: failed to obtain node locks, tried [[/opt/elasticsearch-5.5.2/data/ymq]] with lock id [0];
删除你指定的data下的nodes文件夹
2.一开始集群正常,之后重新启动linux系统导致访问不了,一般是防火墙没关,要重新关一下
3.16 具体配置查看官网
必须要看一遍,否则你就算配置成功了,你也不知道是用来干嘛的,之后遇到问题都不知道怎么解决,自己最好不要一下就把配置全部搞上去,从0开始去运行,遇到错误再去解决,这样理解的更深刻
3.17 其他
想要使用docker-compose更快速方便的搭建整个ELK系统,请查看我的其他博客,我将其分成了4部分
3.18 本文参考博客