本文以及后面的系列均已ElasticSearch7.X的版本讲解,欢迎支持!
环境说明:
centos7 、 elasticsearch7.2.0 、 同一个机子安装3个节点 、 7.x版本自带JDK
一、下载并解压
下载地址:https://www.elastic.co/cn/downloads/elasticsearch
二、配置
vim config/elasticsearch.yml
# 集群名称
cluster.name: geektime
# 是否锁住内存
bootstrap.memory_lock: false
# 连接地址
network.host: 192.168.2.101
# 候选主节点列表
discovery.seed_hosts: ["192.168.2.101:9301","192.168.2.101:9302","192.168.2.101:9303"]
# 初始化集群主节点列表
cluster.initial_master_nodes: ["node1","node2","node3"]
# 开启跨域访问支持,默认为false
http.cors.enabled: true
# # 跨域访问允许的域名地址,(允许所有域名)以上使用正则
http.cors.allow-origin: "*"
jvm配置
# 默认都是1g
-Xms2g
-Xmx2g
三、启动集群
# 需要用非root用户启动
#创建数据目录和日志目录
cd data; mkdir data1 data2 data3
cd logs; mkdir logs1 logs2 logs3
# 启动(同一台机子)
bin/elasticsearch -E node.name=node1 -E cluster.name=geektime -E path.data=data/data1 -E path.logs=logs/logs1 -E http.port=9201 -E transport.tcp.port=9301 -E node.master=true -E node.data=true -d
bin/elasticsearch -E node.name=node2 -E cluster.name=geektime -E path.data=data/data2 -E path.logs=logs/logs2 -E http.port=9202 -E transport.tcp.port=9302 -E node.master=true -E node.data=false -d
bin/elasticsearch -E node.name=node3 -E cluster.name=geektime -E path.data=data/data3 -E path.logs=logs/logs3 -E http.port=9203 -E transport.tcp.port=9303 -E node.master=true -E node.data=false -d
四、访问
http://192.168.2.101:9201/_cat/nodes?v
http://192.168.2.101:9201/_cluster/health?pretty
配置详解:
1.network.host
network.host 兼有publish_host和bind_host两者的功能。
network.publish_host:是elasticsearch与其他集群机器通信的地址
network.bind_host:是设置控制Elasticsearch侦听的网络接口的地址。
注意:network.host设置为0.0.0.0 , 即将绑定到所有网络接口, 内外网都可以访问 network.host设置为内网ip, 即只能内网访问 network.host设置为外网ip, 即只能外网访问 network.host设置为内网127.0.0.1, 即只能本机访问(集群通信也只能本机)
publish_host和bind_host应用场景: 场景: 我在数据中心有一个本地网络,我运行由不同节点组成的elasticsearch集群。每个机器都有两个IP地址,一个用于从外部计算机到达,另一个用于本地连接到同一网络中的其他计算机。 解释: 内部ip(eth1)用于让不同的elasticsearch节点相互通信,发现等 外部ip地址(eth0)是我的web应用程序(在另一个网络中)发出请求的地址 这样,我的Web应用程序位于另一个网络中,可以从bind_host地址访问ES群集,而elasticsearch使用publish_host与集群其他节点通信,相当于内外网都可以正常访问了。 注意(踩坑): 如果采用云主机,因云主机并非真实的两张物理网卡绑定的IP,当配置成内网IP时,外网也可以访问,因为访问外网IP,会自动跳转到内网IP,固其实也是访问内网IP
2.discovery.seed_hosts
elasticsearch 7.x新名称: discovery.seed_hosts
elasticsearch 5.x 6.x : discovery.zen.ping.unicast.hosts
二者含义作用一模一样,只是名字改变
作用: 候选主节点列表
注意:
1、在集群启动前应该配置好,配置为主节点的机子,并非数据节点/协调节点。
若只启动了一个节点(即是主节点也是数据节点),但是该列表配置了3个节点,会报错,无法选主。
2、设置为主节点的节点(即node.master=true)才有机会成为主节点,才能配置在该列表中
3、因选举原因,主节点应配置为奇数个,才能自动选主
3.cluster.initial_master_nodes
elasticsearch 7.x新名称: cluster.initial_master_nodes
elasticsearch 5.x 6.x : cluster.min_master_count
作用:
当第一次启动全新的Elasticsearch集群时,会出现一个集群引导步骤,该步骤确定在第一次选举中计票的主要合格节点集。此配置的注意点跟discovery.seed_hosts一致。
4.允许跨域支持
# 开启跨域访问支持,默认为false
http.cors.enabled: true
# # 跨域访问允许的域名地址,(允许所有域名)以上使用正则
http.cors.allow-origin: "*"
5. -E 参数
在集群启动时,加 -E 参数,会覆盖 elasticsearch.yml中的配置。在同一机子启动多节点时方便。
6. 节点类型查看
node.role : m代表候选主节点 , d代表数据节点 , i代表协调节点
master: 带 * 部分为真正的主节点