0,参考连接
2,ElasticSearch 安装 (单机单节点/伪集群)
3,开课吧
1,ES的单机部署与伪分布式部署
(1),解压
将ES安装包解压到
/usr/local
目录下
sudo tar -zxvf elasticsearch-6.7.0.tar.gz -C /usr/local
(2),创建的新的用户
注意:ES不能使用root用户来启动,必须使用普通用户来安装启动。
# 1,首先创建用户命令
adduser elasticsearch
# 2,修改用户密码为:elasticsearch
passwd elasticsearch
# 3,将ES所解压的目录授予此对应的用户
cd /usr/local
chown -R elasticsearch elasticsearch-6.7.0
chgrp -R elasticsearch elasticsearch-6.7.0
# 查看当前路径下的文件信息,看是否都是elasticsearch账户的
ll
(3),修改配置文件(elasticsearch.yml)
- 单节点部署时要修改内容
# 更改完当前主机的信息,供于我们在wbe界面中使用ip进行访问,其中Web界面的端口是 9200
# 设置当前机器的主机名以及对应的ip,那么此时就可以使用主机名去进行访问了
node.name: master
network.host: 192.168.73.143
-
伪分布式部署时要修改的内容
注意在当前的配置中,需要解压多份 ES
#### 假设是"一主二从" 的架构,他们之间通过不同的端口号进行区分
### master 的端口是 9200,slave 端口分别是 9201 和 9202
### 这里使用不同的文件名进行区分,那么此时就需要使用对解压之后的文件名进行重命名
## 首先修改 master 的 config/elasticsearch.yml 配置文件:
vi /usr/local/es_cluster/master/config/elasticsearch.yml:
# 设置es的名称
cluster.name: myes
node.name: master
node.master: true
network.host: 127.0.0.1
## 然后将 es 的压缩包解压两份,放到不同的目录中;分别命名为 slave01 和 slave02,代表两个从机。
## 配置slave01
vi /usr/local/es_cluster/slave01/config/elasticsearch.yml:
# 集群名称必须保持一致
cluster.name: myes
node.name: slave01
network.host: 127.0.0.1
http.port: 9201
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
## 配置slave02
vi /usr/local/es_cluster/slave02/config/elasticsearch.yml:
# 集群名称必须保持一致
cluster.name: myes
node.name: slave02
network.host: 127.0.0.1
http.port: 9202
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
(4),服务的启动
### 方式1:使用觉得路径的方式(单机部署演示)
/usr/local/elasticsearch-6.7.0/bin/elasticsearch -d
### 方式2:使用相对路径的方式(伪分布式部署方式演示)
cd /usr/local/es_cluster/master
bin/elasticsearch -d
(5),启动可能会出现的报错
由于现在使用普通用户来安装es服务,且es服务对服务器的资源要求比较多,包括内存大小,线程数等。所以我们需要给普通用户解开资源的束缚
解决启动问题一:普通用户打开文件的最大数限制
## 问题错误信息描述:
[2020-11-24T17:44:31,302][ERROR][o.e.b.Bootstrap ] [mG4Kp9o] node validation exception
[2] bootstrap checks failed
[1]: max file descriptors [4096] 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]
ES因为需要大量的创建索引文件,需要大量的打开系统的文件,所以我们需要解除linux系统当中打开文件最大数目的限制,不然ES启动就会抛错
当我们配置三台机器组成的集群的时候,也是要解决这两问题的,所以都需要执行以下命令解除打开文件数据的限制
sudo vi /etc/security/limits.conf
# 追加以下内容(说明:这里简单粗暴的直接使用的*,当然也可以只指定给当前用户生效,可以根据实际情况进行调整)
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
解决启动问题二:普通用户启动线程数限制
## 三台机器执行以下命令打开文件最大数
# 编辑文件
sudo vi /etc/sysctl.conf
# 添加以下内容
vm.max_map_count=655360
fs.file-max=655360
# 执行以下命令生效
sudo sysctl -p
注意:以上两个问题修改完成之后,一定要重新连接linux生效。关闭secureCRT或者XShell工具,然后重新打开工具连接linux即可
## 重新连接之后执行以下命令,出现这个结果即可准备启动ES了
[hadoop@node01 ~]$ ulimit -Hn
131072
[hadoop@node01 ~]$ ulimit -Sn
65536
[hadoop@node01 ~]$ ulimit -Hu
4096
[hadoop@node01 ~]$ ulimit -Su
4096
(6),测试部署
这个时候我们访问下接口:
curl -XGET 主机名或者是ip:9200
或者浏览器打开 主机名或者是ip:9200,就会看到下面的输出:
[hadoop@node01 elasticsearch-6.7.0]$ curl -XGET node01:9200
{
"name" : "node01",
"cluster_name" : "myes",
"cluster_uuid" : "6we5OHUFSn6WsUH7h4ip1g",
"version" : {
"number" : "6.7.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "8453f77",
"build_date" : "2019-03-21T15:32:29.844721Z",
"build_snapshot" : false,
"lucene_version" : "7.7.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
2,ES的集群部署
区别仅仅是在配置文件中,另外只需要在一个节点中配置好,然后同步到其他节点中,再简单改一下即可。
第一步:解压、创建新用户
此时可以参考之前单节点的部署,根据实际情况继续信用的添加
注意:在当前环境中每台机器中都存在 hadoop 用户,所以当前直接使用这个用户进行安装。
第二步:处理每个机器中可能出现的报错
此时可以参照之前的单节点的部署中的排错
- 解决启动问题一:普通用户打开文件的最大数限制
- 解决启动问题二:普通用户启动线程数限制
第三步:修改配置文件
修改elasticsearch.yml
### 使用root用户创建,然后再去修改对应的用户
## 进入 elasticsearch 的解压目录的配置文件目录
cd /usr/local/elasticsearch-6.7.0/config/
## 创建文件夹
mkdir -p /usr/local/elasticsearch-6.7.0/logs/
mkdir -p /usr/local/elasticsearch-6.7.0/datas/
## 此时可以直接对 elasticSearch 整个目录的权限和用户进行设置
chown -R hadoop:hadoop /usr/local/elasticsearch-6.7.0/
## 验证更改结果
ll
## 如果没有改过来,可以再根据实际情况对指定的文件夹进进行修改
chown -R hadoop:hadoop /usr/local/elasticsearch-6.7.0/logs/
chown -R hadoop:hadoop /usr/local/elasticsearch-6.7.0/datas/
## 修改配置文件(当然也可以先不修改直接分发的其他节点中,然后直接从文档中拷贝过去,主要的修改工作是在当前文档中进行修改)
vim elasticsearch.yml
## 添加以下内容
cluster.name: myes
node.name: node01
path.data: /usr/local/elasticsearch-6.7.0/datas
path.logs: /usr/local/elasticsearch-6.7.0/logs
network.host: 192.168.73.147
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["node01", "node02", "node03"]
bootstrap.system_call_filter: false
bootstrap.memory_lock: false
http.cors.enabled: true
http.cors.allow-origin: "*"
修改jvm.option
## 修改jvm.option配置文件,调整jvm堆内存大小
# node01使用 elasticsearch 用户执行以下命令调整jvm堆内存大小,每个人根据自己服务器的内存大小来进行调整
## 进入配置文件所在的目录
cd /usr/local/elasticsearch-6.7.0/config
# 修改文件
vim jvm.options
# 追加以下内容
-Xms2g
-Xmx2g
第四步:将安装包分发到其他服务器上面
### node01使用es用户将安装包分发到其他服务器上面去
## 进入安装父目录
cd /usr/local/
## 拷贝到其他两个节点
scp -r elasticsearch-6.7.0/ node02:$PWD
scp -r elasticsearch-6.7.0/ node03:$PWD
## 当拷贝到其他两个节点中了之后,需要统一修改elasticsearch-6.7.0文件的所有者
chown -R hadoop:hadoop /usr/local/elasticsearch-6.7.0/
第五步:node02与node03修改es配置文件
node02与node03也需要修改es配置文件
node02使用hadoop用户执行以下命令修改es配置文件
- node02
### node02使用hadoop
## 进入配置文件目录
cd /usr/local/elasticsearch-6.7.0/config/
## 修改配置文件
vim elasticsearch.yml
## 添加以下配置(实际上就是修改部分内容)
cluster.name: myes
node.name: node02
path.data: /usr/local/elasticsearch-6.7.0/datas
path.logs: /usr/local/elasticsearch-6.7.0/logs
network.host: 192.168.73.149
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["node01", "node02", "node03"]
bootstrap.system_call_filter: false
bootstrap.memory_lock: false
http.cors.enabled: true
http.cors.allow-origin: "*"
- node03
## node03使用hadoop
## 进入配置文件目录
cd /usr/local/elasticsearch-6.7.0/config/
## 修改配置文件
vim elasticsearch.yml
## 添加以下配置(实际上就是修改部分内容)
cluster.name: myes
node.name: node03
path.data: /usr/local/elasticsearch-6.7.0/datas
path.logs: /usr/local/elasticsearch-6.7.0/logs
network.host: 192.168.73.150
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node01", "node02", "node03"]
bootstrap.system_call_filter: false
bootstrap.memory_lock: false
http.cors.enabled: true
http.cors.allow-origin: "*"
第六步:服务启动、测试部署
### 服务启动
/usr/local/elasticsearch-6.7.0/bin/elasticsearch -d
# 直接使用浏览器访问
http://192.168.73.160:9200/_cat/nodes?pretty
# 这里只是做了演示,但是实际就是会有信息输出
192.168.73.160 6 94 5 0.40 0.25 0.17 mdi * node02
192.168.73.159 6 91 11 0.43 0.20 0.16 mdi - node01
192.168.73.161 6 94 5 0.40 0.25 0.17 mdi * node03
### 这个时候我们访问下接口来测试部署:
curl -XGET node01:9200
或者浏览器打开 node01:9200,就会看到下面的输出:
[hadoop@node01 elasticsearch-6.7.0]$ curl -XGET node01:9200
{
"name" : "node01",
"cluster_name" : "myes",
"cluster_uuid" : "6we5OHUFSn6WsUH7h4ip1g",
"version" : {
"number" : "6.7.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "8453f77",
"build_date" : "2019-03-21T15:32:29.844721Z",
"build_snapshot" : false,
"lucene_version" : "7.7.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
## 启动报错问题1:
[hadoop@node03 elasticsearch-6.7.0]$ bin/elasticsearch -d
[hadoop@node03 elasticsearch-6.7.0]$ 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: /usr/local/elasticsearch-6.7.0/config/elasticsearch.keystore
Likely root cause: java.nio.file.AccessDeniedException: /usr/local/elasticsearch-6.7.0/config/elasticsearch.keystore
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
at java.nio.file.Files.newByteChannel(Files.java:361)
at java.nio.file.Files.newByteChannel(Files.java:407)
at org.apache.lucene.store.SimpleFSDirectory.openInput(SimpleFSDirectory.java:77)
at org.elasticsearch.common.settings.KeyStoreWrapper.load(KeyStoreWrapper.java:215)
at org.elasticsearch.bootstrap.Bootstrap.loadSecureSettings(Bootstrap.java:230)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:295)
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159)
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150)
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
at org.elasticsearch.cli.Command.main(Command.java:90)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:116)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93)
Refer to the log for complete error details.
### 解决方案:
## 即重新设置当前文件夹的所属用户和所属组
[hadoop@node02 ~]$ sudo chown -R hadoop:hadoop /usr/local/elasticsearch-6.7.0/
[sudo] password for hadoop:
- 服务启动脚本
vi startES.sh
# 追加以下内容
#!/bin/bash
for num in {1..3}
do
if [ $num -lt 4 ]; then
echo "node0${num} ES Cluster starting:"
ssh node0${num} "source /etc/profile;/usr/local/elasticsearch-6.7.0/bin/elasticsearch -d"
echo "==================="
fi
done
- 服务关闭脚本
## node01节点脚本
vi stopESCluster.sh
# 追加以下内容
#!/bin/sh
for host in node02 node03
do
ElasticsearchPIDS=$(ps ax | grep -i 'Elasticsearch' | grep -v grep | awk '{print $1}')
for pid in $ElasticsearchPIDS
do
if [ -z "$pid" ]; then
echo "No redis server to stop"
else
kill -s TERM $pid
fi
done
ssh $host "sh ./bin/stopESCluster.sh"
done
## 其他节点下也存放一份脚本,但是内容中没有ssh的语句
## 存放脚本的路径: /home/hadoop/bin
vi stopESCluster.sh
# 追加以下内容
#!/bin/sh
for host in node02 node03
do
ElasticsearchPIDS=$(ps ax | grep -i 'Elasticsearch' | grep -v grep | awk '{print $1}')
for pid in $ElasticsearchPIDS
do
if [ -z "$pid" ]; then
echo "No redis server to stop"
else
kill -s TERM $pid
fi
done
done
补充:配置文件作用说明
#集群名称
cluster.name: myes
#节点名称,集群中保持唯一
node.name: node01
#绑定远程地址,为了安全通常是指定具体的地址,这里仅仅是测试,放开允许所有远程来源访问
network.host: 0.0.0.0
#开放http接口,默认就是9200
http.port: 9200
#集群节点之间(集群协商、指令传输等)通信的端口
transport.tcp.port: 9300
#允许前端跨域访问
http.cors.enabled: true
#设置允许的跨域的来源,*表示允许所有跨域来源
http.cors.allow-origin: "*"
#设置发现集群节点主机列表
discovery.seed_hosts: ["192.168.15.151:9300","192.168.15.155:9300","192.168.15.156:9300"]
#初始化集群的master节点的候选列表,列表中的节点都可能竞选成为master节点
cluster.initial_master_nodes: ["192.168.15.151:9300","192.168.15.155:9300","192.168.15.156:9300"]
#配置 ES 的集群名称,默认值是 ES,建议改成与所存数据相关的名称,ES 会自动发现在同一网段下的集群名称相同的节点。
cluster.name:elasticsearch
#集群中的节点名,在同一个集群中不能重复。节点的名称一旦设置,就不能再改变了。当然,也可以设置成服务器的主机名称,例如 node.name:${HOSTNAME}。
node.name: "node1"
#指定该节点是否有资格被选举成为 Master 节点,默认是 True,如果被设置为 True,则只是有资格成为 Master 节点,具体能否成为 Master 节点,需要通过选举产生。
noed.master:true
#指定该节点是否存储索引数据,默认为 True。数据的增、删、改、查都是在 Data 节点完成的。
node.data:true
#设置都索引分片个数,默认是 5 片。也可以在创建索引时设置该值,具体设置为多大都值要根据数据量的大小来定。如果数据量不大,则设置成 1 时效率最高。
index.number_of_shards:5
#设置默认的索引副本个数,默认为 1 个。副本数越多,集群的可用性越好,但是写索引时需要同步的数据越多。
index.number_of_replicas:1
#设置配置文件的存储路径,默认是 ES 目录下的 Conf 文件夹。建议使用默认值。
path.conf:/path/to/conf
#设置索引数据多存储路径,默认是 ES 根目录下的 Data 文件夹。切记不要使用默认值,因为若 ES 进行了升级,则有可能数据全部丢失。 可以用半角逗号隔开设置的多个存储路径,在多硬盘的服务器上设置多个存储路径是很有必要的。
path.data:/path/to/data1,/path/to/data2
#设置日志文件的存储路径,默认是 ES 根目录下的 Logs,建议修改到其他地方。
path.logs:/path/to/logs
#设置第三方插件的存放路径,默认是 ES 根目录下的 Plugins 文件夹。
path.plugins:/path/to/plugins
#设置为 True 时可锁住内存。因为当 JVM 开始 Swap 时,ES 的效率会降低,所以要保证它不 Swap。
bootstrap.mlockall:true
#设置本节点绑定的 IP 地址,IP 地址类型是 IPv4 或 IPv6,默认为 0.0.0.0。
network.bind_host:192.168.0.1
#设置其他节点和该节点交互的 IP 地址,如果不设置,则会进行自我判断。
network.publish_host:192.168.0.1
#用于同时设置 bind_host 和 publish_host 这两个参数。
network.host:192.168.0.1
#设置对外服务的 HTTP 端口,默认为 9200。ES 的节点需要配置两个端口号,一个对外提供服务的端口号,一个是集群内部使用的端口号。 http.port 设置的是对外提供服务的端口号。注意,如果在一个服务器上配置多个节点,则切记对端口号进行区分。
http.port:9200
#设置集群内部的节点间交互的 TCP 端口,默认是 9300。注意,如果在一个服务器配置多个节点,则切记对端口号进行区分。
transport.tcp.port:9300
#设置在节点间传输数据时是否压缩,默认为 False,不压缩。
transport.tcp.compress:true
#设置在选举 Master 节点时需要参与的最少的候选主节点数,默认为 1。如果使用默认值,则当网络不稳定时有可能会出现脑裂。 合理的数值为(master_eligible_nodes/2)+1,其中 master_eligible_nodes 表示集群中的候选主节点数。
discovery.zen.minimum_master_nodes:1
#设置在集群中自动发现其他节点时 Ping 连接的超时时间,默认为 3 秒。 在较差的网络环境下需要设置得大一点,防止因误判该节点的存活状态而导致分片的转移。
discovery.zen.ping.timeout:3s
3,安装elasticsearch-head插件
由于es服务启动之后,访问界面比较丑陋,为了更好的查看索引库当中的信息,我们可以通过安装elasticsearch-head这个插件来实现,这个插件可以更方便快捷的看到es的管理界面
(1),安装 node.js
第一步:下载安装包
node01机器执行以下命令下载安装包,然后进行解压
cd
## 方式1:在线下载的方式
wget https://npm.taobao.org/mirrors/node/v8.1.0/node-v8.1.0-linux-x64.tar.gz
## 方式2:使用离线安装包的方式
tar -zxf node-v8.1.0-linux-x64.tar.gz -C /usr/local/
第二步:创建软连接
## node01执行以下命令创建软连接
## 也可以直接切换到root用户进行操作
sudo ln -s /kkb/install/node-v8.1.0-linux-x64/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm
sudo ln -s /kkb/install/node-v8.1.0-linux-x64/bin/node /usr/local/bin/node
第三步:修改环境变量
## node01服务器添加环境变量
## 编辑文件
sudo vim /etc/profile
# 追加以下内容
export NODE_HOME=/usr/local/node-v8.1.0-linux-x64
export PATH=:$PATH:$NODE_HOME/bin
## 修改完环境变量使用source生效
source /etc/profile
第四步:验证安装成功
## node01执行以下命令验证安装生效
node -v
npm -v
(2),安装elasticsearch-head插件
第一步:上传压缩包到/soft路径下去
## 将我们的压缩包 elasticsearch-head-compile-after.tar.gz 上传到node01机器的/soft路径下面去
第二步:解压安装包
## node01执行以下命令解压安装包
cd /soft/
tar -zxvf elasticsearch-head-compile-after.tar.gz -C /usr/local
第三步、node01机器修改Gruntfile.js
## 修改Gruntfile.js这个文件
cd /usr/local/elasticsearch-head
vim Gruntfile.js
## 找到以下代码:
hostname: '192.168.52.100',
## 将其修改为当前的主机的ip地址
connect: {
server: {
options: {
hostname: '192.168.73.147',
port: 9100,
base: '.',
keepalive: true
}
}
}
第四步、node01机器修改app.js
第一台机器修改app.js
cd /usr/local/elasticsearch-head/_site
vim app.js
## 注意:如果直接使用我提供的文件,可以直接搜nodeo1,然后将其更改为对应情况下的主机名
更改前:http://localhost:9200
更改后:http://node01:9200
第五步:node01机器启动head服务
## node01启动elasticsearch-head插件
cd /usr/local/elasticsearch-head/node_modules/grunt/bin/
## 进程后台启动命令
# 注意此时是将日志文件直接丢到黑洞文件中,不会保存日志,如果需要查看你
nohup ./grunt server >/dev/null 2>&1 &
## 如何停止:elasticsearch-head进程
执行以下命令找到elasticsearch-head的插件进程,然后使用kill -9 杀死进程即可
# 查看网络信息的组件
sudo yum install net-tools
# 查看对应端口占用的用户进程 PID
netstat -nltp | grep 9100
# 杀死进程
kill -9 8328
第六步:访问elasticsearch-head界面
## 打开Google Chrome访问
http://192.168.73.147:9100/
4、node01服务器安装Kibana
kibana的基本介绍
Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。
你用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。
你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。
Kibana使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实时显示Elasticsearch查询的变化。
接着使用我们的hadoop用户在node01服务器上面来实现我们的kibana的安装部署
第一步:下载资源上传服务器并解压
## node01服务器使用root用户执行以下命令来下载安装包并解压
cd /soft
## 部署方式1:在线下载,然后去解压即可
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.7.0-linux-x86_64.tar.gz
## 部署方式2:直接使用已经下载好的进行部署
tar -zxf kibana-6.7.0-linux-x86_64.tar.gz -C /usr/local
## 解压完毕之后修改文件的所属用户
chown -R hadoop:hadoop /usr/local/kibana-6.7.0-linux-x86_64
第二步:修改配置文件
## node01服务器使用es用户执行以下命令来修改配置文件
# 进入目录,进行修改
cd /usr/local/kibana-6.7.0-linux-x86_64/config/
vi kibana.yml
## 配置内容如下:
server.host: "node01"
elasticsearch.hosts: ["http://node01:9200"]
第三步:启动服务
## node01服务器使用es用户执行以下命令启动kibana服务
cd /usr/local/kibana-6.7.0-linux-x86_64
nohup bin/kibana >/dev/null 2>&1 &
## 如何停止kibana进程:停止kibana服务进程
# 查看进程号
# 方式1:查看进程的方式
ps -ef | grep node
# 方式2:查看端口占用的方式
netstat -nltp | grep 5601
# 然后使用kill -9杀死进程即可
第四步:浏览器访问
## 浏览器地址访问kibana服务
http://node01:5601
网友评论