文章目录

  • 上传Linux的es安装包
  • 创建es用户与配置
  • 启动依次启动每个es节点
  • 启动第一台es
  • 启动第二台es
  • 启动第三台es
  • 关于cluster.initial_master_nodes配置的作用
  • 修改cluster.initial_master_nodes的实验



集群部署之前, 需要先准备三台能够相互访问的centos7 虚拟机, 可以参考如下的链接.



上传Linux的es安装包

参考如下文章

再次执行解压缩
把es解压缩到上一级目录
cd /opt/module/software/tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz -C ../ 简化名称为es-cluster
mv elasticsearch-7.8.0/ es-cluster 修改完成后, 视频中使用的是xsync 进行文件分发. 这个工具配置较繁琐.
可以看教程
还有b站的视频
https://www.bilibili.com/video/BV1Qp4y1n7EN?p=28 直接使用xshell的xftp进行复制到各个虚拟机也行.
但之后发现直接复制解压后的文件夹有问题 ,还是把安装包挨个上传到各个虚拟机, 并且修改配置稳妥.

创建es用户与配置

和单节点一样es不允许root用户启动, 需要进行用户的创建.
不同的是赋予权限的目录不同
chown -R es:es /opt/module/es-cluster

修改配置文件. 此时的配置文件是集群版本 .

编辑/opt/module/es-cluster/config/elasticsearch.yml 文件

如何将多台esxi整合 三台esxi主机做集群_linux


Linux1的内容如下

# 加入如下配置
# 允许其他机器访问
network.bind_host: 0.0.0.0
#集群名称
cluster.name: cluster-es
#节点名称,每个节点的名称不能重复
node.name: node-1
#ip 地址,每个节点的地址不能重复
network.host: linux1
#是不是有资格主节点
node.master: true
node.data: true
http.port: 9200
# head 插件需要这打开这两个配置
http.cors.allow-origin: "*"
http.cors.enabled: true
http.max_content_length: 200mb
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 master
cluster.initial_master_nodes: ["node-1"]
#es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["linux1:9300","linux2:9300","linux3:9300"]
gateway.recover_after_nodes: 2
network.tcp.keep_alive: true
network.tcp.no_delay: true
transport.tcp.compress: true
#集群内同时启动的数据任务个数,默认是 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

每台机器都要修改如下配置, 与单节点一致.
修改Linux系统文件数的限制, 由于es文件创建较多, 因此需要设置Linux文件数量限制.
修改 vim /etc/security/limits.conf

# 在文件末尾中增加下面内容
# 每个进程可以打开的文件数的限制
es soft nofile 65536
es hard nofile 65536

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

# 在文件末尾中增加下面内容
# 每个进程可以打开的文件数的限制
es soft nofile 65536
es hard nofile 65536
# 操作系统级别对每个用户创建的进程数的限制
* hard nproc 4096
# 注:* 带表 Linux 所有用户名称

修改vim /etc/sysctl.conf

# 在文件中增加下面内容
# 一个进程可以拥有的 VMA(虚拟内存区域)的数量,默认值为 65536
vm.max_map_count=655360

重新加载配置
sysctl -p

由于我是基于linux1复制的虚拟机 , 复制之前上面这些配置已经弄好, 因此不需要再次配置.

启动依次启动每个es节点

启动第一台es

和单节点一样 , 进行启动 . 用es用户
执行bin/elasticsearch
启动后, 如果没有报错, 访问9200端口.
我当时启动没有报错, 但是访问9200一直失败, 关闭防火墙也不行.
后来查阅资料, 是要在elasticsearch.yml文件中增加一行配置,
network.bind_host: 0.0.0.0此配置在单节点中有, 在视频中提供的资料集群中把这一项配置漏掉了.

执行get请求, 查看节点信息

http://192.168.137.161:9200/_cat/nodes 目前只有一个节点信息

如何将多台esxi整合 三台esxi主机做集群_运维_02

启动第二台es

修改第二个节点的elasticsearch.yml信息

如何将多台esxi整合 三台esxi主机做集群_如何将多台esxi整合_03


用es用户进行启动, 有如下的几个报错

报错1 :

bash: bin/elasticsearch: Permission denied_ 还有jdk找不到的报错

原因:

linux2 和3 的es安装包用的是解压后拷贝的, 没有用xsync, 直接拷贝过去有问题. 解决办法就是单独在每个机器上 用压缩包重新解压.报错2 :

linux2 启动后报错, 显示连接127.0.0.1:9300 失败.

原因: 我在linux1上修改了hosts. 把linux1的hosts的配置 127.0.0.1 linux1 进行删除即可.

如何将多台esxi整合 三台esxi主机做集群_bootstrap_04


报错3:

192.168.137.19:9300 connect_exception

此ip是linux2的ip, 说明出口访问异常, 猜测是防火墙的原因.

故关闭防火墙.

systemctl stop firewalld service 关闭后, 果然启动正常了.

如何将多台esxi整合 三台esxi主机做集群_运维_05


