本文参考了:手把手教你搭建一个 Elasticsearch 集群,并做适当修改。

节点类型

**主节点:**即 Master 节点。主节点的主要职责是和集群操作相关的内容,如创建或删除索引,跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康是非常重要的。默认情况下任何一个集群中的节点都有可能被选为主节点。索引数据和搜索查询等操作会占用大量的cpu,内存,io资源,为了确保一个集群的稳定,分离主节点和数据节点是一个比较好的选择。虽然主节点也可以协调节点,路由搜索和从客户端新增数据到数据节点,但最好不要使用这些专用的主节点。一个重要的原则是,尽可能做尽量少的工作。

**数据节点:**即 Data 节点。数据节点主要是存储索引数据的节点,主要对文档进行增删改查操作,聚合操作等。数据节点对 CPU、内存、IO 要求较高,在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点。

**负载均衡节点:**也称作 Client 节点,也称作客户端节点。当一个节点既不配置为主节点,也不配置为数据节点时,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。

**预处理节点:**也称作 Ingest 节点,在索引数据之前可以先对数据做预处理操作,所有节点其实默认都是支持 Ingest 操作的,也可以专门将某个节点配置为 Ingest 节点。


安装、配置Elasticsearch

安装:https://www.leolan.top/index.php/posts/152.html

每台主机都安装好了 Elasticsearch

可用配置

vim /etc/elasticsearch/elasticsearch.yml
# 直接在文件末尾加上以下内容,再修改node.name,IP,等就行了。

cluster.name: es-clusters
node.name: es-node-1[修改这里,主机名不能重复]
network.host: 0.0.0.0
http.port: 9200
discovery.zen.minimum_master_nodes: 3
gateway.recover_after_nodes: 3
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["192.168.0.35","192.168.0.36","192.168.0.37","192.168.0.38","192.168.0.39"]  #修改这里
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: false    #修改这里
node.data: true       #修改这里

systemctl restart elasticsearch

配置解释

vim /etc/elasticsearch/elasticsearch.yml

# 集群的名称,集群是一个整体,名称都要一致,所有主机都配置成相同的名称,配置示例:
cluster.name: germey-es-clusters

# 节点的名称,每个节点都是集群的一部分,每个节点名称都不要相同,可以按照顺序编号,配置示例:
node.name: es-node-1

# 设置访问的地址和端口,默认是无法公开访问的。
network.host: 0.0.0.0
http.port: 9200

# 是否有资格成为主节点,如果配置为 true,则主机有资格成为主节点,配置为 false 则主机就不会成为主节点,可以去当数据节点或负载均衡节点。
# 注意这里是有资格成为主节点,不是一定会成为主节点,主节点需要集群经过选举产生。这里我配置所有主机都可以成为主节点,因此都配置为 true,配置示例:
参考:https://blog.csdn.net/a19860903/article/details/72467996
# 假如gateway.recover_after_nodes的值为4,那么最好也有4台master,否则会报错主节点不够,启动失败。
node.master: true

# 是否是数据节点,如果配置为 true,则主机就会作为数据节点,注意主节点也可以作为数据节点,当 node.master 和 node.data 均为 false,则该主机会作为负载均衡节点。这里我配置所有主机都是数据节点,因此都配置为 true,配置示例:
# 参考:https://blog.csdn.net/a19860903/article/details/72467996
node.data: true

# 数据和日志路径,注意一下写入权限问题,配置示例:
path.data: /data/elasticsearch/data
path.logs: /var/log/elasticsearch


# 集群通信端口
transport.tcp.port: 9300

# 集群主机地址 
#通过 discovery.zen.ping.unicast.hosts 可以配置集群的主机地址,配置之后集群的主机之间可以自动发现,这里我配置的是内网地址,配置示例(所有节点的IP都写进去):
discovery.zen.ping.unicast.hosts: ["10.0.0.4", "10.0.0.5", "10.0.0.6", "10.0.0.7", "10.0.0.8", "10.0.0.9", "10.0.0.10"]
这里请改成你的主机对应的 IP 地址。强烈建议使用内网IP,外网IP容易组网失败或者速度非常慢。

