前置要求

在搭建ElasticSearch集群前你最好已经是有三台虚拟机了,并且配置过其他集群。至少需要有 分发脚本。

下载ElasticSearch

es下载地址 外国网站,可以用科学上网下载。

也可以从镜像网站下载:

ElasticSearch logstash kibana

当然,这里主要是配置ElasticSearch。logstash的作用是收集数据,kibanna是展示数据。

截屏2023-03-13 19.54.30

我选择 7.8.0 版本。之后点击Download。会跳转到如下页面。如果是x86架构(绝大多数Windows电脑)则点击 Linux x86_64。如果是Arm架构(Mac M系列芯片和少数Windows电脑)则选择 Linux AARCH64。

更新

Mac M系列应该选择7.13.0及以上。因为Kibana在7.13.0一下没有linux_arm版的。需要版本一致。

注意,更新一定要把原本的文件完全删除。

截屏2023-03-13 19.59.31

下载好后传到Linux虚拟机中(随便一台即可)。

如果是Windows电脑建议使用 xftp 传输(xshell也会自带这个,如果有xshell就直接用xshell传输)。

Mac电脑用FileZilla传输。

安装ElasticSearch

解压压缩文件:

1
sudo tar -xf elasticsearch-7.8.0-linux-aarch64.tar -C /usr/local

删除原目录(我这里是先将压缩包文件放到你叫elasticsearch的目录下,现在解压完之后真正的内容在/usr/local下了,所以这里删除包含压缩包的文件夹):

1
sudo rm -rf elasticsearch

给解压后的文件改名(其实不改也可以,方便看到版本,也方便使用多版本,看个人习惯):

1
sudo mv elasticsearch-7.8.0/  elasticsearch

修改拥有权限:

1
2
3
sudo chown -R hadoop103 elasticsearch/

sudo chgrp -R hadoop103 elasticsearch/

配置ElasticSearch

更新:

注意 ElasticSearch 对 jdk 有要求,需要先下载对应版本的jdk。

我这个版本的ElasticSearch是7.13.0。jdk理论上安装jdk11 - jdk17都可。jdk18和jdk19都不行。

安装jdk11:

1
sudo apt install openjdk-11-jdk

之后配置jdk环境变量:

1
vim ~/.bashrc

写入:

1
export ES_JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-arm64

如果是Windows或者x86架构的具体具体:ls /usr/lib/jvm 查看一下,大概率是写入:

export ES_JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64

注意:对每个节点都要执行相同操作

修改 /config下的 elasticsearch.yml

1
cd /usr/local/elasticsearch/config
1
vim elasticsearch.yml

进入之后主要是解开注释:

  • 在 Cluster 下,将cluster.name: my-application的注释解开,可以给集群修改一个名字。

    我修改后:cluster.name: my-elasticsearch-cluster

  • 在 Node 下,将node.name: node-1的注释解开,也可以改名,但是我没改。

  • 在 Network 下,将network.host: 192.168.70.103的注释解开,这后面是虚拟机的IP,我这里已经是修改后的

    再将端口的注释打开(http.port: 9200)这个的值最好不要修改。

  • 在 Discovery 下,将cluster.initial_master_nodes: ["node-1", "node-2"]的注释解开

或者(这种是不想自己找,或者怕出错的,就直接在后面添加):

1
2
3
4
5
6
cluster.name: my-elasticsearch-cluster
node.name: node-1
network.host: 192.168.70.103
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
xpack.security.enabled: false

修改 /config下的 jvm.options

这一步主要是修改运行时的内存分配。将原来的1G ~ 1G修改为:2G ~ 2G。如果虚拟机内存比较小可以不修改。

将原本的:

1
2
-Xms1g
-Xmx1g

改成:

1
2
-Xms2g
-Xmx2g

如图:

修改jvm.options

再将下面的8-13:-XX:+UseConcMarkSweepGC改为:8-13:-XX:+UseG1GC