执行http://192.168.137.161:9200/_cat/nodes 查看节点信息 有两个节点了.

如何将多台esxi整合 三台esxi主机做集群_如何将多台esxi整合_06

启动第三台es

解压缩. 修改配置

# 加入如下配置
# 允许其他机器访问
network.bind_host: 0.0.0.0
#集群名称
cluster.name: cluster-es
#节点名称,每个节点的名称不能重复
node.name: node-3
#ip 地址,每个节点的地址不能重复
network.host: linux3
#是不是有资格主节点
node.master: true
node.data: true
http.port: 9200
# head 插件需要这打开这两个配置
http.cors.allow-origin: "*"
http.cors.enabled: true
http.max_content_length: 200mb
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 master
cluster.initial_master_nodes: ["node-1"]
#es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["linux1:9300","linux2:9300","linux3:9300"]
gateway.recover_after_nodes: 2
network.tcp.keep_alive: true
network.tcp.no_delay: true
transport.tcp.compress: true
#集群内同时启动的数据任务个数,默认是 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

在root用户下给es用户设置权限
chown -R es:es /opt/module/es-cluster 切换到es用户, 进行启动.

关于cluster.initial_master_nodes配置的作用

在上面一节中, 我第二次启动整个集群, 先启动的是第三台机器.
此时启动会有一个警告如下

[WARN ][o.e.c.c.ClusterFormationFailureHelper] [node-3] master not discovered yet, this node has not previously joined a bootstrapped (v7+) cluster, and this node must discover master-eligible nodes [node-1] to bootstrap a cluster: have discovered [{node-3}{GF4fRGXHSAWUOcZ3iP66-w}{5Jh6nx0iRLO2h–cko06nQ}{linux3}{192.168.137.251:9300}{dilmrt}{ml.machine_memory=1567592448, xpack.installed=true, transform.node=true, ml.max_open_jobs=20}]; discovery will continue using [192.168.137.161:9300, 192.168.137.19:9300] from hosts providers and [{node-3}{GF4fRGXHSAWUOcZ3iP66-w}{5Jh6nx0iRLO2h–cko06nQ}{linux3}{192.168.137.251:9300}{dilmrt}{ml.machine_memory=1567592448, xpack.installed=true, transform.node=true, ml.max_open_jobs=20}] from last-known cluster state; node term 0, last-accepted version 0 in term 0

关键报错是: 大致意思是没有发现主节点. 并且后面有一句话是必须发现能够成为主节点的node1
master not discovered yet, this node has not previously joined a bootstrapped (v7+) cluster, and this node must discover master-eligible nodes [node-1] to bootstrap a cluster this node must discover master-eligible nodes [node-1] to bootstrap a cluster:

原因在于如下的配置, 只指定了node-1才能成为主节点.
cluster.initial_master_nodes: ["node-1"]

当我把node1节点启动后, 日志打印如下

[INFO ][o.e.c.s.MasterService ] [node-1] elected-as-master ([1] nodes joined)[{node-1}{PHS2i47vS_WZnMFwgLqHEA}{NhtTqGdCTmKPl1aQLPXw4w}{linux1}{192.168.137.161:9300}{dilmrt}{ml.machine_memory=1567592448, xpack.installed=true, transform.node=true, ml.max_open_jobs=20} elect leader, BECOME_MASTER_TASK, FINISH_ELECTION], term: 10, version: 39, delta: master node changed {previous [], current [{node-1}{PHS2i47vS_WZnMFwgLqHEA}{NhtTqGdCTmKPl1aQLPXw4w}{linux1}{192.168.137.161:9300}{dilmrt}{ml.machine_memory=1567592448, xpack.installed=true, transform.node=true, ml.max_open_jobs=20}]}
 [2022-01-22T07:40:54,256][INFO ][o.e.c.s.ClusterApplierService] [node-1] master node changed {previous [], current [{node-1}{PHS2i47vS_WZnMFwgLqHEA}{NhtTqGdCTmKPl1aQLPXw4w}{linux1}{192.168.137.161:9300}{dilmrt}{ml.machine_memory=1567592448, xpack.installed=true, transform.node=true, ml.max_open_jobs=20}]}, term: 10, version: 39, reason: Publication{term=10, version=39}

可以看到node1被选为了master (elected-as-master )

此时再看node3的日志: 可以看到提示说master 节点发生了改变, node1是mater, 没有出现一开始说的找不到master的警告.

INFO ][o.e.c.s.ClusterApplierService] [node-3] master node changed {previous [], current [{node-1}{PHS2i47vS_WZnMFwgLqHEA}{NhtTqGdCTmKPl1aQLPXw4w}{linux1}{192.168.137.161:9300}{dilmrt}{ml.machine_memory=1567592448, ml.max_open_jobs=20, xpack.installed=true, transform.node=true}]}, added {{node-1}{PHS2i47vS_WZnMFwgLqHEA}{NhtTqGdCTmKPl1aQLPXw4w}{linux1}{192.168.137.161:9300}{dilmrt}{ml.machine_memory=1567592448, ml.max_open_jobs=20, xpack.installed=true, transform.node=true}}, term: 10, version: 40, reason: ApplyCommitRequest{term=10, version=40, sourceNode={node-1}{PHS2i47vS_WZnMFwgLqHEA}{NhtTqGdCTmKPl1aQLPXw4w}{linux1}{192.168.137.161:9300}{dilmrt}{ml.machine_memory=1567592448, ml.max_open_jobs=20, xpack.installed=true, transform.node=true}}

