Linux安装Elasticsearch
Linux单机版本
一、安装JDK
网上教程很多,这里就不做过多介绍。
二、安装Elasticsearch
1. 创建elasticsearch目录
cd /usr/local/
mkdir tool
cd tool
mkdir elasticsearch
cd elasticsearch
2. 下载Elasticsearch
-
在刚刚创建好的文件夹内下载Elasticsearch(以下简称es)
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.2.tar.gz
-
解压es包
tar -xvf elasticsearch-5.4.2.tar.gz
-
进入es/bin包
cd elasticsearch-5.4.2/bin
-
启动es
./elasticsearch
三、解决遇到的错误
1. 第一个错误(内存不够)
-
直接启动,遇到如图问题,如下:
-
这个问题是由于内存分配不够造成的,修改适合本机的内存,修改文件config/jvm.options
vi ../config/jvm.options
-
修改如下位置(由于我的服务器内存较小,修改为512m,具体可以根据情况修改)
-
修改后在次启动:
./elasticsearch
2. 第二个错误(root用户下启动错误)
-
出现如下错误:
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
如图:
-
这个问题很明显,不允许使用root用户启动,那么我们新建一个es用户,并赋予权限:
-
添加es用户
useradd es
-
添加密码
passwd es
-
将文件夹elasticsearch-5.4.2赋予es权限
chown -R es:es /usr/local/tool/elasticsearch/elasticsearch-5.4.2
-
切换
es
用户su es
-
再次启动
./elasticsearch
-
这次启动成功了,我们在使用一个窗口登录root用户,输入命令:
curl -X GET http://localhost:9200
-
如图所示,即成功:
3. 第三个错误(浏览器访问拒绝连接)
-
在浏览器访问http://118.24.242.170:9200/拒绝访问(118.24.242.170为服务器ip)
-
使用root用户,打开elasticsearch.yml文件,如下:
vi /usr/local/tool/elasticsearch/elasticsearch-5.4.2/config/elasticsearch.yml
-
文件内增加如下代码
network.host: 0.0.0.0
-
要是添加完启动,发现出现了如下错误,得到错误信息如图
-
使用root用户打开如下文件:
vi elasticsearch.yml
-
在Discovery栏下加上
cluster.initial_master_nodes: ["node-1"]
-
使用es用户启动,发现又出现了错误如下,得到错误信息如图
-
使用root用户打开如下文件:
vim /etc/sysctl.conf
-
添加如下配置:
vm.max_map_count = 655360
-
使配置生效
/sbin/sysctl -p
-
然后使用es用户启动Elasticsearch,这次可以成功启动了,如果需要后台启动的话,在启动命令后加&,如下所示:
./elasticsearch &
Linux集群版本
搭建集群节点前,首先了解下节点的三个角色:
- 主结点:master节点主要用于集群的管理及索引 比如新增结点、分片分配、索引的新增和删除等。
- 数据结点:data 节点上保存了数据分片,它负责索引和搜索操作。
- 客户端结点:client 节点仅作为请求客户端存在,client的作用也作为负载均衡器,client 节点不存据,只是将请求均衡转发到其它结点。
通过下边两项参数来配置结点的功能:
- node.master: #是否允许为主结点
- node.data: #允许存储数据作为数据结点
- node.ingest: #是否允许成为协调节点
这两种选项具有4总组合方式:
- master=true,data=true:即是主结点又是数据结点
- master=false,data=true:仅是数据结点
- master=true,data=false:仅是主结点,不存储数据
- master=false,data=false:即不是主结点也不是数据结点,此时可设置ingest为true表示它是一个客户
1. 创建elasticsearch目录
cd /usr/local/
mkdir tool
cd tool
mkdir elasticsearch
cd elasticsearch
2. 创建用户(每一台机器都需要配置)
-
因为安全问题,Elasticsearch 不允许 root 用户直接运行,所以要在每个节点中创建新用
户,在 root 用户中创建新用户useradd es #新增 es 用户 passwd es #为 es 用户设置密码 userdel -r es #如果错了,可以删除再加 chown -R es:es /usr/local/tool/elasticsearch/ #文件夹所有者
-
修改
/etc/security/limits.conf
# 在文件末尾中增加下面内容 es soft nofile 65536 es hard nofile 65536 # es 是Linux下的用户名 # * 代表Linux下的所有用户
-
修改
/etc/sysctl.conf
# 在文件中增加下面内容 vm.max_map_count=655360
-
配置生效
sysctl -p
3. 配置Elasticsearch集群
-
在刚刚创建好的文件夹内下载Elasticsearch(以下简称es)
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.2.tar.gz
-
解压es包
tar -xvf elasticsearch-5.4.2.tar.gz -C es_cluster_9200
-
分发文件(我这里就有一台机器来模拟)
cp -r es_cluster_9200 es_cluster_9300 cp -r es_cluster_9200 es_cluster_9400
-
修改 es_cluster_9200
/usr/local/tool/elasticsearch/es_cluster_9200/config/elasticsearch.yml
文件# 加入如下配置 # #集群名称 cluster.name: cluster-es # #节点名称,每个节点的名称不能重复 node.name: node-1 # #ip 地址,每个节点的地址不能重复 network.host: 0.0.0.0 # #是不是有资格主节点 node.master: true node.data: true #要是用多台机器端口可以相同 http.port: 9200 #tcp 监听端口 #要是用多台机器监听端口也可以相同 transport.tcp.port: 9201 # # head 插件需要这打开这两个配置 http.cors.allow-origin: "*" http.cors.enabled: true http.max_content_length: 200mb # #es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 master cluster.initial_master_nodes: ["node-1","node-2","node-3"] # #es7.x 之后新增的配置,节点发现 discovery.seed_hosts: ["localhost:9201","localhost:9301","localhost:9401"] #要是用多台机器的可以配这个(tcp 监听端口用一样的) #discovery.seed_hosts: ["localhost:9201","localhost:9201","localhost:9201"] gateway.recover_after_nodes: 2 network.tcp.keep_alive: true network.tcp.no_delay: true transport.tcp.compress: true # #集群内同时启动的数据任务个数,默认是 2 个 cluster.routing.allocation.cluster_concurrent_rebalance: 16 # #添加或删除节点及负载均衡时并发恢复的线程个数,默认 4 个 cluster.routing.allocation.node_concurrent_recoveries: 16 # #初始化数据恢复时,并发恢复线程的个数,默认 4 个 cluster.routing.allocation.node_initial_primaries_recoveries: 16 #
-
修改 es_cluster_9300
/usr/local/tool/elasticsearch/es_cluster_9300/config/elasticsearch.yml
文件# 加入如下配置 # #集群名称 cluster.name: cluster-es # #节点名称,每个节点的名称不能重复 node.name: node-2 # #ip 地址,每个节点的地址不能重复 network.host: 0.0.0.0 # #是不是有资格主节点 node.master: true node.data: true #要是用多台机器端口可以相同 http.port: 9300 #tcp 监听端口 #要是用多台机器监听端口也可以相同 transport.tcp.port: 9301 # # head 插件需要这打开这两个配置 http.cors.allow-origin: "*" http.cors.enabled: true http.max_content_length: 200mb # #es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 master cluster.initial_master_nodes: ["node-1","node-2","node-3"] # #es7.x 之后新增的配置,节点发现 discovery.seed_hosts: ["localhost:9201","localhost:9301","localhost:9401"] #要是用多台机器的可以配这个(tcp 监听端口用一样的) #discovery.seed_hosts: ["localhost:9201","localhost:9201","localhost:9201"] gateway.recover_after_nodes: 2 network.tcp.keep_alive: true network.tcp.no_delay: true transport.tcp.compress: true # #集群内同时启动的数据任务个数,默认是 2 个 cluster.routing.allocation.cluster_concurrent_rebalance: 16 # #添加或删除节点及负载均衡时并发恢复的线程个数,默认 4 个 cluster.routing.allocation.node_concurrent_recoveries: 16 # #初始化数据恢复时,并发恢复线程的个数,默认 4 个 cluster.routing.allocation.node_initial_primaries_recoveries: 16 #
-
修改 es_cluster_9400
/usr/local/tool/elasticsearch/es_cluster_9400/config/elasticsearch.yml
文件# 加入如下配置 # #集群名称 cluster.name: cluster-es # #节点名称,每个节点的名称不能重复 node.name: node-3 # #ip 地址,每个节点的地址不能重复 network.host: 0.0.0.0 # #是不是有资格主节点 node.master: true node.data: true #要是用多台机器端口可以相同 http.port: 9400 #tcp 监听端口 #要是用多台机器监听端口也可以相同 transport.tcp.port: 9401 # # head 插件需要这打开这两个配置 http.cors.allow-origin: "*" http.cors.enabled: true http.max_content_length: 200mb # #es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 master cluster.initial_master_nodes: ["node-1","node-2","node-3"] # #es7.x 之后新增的配置,节点发现 discovery.seed_hosts: ["localhost:9201","localhost:9301","localhost:9401"] #要是用多台机器的可以配这个(tcp 监听端口用一样的) #discovery.seed_hosts: ["localhost:9201","localhost:9201","localhost:9201"] gateway.recover_after_nodes: 2 network.tcp.keep_alive: true network.tcp.no_delay: true transport.tcp.compress: true # #集群内同时启动的数据任务个数,默认是 2 个 cluster.routing.allocation.cluster_concurrent_rebalance: 16 # #添加或删除节点及负载均衡时并发恢复的线程个数,默认 4 个 cluster.routing.allocation.node_concurrent_recoveries: 16 # #初始化数据恢复时,并发恢复线程的个数,默认 4 个 cluster.routing.allocation.node_initial_primaries_recoveries: 16 #
-
启动每一个结点
#加 & 后台启动 su es ./es_cluster_9200/bin/elasticsearch & ./es_cluster_9300/bin/elasticsearch & ./es_cluster_9400/bin/elasticsearch &
-
测试
GET
linux1:9200/_cluster/health
或者linux1:9200/_cat/nodes