在上文Elasticsearch & Kibana环境安装中,我们已经安装好了单机版的ES,但通常情况下,ES都会以集群的形式使用,下面介绍集群的搭建以及常见的坑。
1.环境
这里以搭建两个节点来演示,三个及以上方法一样。
准备两个服务器
节点1 | 节点2 | |
---|---|---|
节点名 | es-node1 | es-node2 |
服务器ip | xxx.xxx.xxx.1 | xxx.xxx.xxx.2 |
2.准备文件夹
分别在两台服务器上创建文件夹
data
数据存放目录
config
配置存放目录
logs
日志存放目录
plugins
插件存放目录
mkdir -p /data/elasticsearch/data
mkdir -p /data/elasticsearch/config
mkdir -p /data/elasticsearch/logs
mkdir -p /data/elasticsearch/plugins
3.配置文件
在xxx.xxx.xxx.1(es-node1)的config
文件夹中新建配置文件
cd /data/elasticsearch/config
vi elasticsearch.yml
配置文件内容:
# 设置集群名称,集群内所有节点的名称必须一致。
cluster.name: es-cluster
# 设置节点名称,集群内节点名称必须唯一。
node.name: es-node1
# 表示该节点会不会作为主节点,true表示会;false表示不会
node.master: true
# 当前节点是否用于存储数据,是:true、否:false
node.data: true
# 需求锁住物理内存,是:true、否:false
#bootstrap.memory_lock: true
# 监听地址,用于访问该es
network.host: 0.0.0.0
network.publish_host: xxx.xxx.xxx.1
# es对外提供的http端口,默认 9200
http.port: 9200
# TCP的默认监听端口,默认 9300
transport.tcp.port: 9300
# 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes: 1
# es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["xxx.xxx.xxx.1:9300","xxx.xxx.xxx.2:9300"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["xxx.xxx.xxx.1:9300"]
# 是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
# “*” 表示支持所有域名
http.cors.allow-origin: "*"
同理,在xxx.xxx.xxx.2(es-node2)的config
文件夹中新建配置文件,内容如下
# 设置集群名称,集群内所有节点的名称必须一致。
cluster.name: es-cluster
# 设置节点名称,集群内节点名称必须唯一。
node.name: es-node2
# 表示该节点会不会作为主节点,true表示会;false表示不会
node.master: true
# 当前节点是否用于存储数据,是:true、否:false
node.data: true
# 需求锁住物理内存,是:true、否:false
#bootstrap.memory_lock: true
# 监听地址,用于访问该es
network.host: 0.0.0.0
network.publish_host: xxx.xxx.xxx.2
# es对外提供的http端口,默认 9200
http.port: 9200
# TCP的默认监听端口,默认 9300
transport.tcp.port: 9300
# 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes: 1
# es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["xxx.xxx.xxx.1:9300","xxx.xxx.xxx.2:9300"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["xxx.xxx.xxx.1:9300"]
# 是否支持跨域,是:true,在使用head插件时需要此配置
http.cors.enabled: true
# “*” 表示支持所有域名
http.cors.allow-origin: "*"
4.启动ES
es-node1
docker run -d --network=host --privileged=true -e ES_JAVA_OPTS="-Xms2048m -Xmx2048m" -e TAKE_FILE_OWNERSHIP=true --name es-node1 -v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elasticsearch/data:/usr/share/elasticsearch/data -v /data/elasticsearch/logs:/usr/share/elasticsearch/logs -v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins docker.elastic.co/elasticsearch/elasticsearch:7.6.2
es-node2
docker run -d --network=host --privileged=true -e ES_JAVA_OPTS="-Xms2048m -Xmx2048m" -e TAKE_FILE_OWNERSHIP=true --name es-node2 -v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elasticsearch/data:/usr/share/elasticsearch/data -v /data/elasticsearch/logs:/usr/share/elasticsearch/logs -v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins docker.elastic.co/elasticsearch/elasticsearch:7.6.2
5.验证
打开浏览器访问http://xxx.xxx.xxx.1:9200/_cat/nodes?pretty
如果显示
xxx.xxx.xxx.1 23 68 1 0.19 0.15 0.11 dilm * es-node1
xxx.xxx.xxx.2 9 96 4 1.21 0.48 0.28 dilm - es-node2
则配置成功
6.异常处理
1.如果ES启动后几秒自动关闭,可以使用下面命令查看日志定位问题
docker logs 容器id
2.访问http://xxx.xxx.xxx.1:9200/_cat/nodes?pretty
显示
{
"error": {
"root_cause": [
{
"type": "master_not_discovered_exception",
"reason": null
}
],
"type": "master_not_discovered_exception",
"reason": null
},
"status": 503
}
原因是没有设置初始master节点,需要在配置文件中增加下面配置指定
cluster.initial_master_nodes: ["xxx.xxx.xxx.1:9300"]