此时再启动node2. 可以在node3的日志看到 node2节点加入到了 集群中.

[INFO ][o.e.c.s.ClusterApplierService] [node-3] added {{node-2}{KaTUABZfRbSa1o_PVDdCyw}{FYv6AEmTSYaLbSptM9vpIQ}{linux2}{192.168.137.19:9300}{dilmrt}{ml.machine_memory=1567592448, ml.max_open_jobs=20, xpack.installed=true, transform.node=true}}, term: 10, version: 43, reason: ApplyCommitRequest{term=10, version=43, sourceNode={node-1}{PHS2i47vS_WZnMFwgLqHEA}{NhtTqGdCTmKPl1aQLPXw4w}{linux1}{192.168.137.161:9300}{dilmrt}{ml.machine_memory=1567592448, ml.max_open_jobs=20, xpack.installed=true, transform.node=true}}
修改cluster.initial_master_nodes的实验

修改cluster.initial_master_nodes的配置如下, 让三个node都能成为master
cluster.initial_master_nodes: ["node-1","node-2","node-3"]

此时我先启动Node3 , 日志打印如下, 此时的意思是没有主节点选举出来, 选举必须至少有2个节点. 现在只有node3一个节点. 与上面不同的是, 没有说必须要node1为主节点.

[WARN ][o.e.c.c.ClusterFormationFailureHelper] [node-3] master not discovered or elected yet, an election requires at least 2 nodes with ids from

此时我启动Node2
node2的日志如下: 可以看到Node2被选为了master

[INFO ][o.e.c.s.MasterService ] [node-2] elected-as-master ([2] nodes joined)[{node-2}
 [INFO ][o.e.c.s.ClusterApplierService] [node-2] master node changed {previous [], current [{node-2}

node3的日志如下 , 提示master节点改变了, 是node2

[INFO ][o.e.c.s.ClusterApplierService] [node-3] master node changed {previous [], current [{node-2}

此时启动node1
由于master已经选举出来, 所以node1也是follower. 其日志如下

[INFO ][o.e.c.s.ClusterApplierService] [node-1] master node changed {previous [], current [{node-2}{KaTUABZfRbSa1o_PVDdCyw}{gm30Wt_uSQKQlbIGwD0P4Q}{linux2}{192.168.137.19:9300}{dilmrt}{ml.machine_memory=1567592448, ml.max_open_jobs=20, xpack.installed=true, transform.node=true}]},

浏览器输入

http://192.168.137.19:9200/_cat/nodes 也能看到Node2是master

如何将多台esxi整合 三台esxi主机做集群_elasticsearch_07


此时我把node2停掉

如何将多台esxi整合 三台esxi主机做集群_如何将多台esxi整合_08


此时node1日志打印如下, 可以看到重新发生了选举 , node1是master了

[INFO ][o.e.c.s.MasterService ] [node-1] elected-as-master ([2] nodes joined)[{node-1}{PHS2i47vS_WZnMFwgLqHEA}{eiMLQ5gnTwq-swgo7BAljw}{linux1}{192.168.137.161:9300}{dilmrt}{ml.machine_memory=1567592448, xpack.installed=true, transform.node=true, ml.max_open_jobs=20} elect leader
 [2022-01-23T12:07:57,965][INFO ][o.e.c.s.ClusterApplierService] [node-1] master node changed {previous [], current [{node-1}

node3 打印如下 , 可以看到提示说node1是master.

[INFO ][o.e.c.s.ClusterApplierService] [node-3] master node changed {previous [], current [{node-1}{PHS2i47vS_WZnMFwgLqHEA}{eiMLQ5gnTwq-swgo7BAljw}{linux1}{192.168.137.161:9300}{dilmrt}{ml.machine_memory=1567592448, ml.max_open_jobs=20, xpack.installed=true, transform.node=true}]}, term: 21, version: 65, reason: ApplyCommitRequest{term=21, version=65, sourceNode={node-1}{PHS2i47vS_WZnMFwgLqHEA}{eiMLQ5gnTwq-swgo7BAljw}{linux1}{192.168.137.161:9300}{dilmrt}{ml.machine_memory=1567592448, ml.max_open_jobs=20, xpack.installed=true, transform.node=true}}
 [2022-01-23T12:07:58,173][INFO ][o.e.c.s.ClusterApplierService] [node-3] removed {{node-2}{

说明如果cluster.initial_master_nodes 配置了所有的节点, 那么会动态选举某个节点为master