# 节点数目相关配置
# 为了防止集群发生“脑裂”,即一个集群分裂成多个,通常需要配置集群最少主节点数目,通常为 (可成为主节点的主机数目 / 2) + 1,例如我这边可以成为主节点的主机数目为 7,那么结果就是 4,配置示例:
# 脑裂条件是剩下的节点数大于或等于最少主节点数目,这样就能新建集群;为了避免这种情况,最少主节点数目超过二分之一总节点数就行了。
discovery.zen.minimum_master_nodes: 4

另外还可以配置当最少几个节点恢复之后,集群就正常工作,这里我设置为 4,可以酌情修改,配置示例:
gateway.recover_after_nodes: 4

# 扩展,插件授权访问(任何主机、插件都可以访问集群)
http.cors.enabled: true
http.cors.allow-origin: "*"

# 启动 Elasticsearch
配置完成之后就可以在每台主机上分别启动 Elasticsearch 服务了,命令如下:

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

所有主机都启动之后,我们在任意主机上就可以查看到集群状态了,命令行如下:
curl -XGET 'http://localhost:9200/_cluster/state?pretty'

可以看到这里输出了集群的相关信息,同时 nodes 字段里面包含了每个节点的详细信息,这样一个基本的集群就构建完成了。

安装 Kibana

安装一个 Kibana 来帮助可视化管理 Elasticsearch,只需要任意一台主机安装即可,因为集群是一体的,所以 Kibana 在任意一台主机只要能连接到 Elasticsearch 即可。

集群管理:建议真机安装Kibana;浏览器安装head插件。

安装参考:https://www.leolan.top/index.php/posts/152.html

配置:

vim /etc/kibana/kibana.yml
server.port: 5601
server.host: "0.0.0.0"

# 启动服务
systemctl daemon-reload
systemctl enable kibana
systemctl start kibana


# 连接elasticsearch(由于版本区别,参考:安装Kibana中的“安装X-Pack(身份认证)”部分)
# 配置身份认证,任意一台主机修改之后,一台修改,多台生效。
elasticsearch.url: "http://192.168.18.59:9200"
# 有密码就再加两行
elasticsearch.username: "elastic"
elasticsearch.password: "123456"


修改和添加账户,在 Management -> Security -> User/Roles 里面。


# 开启内存锁
每台主机都要开启,方法见:https://www.leolan.top/index.php/posts/152.html#directory0161492282163929087

# 安装中文分词插件,一个节点安装就行了。
见:https://www.leolan.top/index.php/posts/152.html#directory0161492282163929084


# 主机监控
到此为止,我们的 Elasticsearch 集群就搭建完成了。
最后我们看下 Kibana 的部分功能,看下整个 Elasticsearch 有没有在正常工作。
访问 Kibana,打开 Management -> Elasticsearch ->Index Management,即可看到当前有的一些索引和状态

打开 Monitoring,可以查看 Elasticsearch 和 Kibana 的状态

进一步点击 Nodes,可以查看各个节点的状态

打开任意节点,可以查看当前资源状况变化

参考:
https://blog.csdn.net/archer119/article/details/76589189
https://blog.csdn.net/a19860903/article/details/72467996
https://es.xiaoleilu.com/020_Distributed_Cluster/30_Scale_more.html


第三方工具

大牛写了ik分词插件的项目:https://github.com/medcl/elasticsearch-proxy


关闭集群

# 禁止分片自动分布
curl -XPUT 'http://localhost:9200/_cluster/settings' -H 'Content-type':'application/json' -d '{"persistent": {"cluster.routing.allocation.enable": "none"}}'
# 同步刷新
curl -XPOST 'http://localhost:9200/_flush/synced'

参考资料:https://www.cnblogs.com/wangzhen3798/p/9959260.html

文章作者: Leo
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LeoLan的小站
环境搭建 Elasticsearch集群 ELK Elasticsearch
喜欢就支持一下吧