为什么要搭建集群?
凡事都要讲究个为什么。在搭建集群之前,我们首先先问一句,为什么我们需要搭建集群?它有什么优势呢?
高可用性
Elasticsearch 作为一个搜索引擎,我们对它的基本要求就是存储海量数据并且可以在非常短的时间内查询到我们想要的信息。所以第一步我们需要保证的就是 Elasticsearch 的高可用性,什么是高可用性呢?它通常是指,通过设计减少系统不能提供服务的时间。假设系统一直能够提供服务,我们说系统的可用性是 100%。如果系统在某个时刻宕掉了,比如某个网站在某个时间挂掉了,那么就可以它临时是不可用的。所以,为了保证 Elasticsearch 的高可用性,我们就应该尽量减少 Elasticsearch 的不可用时间。
那么怎样提高 Elasticsearch 的高可用性呢?这时集群的作用就体现出来了。假如 Elasticsearch 只放在一台服务器上,即单机运行,假如这台主机突然断网了或者被攻击了,那么整个 Elasticsearch 的服务就不可用了。但如果改成 Elasticsearch 集群的话,有一台主机宕机了,还有其他的主机可以支撑,这样就仍然可以保证服务是可用的。
存储空间
另外,既然是群集,那么存储空间肯定也是联合起来的,假如一台主机的存储空间是固定的,那么集群它相对于单个主机也有更多的存储空间,可存储的数据量也更大。所以综上所述,我们需要一个集群!
开始搭建
下载Elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.2-linux-x86_64.tar.gz
tar -zxvf elasticsearch-7.3.2-linux-x86_64.tar.gz
我们将解压出来的文件复制三份出来elasticsearch1、elasticsearch2、elasticsearch3,启动三个节点搭建集群
更改配置文件
依次打开三个elasticsearch中config目录下的下elasticsearch.yml配置文件
vim config/elasticsearch.yml
需要修改的位置如下
#配置文件中未改动的位置我就不展示了
#第一个配置文件改动如下
#集群名称(必须一样)
cluster.name: my-application
#节点名称(必须不一样)
node.name: node-1
#是否可以选举为主节点
node.master: true
#是否存储数据
node.data: true
#本机的IP地址
network.host: 0.0.0.0
#发布地址
network.publish_host: 127.0.0.1
#服务的端口号(在本地配置多个时,请注意修改为不一样的端口)
http.port: 9200
#服务发现端口
transport.tcp.port: 9300
#集群发现IP集合
discovery.seed_hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
#集群选举设置
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
#开启跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization"
#第二个配置文件改动如下
cluster.name: my-application
node.name: node-2
node.master: true
node.data: true
network.host: 0.0.0.0
network.publish_host: 127.0.0.1
http.port: 9201
transport.tcp.port: 9301
discovery.seed_hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization"
#第三个配置文件改动如下
cluster.name: my-application
node.name: node-3
node.master: true
node.data: true
network.host: 0.0.0.0
network.publish_host: 127.0.0.1
http.port: 9202
transport.tcp.port: 9302
discovery.seed_hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization"
启动集群
依次启动三个elasticsearch节点
bin/elasticsearch
通过elasticsearch-head访问 看到如下界面就代表搭建成功。elasticsearch-head安装请参考上一篇博客 安装Elasticsearch
![](https://img.haomeiwen.com/i9930928/1203446dd4259289.png)
添加用户安全认证
在6.8之前免费版本并不包含安全认证功能,之后版本有开放一些基础认证功能,对于普通用户来说是够用的
- 新增配置,每个集群节点都需要设置。
vim config/elasticsearch.yml
# 在文件的末尾追加
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
- 生成TLS 和身份验证,将会在config下生成elastic-certificates.p12文件,将此文件传到其他两个节点的config目录,注意文件权限
bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""
-
启动集群,es 集群不启动,下面的添加密码操作执行不了。
-
创建Elasticsearch 集群密码。
在主节点上执行就行,数据会自动同步到其他节点
bin/elasticsearch-setup-passwords interactive
执行完会看到如下界面,设置密码就行了。
![](https://img.haomeiwen.com/i9930928/38290d3b0aab7c74.png)
再次访问elasticsearch-head 发现需要输入帐号密码,安装用户认证成功。手动安装elasticsearch-head是不支持用户认证登陆的,请选择chrome插件方式安装,请参考上一篇博客 安装Elasticsearch
![](https://img.haomeiwen.com/i9930928/a5490d3483813070.png)
网友评论