Elasticsearch如果做集群的话Master节点至少三台服务器或者三个Master实例加入相同集群,三个Master节点最多只能故障一台Master节点,如果故障两个Master节点,Elasticsearch将无法组成集群.会报错,Kibana也无法启动,因为Kibana无法获取集群中的节点信息。
我们可以在虚拟机中启动三台虚拟机或者购买三台服务器,考虑个人电脑同时打开3台虚拟机太卡或者购买服务器价格过高,可以使用在一台虚拟机或服务器安装三个ES实列,搭建伪集群,ES启动是比较耗内存的,启用之前先配置好内存使用大小限制。
整体步骤:
本文以elasticsearch-7.17.6版本为例:
- 首先将下载解压后的elasticsearch-7.17.6文件夹复制3份,分别命名为elasticsearch-7.17.6-node1、elasticsearch-7.17.6-node2和elasticsearch-7.17.6-node3。
- 然后配置elasticsearch.yml文件内容。
- 然后分别启动node1、node2和node3节点。
- 最后打开浏览器输入:http://192.168.1.1:9201/_cat/health?v ,如果返回的node.total为3,则表示集群搭建成功。
集群的环境如下表所示:
cluster name | node name | IP Addr | http端口/通信端口 |
es-cluster | node1 | 192.168.1.1 | 9201 / 9700 |
es-cluster | node2 | 192.168.1.1 | 9202 / 9800 |
es-cluster | node3 | 192.168.1.1 | 9203 / 9900 |
注意:本测试用例使用一台服务器,使用同一个IP地址,所以将端口号分别设置为不同的。
拷贝文件:
创建数据存储目录
授权给xxx用户
如:chown -R admin:admin ./logs
elasticsearch.yml配置文件:
elasticsearch-7.17.6-node1配置文件:
cluster.name: es_cluster
node.name: node1
node.master: true
node.data: true
node.max_local_storage_nodes: 3
network.host: 0.0.0.0
http.port: 9201
transport.tcp.port: 9700
discovery.seed_hosts: ["localhost:9700", "localhost:9800", "localhost:9900"]
cluster.initial_master_nodes: ["node1", "node2", "node3"]
path.data: /home/admin/es_cluster/data
path.logs: /home/admin/es_cluster/logs
# 详细介绍
# 集群名称
cluster.name: es_cluster
# 节点名称
node.name: node1
# 是不是有资格主节点
node.master: true
# 是否存储数据
node.data: true
# 最大集群数量
node.max_local_storage_nodes: 3
# IP地址
network.host: 0.0.0.0
http.port: 9201
# 节点之间沟通端口
transport.tcp.port: 9700
# 节点发现
discovery.seed_hosts: ["localhost:9700", "localhost:9800", "localhost:9900"]
# 初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node1", "node2", "node3"]
# 数据和存储路径
path.data: /home/admin/es_cluster/data
path.logs: /home/admin/es_cluster/logs
elasticsearch-7.17.6-node2配置文件:
cluster.name: es_cluster
node.name: node2
node.master: true
node.data: true
node.max_local_storage_nodes: 3
network.host: 0.0.0.0
http.port: 9202
transport.tcp.port: 9800
discovery.seed_hosts: ["localhost:9700", "localhost:9800", "localhost:9900"]
cluster.initial_master_nodes: ["node1", "node2", "node3"]
path.data: /home/admin/es_cluster/data
path.logs: /home/admin/es_cluster/logs
elasticsearch-7.17.6-node3配置文件:
cluster.name: es_cluster
node.name: node3
node.master: true
node.data: true
node.max_local_storage_nodes: 3
network.host: 0.0.0.0
http.port: 9203
transport.tcp.port: 9900
discovery.seed_hosts: ["localhost:9700", "localhost:9800", "localhost:9900"]
cluster.initial_master_nodes: ["node1", "node2", "node3"]
path.data: /home/admin/es_cluster/data
path.logs: /home/admin/es_cluster/logs
jvm.options文件配置
修改 jvm.options文件内存使用的大小,分别对三个文件修改
设置es的jvm占用内存参数,防止内存不足的错误或系统卡顿。
-xms:最小内存
-xmx:最大内存
启动节点
启动时可能报的错误:
查看:
sudo sysctl -a|grep vm.max_map_count
修改:
sudo sysctl -w vm.max_map_count=262144
注意:上述方法在服务器或虚拟机重启后会恢复默认值,可以使用下述方法一劳永逸:
在 /etc/sysctl.conf文件最后添加一行
vm.max_map_count=262144
即可永久修改
运行node1节点:
上述可以从日志中看到: master not discovered yet。还没有发现主节点。
访问单个node1节点:
访问集群状态信息:http://192.168.1.1:9201/_cat/health?v显示不成功。
当其它节点也启动时显示成功。
当看到total为3时,表示集群启动成功!
在elasticsearch-header中查看:
为了更好的管理集群,可以在kibana中进行配置。