在/usr/local/elasticsearch目录下创建3个文件夹node01、node02、node03
将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
查看,这里三个节点都启动了
通过管理工具查看,这里的node01,按照预期的为master
创建分片为6,副本为2的索引,
集群状态的三种颜色:
green:所有主要分片和复制分片都可用
yellow:所有主要分片可用,但不是所有复制分片都可用
red:不是所有的主要分片都可用
查询集群状态API:GET http://192.168.142.128:9200/_cluster/health
分片和副本
为了将数据添加到Elasticsearch,我们需要索引(index)——一个存储关联数据的地方。实际上,索引只是一个用
来指向一个或多个分片(shards)的“逻辑命名空间(logical namespace)”.
- 一个分片(shard)是一个最小级别“工作单元(worker unit)”,它只是保存了索引中所有数据的一部分。
- 我们需要知道是分片就是一个Lucene实例,并且它本身就是一个完整的搜索引擎。应用程序不会和它直接通信。
- 分片可以是主分片(primary shard)或者是复制分片(replica shard)。
- 索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。
- 复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。
- 当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。