Elasticsearch Docker环境搭建集群

在上文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"]

你可能感兴趣的:(Elasticsearch Docker环境搭建集群)