保存退出。

修改/etc/security/limits.conf

这个是配置系统的配置文件。

1
sudo vim /etc/security/limits.conf 

在最末尾添加:

1
2
hadoop103 soft nofile 65536
hadoop103 hard nofile 65536

修改/etc/security/limits.d/20-nproc.conf

这个也是系统的配置文件。

1
sudo vim /etc/security/limits.d/20-nproc.conf

在最末尾添加:

1
2
3
hadoop103 soft nofile 65536
hadoop103 hard nofile 65536
* hard nproc 4096

修改/etc/sysctl.conf

1
sudo vim /etc/sysctl.conf

在最后添加内容:

1
vm.max_map_count=262144

重新加载(如果无法重新加载就:su root先切换为管理员身份,因为用的系统配置,比较底层,所以需要管理员身份):

1
sysctl -p

测试单机配置

/usr/local/elasticsearch/bin下输入:

1
elasticsearch

启动。

访问:http://192.168.70.103:9200/

如果即为访问效果(在浏览器中现实类似JSON串的东西,有集群名字,节点名,elasticsearch的版本的信息):

访问效果

之后按 Ctrl + C 退出。

但是这样启动就不能输入命令了,要输入命令就要退出,退出就关了。想要后台启动要加 -d 选项。

1
elasticsearch -d

查看是否启动,可以去访问网站,也可以访问线程:

1
ps aux|grep elasticsearch

也可以直接jps查看进程.

关闭就是:

1
kill -9 线程号

例如,jsp查看进程号:

进程号是:20374。所以:kill -9 20374

集群配置

重新修改ES的配置文件:

1
vim /usr/local/elasticsearch/config/elasticsearch.yml

修改内容为:

如果原本是注释,打开注释修改即可。

也可以直接在末尾添加这部分内容(把之前打开的注释重新注释上)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
cluster.name: my-elasticsearch-cluster  #集群名称
node.name: node-1 #节点名称,每个节点的名称不能重复
network.host: hadoop103 #ip地址,每个节点的地址不能重复
#是不是有资格主节点
node.master: true
node.data: true
http.port: 9200
xpack.security.enabled: false
# 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: ["192.168.70.103:9300","192.168.70.104:9300","192.168.70.105:9300"]
gateway.recover_after_nodes: 2
network.tcp.keep_alive: true
network.tcp.no_delay: true
transport.tcp.compress: true
discovery.zen.minimum_master_nodes: 3
#集群内同时启动的数据任务个数,默认是 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

修改后如图:

修改后文件

分发文件

1
xsync /usr/local/elasticsearch/

分发完之后,去查看,如果有data目录则进入data中,删除其中的nodes。三台机器都要删除

rm

如果没有就不用删除,如果有没太机器执行命令:

1
2
cd /usr/local/elasticsearch/data/
rm -rf nodes/

之后修改每个节点都配置文件(其他内容不用修改):

1
2
3
network.host: hadoop103   #ip地址,每个节点的地址不能重复
node.name: node-1 #节点名称,每个节点的名称不能重复
cluster.initial_master_nodes: ["node-1"]

分发其他几个系统配置文件(前两个文件都要修改,所以不如直接去写一遍,不用分发了):

1
2
3
xsync /etc/security/limits.conf
xsync /etc/security/limits.d/20-nproc.conf
xsync /etc/sysctl.conf

分发过去记得修改部分内容:

然后重新加载:

1
sysctl -p

启动集群

每台集群分别输入:

1
bin/elasticsearch

查看集群的节点:http://hadoop103:9200/_cat/nodes

查看集群的健康状态:http://hadoop103:9200/_cat/health?v

查看集群的索引数:http://hadoop103:9200/_cat/indices?v

查看集群所在磁盘的分配状况:http://hadoop103:9200/_cat/allocation?v

查看集群的其它信息http://hadoop103:9200/_cat/