准备服务器
主机 | IP |
---|---|
es01 | 10.0.0.71 |
es02 | 10.0.0.72 |
es03 | 10.0.0.73 |
时间同步
1 2 3 |
[root@es01 ~]# ntpdate time1.aliyun.com [root@es02 ~]# ntpdate time1.aliyun.com [root@es03 ~]# ntpdate time1.aliyun.com |
安装java环境
1 2 3 4 5 6 7 |
[root@es01 ~]# scp jdk-8u181-linux-x64.rpm 172.16.1.72:/root/ [root@es01 ~]# scp jdk-8u181-linux-x64.rpm 172.16.1.73:/root/ [root@es01 ~]# yum localinstall -y jdk-8u181-linux-x64.rpm [root@es02 ~]# yum localinstall -y jdk-8u181-linux-x64.rpm [root@es03 ~]# yum localinstall -y jdk-8u181-linux-x64.rpm |
安装ES
1 2 3 4 5 6 7 8 9 10 11 |
[root@es01 ~]# scp elasticsearch-6.6.0.rpm 172.16.1.72:/root [root@es01 ~]# scp elasticsearch-6.6.0.rpm 172.16.1.73:/root [root@es01 ~]# rpm -ivh elasticsearch-6.6.0.rpm [root@es02 ~]# rpm -ivh elasticsearch-6.6.0.rpm [root@es03 ~]# rpm -ivh elasticsearch-6.6.0.rpm [root@es01 ~]# systemctl daemon-reload [root@es02 ~]# systemctl daemon-reload [root@es03 ~]# systemctl daemon-reload |
配置ES
第一台机器的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@es01 ~]# grep '^[a-z]' /etc/elasticsearch/elasticsearch.yml #集群的名称 cluster.name: es-cluster node.name: es-1 path.data: /data/es/data path.logs: /data/es/log bootstrap.memory_lock: true network.host: 10.0.0.71,127.0.0.1,172.16.1.71 http.port: 9200 #集群中的服务器ip地址 discovery.zen.ping.unicast.hosts: ["172.16.1.71", "172.16.1.72"] #选举主节点时投票的机器数 discovery.zen.minimum_master_nodes: 2 |
第二台机器的配置
1 2 3 4 5 6 7 8 9 10 11 |
[root@es02 ~]# grep '^[a-z]' /etc/elasticsearch/elasticsearch.yml cluster.name: es-cluster node.name: es-2 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch bootstrap.memory_lock: true network.host: 172.16.1.72,10.0.0.72,127.0.0.1 http.port: 9200 discovery.zen.ping.unicast.hosts: ["172.16.1.72", "172.16.1.73"] discovery.zen.minimum_master_nodes: 2 |
第三台机器的配置
1 2 3 4 5 6 7 8 9 10 11 |
[root@es03 ~]# grep '^[a-z]' /etc/elasticsearch/elasticsearch.yml cluster.name: es-cluster node.name: es-3 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch bootstrap.memory_lock: true network.host: 172.16.1.73,10.0.0.73,127.0.0.1 http.port: 9200 discovery.zen.ping.unicast.hosts: ["172.16.1.73", "172.16.1.71"] discovery.zen.minimum_master_nodes: 2 |
三台机器都修改启动脚本
1 2 3 4 5 |
[root@es02 ~]# vim /usr/lib/systemd/system/elasticsearch.service [Service] ... ... LimitMEMLOCK=infinity |
启动三台ES
1 2 |
[root@es01 ~]# systemctl start elasticsearch [root@es01 ~]# netstat -lntp | grep java |
集群的介绍
1 2 3 4 5 |
1.集群部署好以后,不论在哪一台节点操作,都可以互相看到数据 2.head插件连接任意一台机器都能看到三台 3.数据会自动调度到多个分片 4.如果主节点的分片出现故障,副节点的分片会自动切换为主分片 5.如果主节点出现问题,那么数据节点会自动切换为主节点 |
查看集群状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
1.查看节点信息 GET _cat/nodes [root@es01 ~]# curl -s -XGET "http://10.0.0.71:9200/_cat/nodes" 2.查看集群状态 GET _cat/health 3.查看集群中的主节点 GET _cat/master 4.查看索引 GET _cat/indices 5.查看分片信息 GET _cat/shards 6.查看指定索引的分片 GET _cat/shards/index |
注意事项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
1.配置集群时,配置集群的IP,不需要把所有机器IP都写到配置文件,只需要有一台机器IP是集群中的 discovery.zen.ping.unicast.hosts: ["172.16.1.71", "172.16.1.72"] 2.集群选举相关参数,一定要设置集群数量的半数以上 discovery.zen.minimum_master_nodes: 2 3.索引创建,默认是一个副本五个分片 4.数据分配时分片颜色变化 1)紫色:数据正在迁移(节点恢复时) 2)黄色:数据正在复制(节点出现问题时) 3)绿色:正常 5.3个节点时 1)0副本情况,一台机器都不能损坏 2)1副本情况,可以一台机器一台机器的坏 3)2副本时,可以同时坏两台 6.索引一旦建立就不能修改分片数量了,但是可以修改副本数 |
监控
1 2 3 4 5 6 7 |
1.监控的时候,不能只监控集群颜色状态 1)集群的节点数 2)集群的状态 3)以上两个内容,有一个改变就告警 2.使用插件监控 |
集群信息修改
修改指定索引的副本数
1 2 3 4 5 |
PUT /index/_settings { "number_of_replicas": 2 } |
修改所有索引的副本数
1 2 3 4 5 |
PUT /_all/_settings { "number_of_replicas": 2 } |
设置分片数
1)创建索引时指定分片书
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#注意:索引一旦创建,分片数不得修改,只能在创建时指定数量 PUT /fenpian { "settings": { "number_of_replicas": 1 # 副本 , "number_of_shards": 3 # 分片 } } #设置所有的分片数为2 PUT _settings { "settings" : { "number_of_replicas" : 2 }} |
2)创建索引规则
1 2 3 4 |
1.每分配一个分片,都会有额外的成本。 2.每个分片本质上就是一个Lucene索引,因此会消耗相应的文件句柄,内存和CPU资源。 3.每个搜索请求会调度到索引的每个分片中。如果分片分散在不同的节点倒是问题不太。但当分片开始竞争相同的硬件资源时,性能便会逐步下降。 4.ES使用词频统计来计算相关性。当然这些统计也会分配到各个分片上。如果在大量分片上只维护了很少的数据,则将导致最终的文档相关性较差。 |
3)企业中一般设置
1 2 3 4 5 |
2个节点:默认分片和副本即可 3个节点:比较重要的数据,配置2个副本,不重要的数据默认1个副本 如果你有3个节点, 则推荐你创建的分片数最多不超过9(3x3)个. 是否有必要在每个节点上只分配一个索引的分片. 另外, 如果给每个分片分配1个副本, 你所需的节点数将加倍. 如果需要为每个分片分配2个副本, 则需要3倍的节点数. |