在/usr/local/elasticsearch目录下创建3个文件夹node01、node02、node03

zipkin es 集群 docker compose_数据

将elasticsearch-6.5.4(这是之前普通搭建的elasticsearch)目录下的config目录下的elasticsearch.yml、jvm.options复制到node01目录中,进行修改配置

node01的elasticsearch.yml修改如下

# 设置客户端名字,集群通过这里的名字进行区分,必须相同
cluster.name: es-itcast-cluster
# 设置节点的名字 
node.name: node01
# 是否有资格为master节点 
node.master: true 
# 是否有资格为data节点
node.data: true 
# 如果不需要限制,设置为0.0.0.0
network.host: 192.168.142.128 
# 设置端口,这里是在一台机器用虚拟机搭建集群,必须是不同的端口,
http.port: 9200 
# 设置广播
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["192.168.142.128:9300","192.168.142.128:9301","192.168.142.128:9302"]
# 设置最小的master的数量
discovery.zen.minimum_master_nodes: 1 
# 下面两个为设置允许跨域
http.cors.enabled: true 
http.cors.allow-origin: "*"

node01的jvm.options修改如下 

#测试环境,不能太大否则不够用
-Xms128m
-Xmx128m

将这两个文件分别复制到node02、node03中

node02在node01的elasticsearch.yml的基础上修改如下,

node.name: node02 
node.master: false 
http.port: 9201 
transport.tcp.port: 9301

node03在node01的elasticsearch.yml的基础上修改如下

node.name: node03
node.master: false 
http.port: 9202
transport.tcp.port: 9302

数据的挂载目录:在node01、 node02、 node03的目录在分别创建data目录,并用下面代码修改目录的权限

# 原因,elasticSearch启动不能是root用户,这里修改权限让所有的都可以进行读写

chmod 777 data -R

创建容器,注意与刚刚的文件对应

docker create --name es-node01 --net host -v /usr/local/elasticsearch/node01/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/elasticsearch/node01/jvm.options:/usr/share/elasticsearch/config/jvm.options -v /usr/local/elasticsearch/node01/data:/usr/share/elasticsearch/data elasticsearch:6.5.4 
docker create --name es-node02 --net host -v /usr/local/elasticsearch/node02/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/elasticsearch/node02/jvm.options:/usr/share/elasticsearch/config/jvm.options -v /usr/local/elasticsearch/node02/data:/usr/share/elasticsearch/data elasticsearch:6.5.4 
docker create --name es-node03 --net host -v /usr/local/elasticsearch/node03/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/elasticsearch/node03/jvm.options:/usr/share/elasticsearch/config/jvm.options -v /usr/local/elasticsearch/node03/data:/usr/share/elasticsearch/data elasticsearch:6.5.4

启动

docker start es-node01 es-node02 es-node03

查看,这里三个节点都启动了

zipkin es 集群 docker compose_docker_02

通过管理工具查看,这里的node01,按照预期的为master

zipkin es 集群 docker compose_docker_03

创建分片为6,副本为2的索引,

zipkin es 集群 docker compose_数据_04


集群状态的三种颜色:


green:所有主要分片和复制分片都可用



yellow:所有主要分片可用,但不是所有复制分片都可用



red:不是所有的主要分片都可用



 



查询集群状态API:GET http://192.168.142.128:9200/_cluster/health 


zipkin es 集群 docker compose_数据_05

分片和副本

为了将数据添加到Elasticsearch,我们需要索引(index)——一个存储关联数据的地方。实际上,索引只是一个用
来指向一个或多个分片(shards)的“逻辑命名空间(logical namespace)”.

  • 一个分片(shard)是一个最小级别“工作单元(worker unit)”,它只是保存了索引中所有数据的一部分。
  • 我们需要知道是分片就是一个Lucene实例,并且它本身就是一个完整的搜索引擎。应用程序不会和它直接通信。
  • 分片可以是主分片(primary shard)或者是复制分片(replica shard)。
  • 索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。
  • 复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。
  • 当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。