介绍
介绍
使用Docker搭建服务器运行环境是非常方便的,这一块Elasticsearch就做了非常友好,基本上通过环境变量就可以完成大部分配置。
今天福哥就带着大家使用Docker搭建一个ES的集群环境,别掉队哦~~
集群
分片shard
ES索引会将数据分散到不同的shard当中存储,这样做可以实现多个节点数据的分布式搜索,避免单个节点的故障。一个索引的分片数量在创建之初就必须设计好,后期就不能修改了。
副本replica
ES索引的分片可以设置副本,每一个分片可以设置多个副本,副本可以提高索引的容错性,当某个节点上的某个索引的分片出现了损坏,可以通过副本来进行恢复。
安装
docker-compose-es-cluster.yml
为了发布,福哥使用docker-compose进行docker的配置,官方也是推荐的这种方式。
福哥设计的ES集群是三个节点的,每个ES节点JVM限制最大为512m,三个ES节点名称分别为tfes01、tfes02和tfes03。
最后的docker-compose-es-cluster.yml配置如下:
version: "3.2" services: tfes01: image: registry.tongfu.net:5000/elasticsearch:6.8.15 container_name: tfes01 environment: - node.name=tfes01 - cluster.name=tfes-cluster - discovery.zen.ping.unicast.hosts=tfes01,tfes02,tfes03 - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - /data/docker.data/tfes01/data:/usr/share/elasticsearch/data ports: - 9200:9200 tfes02: image: registry.tongfu.net:5000/elasticsearch:6.8.15 container_name: tfes02 environment: - node.name=tfes02 - cluster.name=tfes-cluster - discovery.zen.ping.unicast.hosts=tfes01,tfes02,tfes03 - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - /data/docker.data/tfes02/data:/usr/share/elasticsearch/data tfes03: image: registry.tongfu.net:5000/elasticsearch:6.8.15 container_name: tfes03 environment: - node.name=tfes03 - cluster.name=tfes-cluster - discovery.zen.ping.unicast.hosts=tfes01,tfes02,tfes03 - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - /data/docker.data/tfes03/data:/usr/share/elasticsearch/data
目录
福哥为每个ES节点建立了一个数据目录,授权目录所有者为1000这是容器里的es用户ID,这些目录会映射到ES容器里面做持久化保存。
启动
准备好了之后就可以启动ES集群了。
docker-compose -f docker-compose-es-cluster.yml up -d
查看节点状态。
curl 'http://localhost:9200/_cat/nodes'
查看集群健康状态。
curl 'http://localhost:9200/_cluster/health?pretty=true'
查看主节点状态,默认情况下集群hosts的第一个节点会被ES选为主节点。
测试
插入数据
福哥往test索引里面插入了三条数据。
curl -X POST -H 'Content-Type: application/json' -d '{"id":1,"name":"鬼谷子叔叔"}' 'http://localhost:9200/test/test' curl -X POST -H 'Content-Type: application/json' -d '{"id":2,"name":"福哥"}' 'http://localhost:9200/test/test' curl -X POST -H 'Content-Type: application/json' -d '{"id":3,"name":"tongfu.net"}' 'http://localhost:9200/test/test'
查看索引信息
查看索引列表信息可以看到test索引的状态是green,文档数量是3个。
curl 'http://localhost:9200/_cat/indices'
查看分片信息
查看分片列表信息可以看到test索引的5个分片被分散到多个节点里面去了。
curl 'http://localhost:9200/_cat/shards'
查询
通过主节点对test索引进行查询。
根据id进行查询。
curl -X POST -H 'Content-Type: application/json' -d '{"query": {"terms": {"id": [2]}}}' 'http://localhost:9200/test/_search?pretty=true'
根据name进行查询。
curl -X POST -H 'Content-Type: application/json' -d '{"query": {"match_phrase": {"name": "叔叔"}}}' 'http://localhost:9200/test/_search?pretty=true'
总结
今天福哥带着大家学习了使用Docker基于ES6搭建ES集群的方法,ES集群在高可用方面和扩容方面要比ES单机要强太多了。
不过,ES集群的维护也需要更多的知识和技巧,后面福哥会陆续将ES集群的各种维护技巧教给大家,敬请期待~~