1.前置准备
前面我们部署过单机版的ES服务,那集群与单机差别不是很大,先准备3台服务器,我这里使用虚拟机分别为:172.10.20.35,172.10.20.56,172.10.20.59
以下是我设计的服务器信息安排
IP 监听端口 主机名 es实例名称 版本
172.10.20.56 9201/9301 elastic node-a 7.4.0
172.10.20.35 9201/9301 elastic node-b 7.4.0
172.10.20.59 9201/9301 elastic node-c 7.4.0
2.下载安装包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-linux-x86_64.tar.gz
3.创建集群目录
3.1 node-a集群实例操作
#创建集群存储主目录
mkdir /usr/local/elasticsearch-cluster
#解压到集群目录下
tar zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz -C /usr/local/elasticsearch-cluster
#切换到目录下
cd /usr/local/elasticsearch-cluster
#修改解压后的文件名为 elasticsearch-a,(为了方便区分根据节点名)
mv elasticsearch-7.4.0 elasticsearch-a
# 创建数据存储目录
mkdir -p /usr/local/elasticsearch-cluster/elasticsearch-a/data
# 创建日志存储目录
mkdir -p /usr/local/elasticsearch-cluster/elasticsearch-a/logs
3.2 node-b集群实例操作
#创建集群存储主目录
mkdir /usr/local/elasticsearch-cluster
#解压到集群目录下
tar zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz -C /usr/local/elasticsearch-cluster
#切换到目录下
cd /usr/local/elasticsearch-cluster
#修改解压后的文件名为 elasticsearch-b,(为了方便区分根据节点名)
mv elasticsearch-7.4.0 elasticsearch-b
# 创建数据存储目录
mkdir -p /usr/local/elasticsearch-cluster/elasticsearch-b/data
# 创建日志存储目录
mkdir -p /usr/local/elasticsearch-cluster/elasticsearch-b/logs
3.3 node-c集群实例操作
#创建集群存储主目录
mkdir /usr/local/elasticsearch-cluster
#解压到集群目录下
tar zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz -C /usr/local/elasticsearch-cluster
#切换到目录下
cd /usr/local/elasticsearch-cluster
#修改解压后的文件名为 elasticsearch-c,(为了方便区分根据节点名)
mv elasticsearch-7.4.0 elasticsearch-c
# 创建数据存储目录
mkdir -p /usr/local/elasticsearch-cluster/elasticsearch-c/data
# 创建日志存储目录
mkdir -p /usr/local/elasticsearch-cluster/elasticsearch-c/logs
注:安装包不用下载多次可以使用SCP命令传输到另外两台示例:
scp -r elasticsearch-7.4.0-linux-x86_64.tar.gz root@172.10.20.56:/usr/local
4. 各个节点elasticsearch.yml文件修改
4.1 node-a的elasticsearch.yml文件修改
文件路径:/usr/local/elasticsearch-cluster/elasticsearch-a/config
#配置es的集群名称,同一个集群中的多个节点使用相同的标识
#如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
cluster.name: my-es-cluster
#节点名称
node.name: node-a
#是不是有资格竞选主节点
node.master: true
#是否存储数据
node.data: true
#最大集群节点数
node.max_local_storage_nodes: 3
#数据存储路径
path.data: /usr/local/elasticsearch-cluster/elasticsearch-a/data
#日志存储路径
path.logs: /usr/local/elasticsearch-cluster/elasticsearch-a/logs
#节点所绑定的IP地址,并且该节点会被通知到集群中的其他节点
#通过指定相同网段的其他节点会加入该集群中 0.0.0.0任意IP都可以访问elasticsearch
network.host: 172.10.20.56
#对外提供服务的http端口,默认为9200
http.port: 9201
#内部节点之间沟通端口
transport.tcp.port: 9301
#es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["172.10.20.56:9301","172.10.20.59:9301","172.10.20.35:9301"]
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node-a", "node-b","node-c"]
#ES默认开启了内存地址锁定,为了避免内存交换提高性能。但是Centos6不支持SecComp功能,启动会报错,所以需要将其设置为false
bootstrap.memory_lock: false
# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"
4.2 node-b的elasticsearch.yml文件修改
#配置es的集群名称,同一个集群中的多个节点使用相同的标识
#如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
cluster.name: my-es-cluster
#节点名称
node.name: node-b
#是不是有资格竞选主节点
node.master: true
#是否存储数据
node.data: true
#最大集群节点数
node.max_local_storage_nodes: 3
#数据存储路径
path.data: /usr/local/elasticsearch-cluster/elasticsearch-b/data
#日志存储路径
path.logs: /usr/local/elasticsearch-cluster/elasticsearch-b/logs
#节点所绑定的IP地址,并且该节点会被通知到集群中的其他节点
#通过指定相同网段的其他节点会加入该集群中 0.0.0.0任意IP都可以访问elasticsearch
network.host: 172.10.20.35
#对外提供服务的http端口,默认为9200
http.port: 9201
#内部节点之间沟通端口
transport.tcp.port: 9301
#es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["172.10.20.56:9301","172.10.20.59:9301","172.10.20.35:9301"]
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node-a", "node-b","node-c"]
#ES默认开启了内存地址锁定,为了避免内存交换提高性能。但是Centos6不支持SecComp功能,启动会报错,所以需要将其设置为false
bootstrap.memory_lock: false
# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"
4.3 node-c的elasticsearch.yml文件修改
#配置es的集群名称,同一个集群中的多个节点使用相同的标识
#如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
cluster.name: my-es-cluster
#节点名称
node.name: node-c
#是不是有资格竞选主节点
node.master: true
#是否存储数据
node.data: true
#最大集群节点数
node.max_local_storage_nodes: 3
#数据存储路径
path.data: /usr/local/elasticsearch-cluster/elasticsearch-c/data
#日志存储路径
path.logs: /usr/local/elasticsearch-cluster/elasticsearch-c/logs
#节点所绑定的IP地址,并且该节点会被通知到集群中的其他节点
#通过指定相同网段的其他节点会加入该集群中 0.0.0.0任意IP都可以访问elasticsearch
network.host: 172.10.20.59
#对外提供服务的http端口,默认为9200
http.port: 9201
#内部节点之间沟通端口
transport.tcp.port: 9301
#es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["172.10.20.56:9301","172.10.20.59:9301","172.10.20.35:9301"]
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node-a", "node-b","node-c"]
#ES默认开启了内存地址锁定,为了避免内存交换提高性能。但是Centos6不支持SecComp功能,启动会报错,所以需要将其设置为false
bootstrap.memory_lock: false
# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"
5. 各个节点启动用户创建
由于ES限制不能使用root 用户启动,与单机版教程一致
#创建用户
adduser elastic
如果要设置密码的话可以使用下面命令
设置用户密码,需要输入两次
passwd elastic
由于以上操作都是用root用户进行的操作,需要对相关的文件夹赋权给elastic用户,使用命令如下
#node-a
chown -R elasticsearch /usr/local/elasticsearch-cluster/elasticsearch-a
#node-b
chown -R elasticsearch /usr/local/elasticsearch-cluster/elasticsearch-b
#node-c
chown -R elasticsearch /usr/local/elasticsearch-cluster/elasticsearch-c
6. 启动集群命令
启动之前,建议针对实际使用场景,设置合适的JVM内存,详见文末附录
# 切换到用户
su elastic
#切换到a节点(分别切换b节点 c节点)
cd /usr/local/elasticsearch-cluster/elasticsearch-a/bin
##控制台启动命令(先进行前台的启动,如果没有报错的情况下再使用下面后台启动)
./elasticsearch
#后台启动命令
#./elasticsearch -d
注:启动小妙招,先不要着急后台启动,直接使用 ./elasticsearch 启动看一下是否报错。若出现报错,再解决问题再启动
附录:
1.修改JVM参数
官网也介绍了如何 设置堆大小。
默认情况,ES 告诉 JVM 使用一个最小和最大都为 1GB 的堆。但是到了生产环境,这个配置就比较重要了,确保 ES 有足够堆空间可用。
ES 使用 Xms(minimum heap size) 和 Xmx(maxmimum heap size) 设置堆大小。你应该将这两个值设为同样的大小。
Xms 和 Xmx 不能大于你物理机内存的 50%。
设置的示例:
切换到 conf/
打开 vim jvm.options
建议:可用 RAM 的 50%,最多最大 30GB RAM,以避免垃圾回收。
官方文档最大指 32 GB,官网JVM最大值设置