搭建ElasticSearch集群环境
安装3个节点的ElasticSearch
这里就不在不同的机器上测试了,毕竟原理方式都是一样,我们先在原安装目录下建立 escluster
文件夹,然后将安装好的 elasticsearch
分别拷贝到 escluster/node1
、escluster/node2
、 escluster/node3
,以用作三个集群中不同的节点。
[es6j@sher6j-03 ~]$ mkdir escluster
[es6j@sher6j-03 ~]$ cp -r elasticsearch-6.8.0/ escluster/node1/
[es6j@sher6j-03 ~]$ cp -r elasticsearch-6.8.0/ escluster/node2/
[es6j@sher6j-03 ~]$ cp -r elasticsearch-6.8.0/ escluster/node3/
由于都是新的节点,然后我们将复制的原 es
中的数据清空:
[es6j@sher6j-03 node1]$ rm -rf data
[es6j@sher6j-03 node2]$ rm -rf data
[es6j@sher6j-03 node3]$ rm -rf data
分配Java虚拟机堆内存
由于 es
要运行在Java虚拟机上,而此时是在一台机器上模拟的集群搭建,我给Linux
主机分配的内存为2G,所以为了不让三个 es
节点同时运行导致程序崩溃,将每个节点的虚拟机内存调节至 256M
,编辑每个节点的 config
目录下的 jvm.options
配置Java虚拟机参数,添加 -Xms256m -Xmx256m
配置表示Java虚拟机堆分配的最小内存为 256M
,最大内存为 256M
,即分配固定内存为 256M
:
[es6j@sher6j-03 node1]$ vim config/jvm.options
[es6j@sher6j-03 node2]$ vim config/jvm.options
[es6j@sher6j-03 node3]$ vim config/jvm.options
修改配置文件
分别修改其 config
目录下的 elasticsearch.yml
文件进行不同节点的配置:
[es6j@sher6j-03 node1]$ vim config/elasticsearch.yml
[es6j@sher6j-03 node2]$ vim config/elasticsearch.yml
[es6j@sher6j-03 node3]$ vim config/elasticsearch.yml
分别进行如下配置:
-
node1:
cluster.name: sher6j-ess node.name: es-01 network.host: 0.0.0.0 http.port: 9201 discovery.zen.ping.unicast.hosts: ["192.168.56.103:9302", "192.168.56.103:9303"] gateway.recover_after_nodes: 3 transport.tcp.port: 9301
-
node2:
cluster.name: sher6j-ess node.name: es-02 network.host: 0.0.0.0 http.port: 9202 discovery.zen.ping.unicast.hosts: ["192.168.56.103:9301", "192.168.56.103:9303"] gateway.recover_after_nodes: 3 transport.tcp.port: 9302
-
node3:
cluster.name: sher6j-ess node.name: es-03 network.host: 0.0.0.0 http.port: 9203 discovery.zen.ping.unicast.hosts: ["192.168.56.103:9301", "192.168.56.103:9302"] gateway.recover_after_nodes: 3 transport.tcp.port: 9303
其配置文件的含义如下:
配置项 | 含义 |
---|---|
cluster.name | 集群的名称,作为一个集群名称必须一致 |
node.name | 节点的名称,作为一个集群中的节点其名称不能一致 |
network.host: 0.0.0.0 | 允许监听的地址(0.0.0.0 表示开启远程权限) |
http.port | es 服务的监听端口 |
discovery.zen.ping.unicast.hosts | 集群中其他的节点,注意需要填写的端口是TCP端口!!! |
gateway.recover_after_nodes | 集群可做主节点的最小节点数 |
transport.tcp.port | 用于TCP连接的TCP端口 |
注意不同节点间的心跳链接是通过 TCP端口,故
discovery.zen.ping.unicast.hosts
中一定要写 TCP端口,如果写成了 HTTP端口,则节点间无法互相发现
然后分别将节点启动即可:
[es6j@sher6j-03 node1]$ bin/elasticsearch
[es6j@sher6j-03 node2]$ bin/elasticsearch
[es6j@sher6j-03 node3]$ bin/elasticsearch
可以在节点1的日志中看到节点2和3分别加入了集群:
然后我们可以利用 _cat
API访问任意节点查看集群的状态,输入任意节点网址即可 http://192.168.56.103:9201/_cat/health?v (v
参数代表显示表头),可以看到集群的状态是健壮的 green
:
安装 elasticsearch-head
插件,可视化集群状态
默认的 _cat
API只提供了查看集群的状态,而对于分片及其副本分片如何分布在不同集群中并无法知道细节,所以就有大佬开发了一个插件用于可视化集群状态,虽然曾经是插件,也就是说曾经是可以将 elasticsearch-head
直接安装到 es
中的 plugins
目录下的,但是在elasticsearch-head的官方文档中提到 :
for Elasticsearch 5.x, 6.x, and 7.x: site plugins are not supported. Run as a standalone server
也就是说在 ElasticSearch
的5版本以上就不支持该插件了,但还 elasticsearch-head
可以作为单独的服务运行,其运行的默认HTTP端口为 9100
。
NodeJS支持
该插件的使用需要有 NodeJS
的支持,所以在我们的及其上先以 root
用户安装 NodeJS
,将安装包上传至 /usr/local/nodejs
目录:
[root@sher6j-03 local]# mkdir nodejs
注意 nodejs
的压缩包为 tar.xz
格式,所以需用如下命令解压:
[root@sher6j-03 nodejs]# tar -xJvf node-v12.16.3-linux-x64.tar.xz -C ./
然后编辑系统变量:
[root@sher6j-03 nodejs]# vim ~/.bash_profile
追加如下环境变量:
然后使环境变量生效:
[root@sher6j-03 nodejs]# source ~/.bash_profile
输入 node -v
显示版本即可:
安装 es-head
将 elasticsearch-head
的压缩包放入 /usr/local/eshead
中:
然后解压:
[root@sher6j-03 eshead]# unzip elasticsearch-head-master.zip
然后进入其目录并安装所需依赖,然后启动:
# 设置淘宝镜像加速国内下载
[root@sher6j-03 elasticsearch-head-master]# npm config set registry https://registry.npm.taobao.org
[root@sher6j-03 elasticsearch-head-master]# npm install
[root@sher6j-03 elasticsearch-head-master]# npm run start
然后我们访问 http://192.168.56.103:9100/ 即可:
但是我们却怎么都连接不上!
开启 elasticsearch
的跨域访问
之所以会有上面的问题,是因为 es-head
并不是 es
的官方插件,也就是说可以理解为两个公司的产品,这就存在我们熟知的跨域请求,所以我们要开启 elasticsearch
的跨域访问,编辑其 elasticsearch.yml
文件,在其中加入如下两行配置:
http.cors.enabled: true
http.cors.allow-origin: "*"
然后重启 es
服务后,就可以用 es-head
连接了~:
然后我们就可以通过该插件可视化观察集群的分片情况了~