0.集群搭建报错解决
Caused by: org.elasticsearch.common.breaker.CircuitBreakingException:
[parent] Data too large, data for [<transport_request>] would be [261359078/249.2mb],
which is larger than the limit of [255013683/243.1mb], real usage: [261357568/249.2mb],
new bytes reserved: [1510/1.4kb], usages [request=0/0b, fielddata=642/642b, in_flight_requests=1510/1.4kb, accounting=94619/92.4kb]
云服务器内存4g,1、2号节点设置内存256,3号节点设置1g
执行如下脚本
PUT /_cluster/settings
{
"persistent": {
"indices": {
"breaker": {
"total.limit": "100%"
}
}
}
}
https://www.cnblogs.com/gqdw/p/11032994.html
1.高级操作
1.1.批量操作
1.1.1.批量操作-脚本
1.1.2.批量操作-JavaAPI
实际运用不太可能批量操作里包含增删改操作,一般都是开始引入es时,把数据库里的数据导入es
1.2.导入数据
1.2.1.分析和创建索引
create table `goods` (
`id` double ,
`title` varchar (300),
`price` Decimal (22),
`stock` double ,
`saleNum` double ,
`createTime` datetime ,
`categoryName` varchar (600),
`brandName` varchar (300),
`spec` varchar (600)
);
1.2.2.代码实现
1.3.各种查询
1.3.1.matchAll查询
1.3.2.termQuery查询
1.3.3.match查询
1.3.4.模糊查询
1.3.5.范围查询
1.3.6.queryString查询
1.3.7.布尔查询
1.3.8.聚合查询
1.3.9.高亮查询
1.4.索引别名和重建索引
2.集群管理
2.1.集群介绍
副本分片打乱位置存放,保证任意节点挂了,三个分片还能用。拆分以及分片存放的过程都是es自动完成的
2.2.搭建集群
机器需要4g内存
拷贝副本
cd /opt
cp -r elasticsearch-7.4.0 elasticsearch-7.4.0-itcast1
cp -r elasticsearch-7.4.0 elasticsearch-7.4.0-itcast2
cp -r elasticsearch-7.4.0 elasticsearch-7.4.0-itcast3
创建日志目录 授权
cd /opt
mkdir logs
mkdir data
# 授权给itheima用户
chown -R itheima:itheima ./logs
chown -R itheima:itheima ./data
chown -R itheima:itheima ./elasticsearch-7.4.0-itcast1
chown -R itheima:itheima ./elasticsearch-7.4.0-itcast2
chown -R itheima:itheima ./elasticsearch-7.4.0-itcast3
配置
vim /opt/elasticsearch-7.4.0-itcast1/config/elasticsearch.yml
vim /opt/elasticsearch-7.4.0-itcast2/config/elasticsearch.yml
vim /opt/elasticsearch-7.4.0-itcast3/config/elasticsearch.yml
cluster.name: itcast-es
node.name: itcast-1/2/3
node.master: true
node.data: true
node.max_local_storage_nodes: 3
network.host: 0.0.0.0
http.port: 9201/2/3
transport.tcp.port: 9700/9800/9900
discovery.seed_hosts: ["localhost:9700","localhost:9800","localhost:9900"]
cluster.initial_master_nodes: ["itcast-1", "itcast-2","itcast-3"]
path.data: /opt/data
path.logs: /opt/logs
两个副本设置jvm内存 都设置256m
另外一个是1g
vim /opt/elasticsearch-7.4.0-itcast1/config/jvm.options
-xms:最小内存
-xmx:最大内存
- 云服务需要配置9201 9202 9203三个端口
- esc模式按两次dd,删除一行
- 启动一个节点 访问http://192.168.149.135:9201/_cat/health?v(云服务用公网ip访问)报错,因为只有一个节点,所以此时还没有主节点,集群是不成功的
- 启动两个节点访问http://192.168.149.135:9201/_cat/health?v,展示成功信息
2.3.JavaAPI访问集群
2.4.Kibana管理集群
cd /opt/
cp -r kibana-7.4.0-linux-x86_64 kibana-7.4.0-linux-x86_64-cluster
vim kibana-7.4.0-linux-x86_64-cluster/config/kibana.yml
加入下面的配置
elasticsearch.hosts: ["http://127.0.0.1:9201","http://127.0.0.1:9202","http://127.0.0.1:9203"]
./kibana --allow-root
2.5.集群原理
2.5.1.分片配置
-
默认不设置分片,自动一个主分片,一个副分片,分别放在两个节点上
-
3个主分片,每个主分片有一个副分片
-
任意一个节点挂了,都不影响查询数据,可以手动停止3号节点的服务,java方式依然可以获取到数据
-
手动停止3号节点,es重新把分片进行分配
分片的自平衡
-
再次启动3号节点,6个分片又重新分配到3个节点上
-
分片数一旦设置就不可以更改,究竟如何设置
2.5.2.路由原理
- 文档的id通过hash算法得到一个数值,模与主分片数,得到的值就是主分片的角标,文档存入主分片后,还需要存入对应的副本分片
- 此处与hashmap原理类似,hashmap是用&
- es不让改分片的数量,因为改了分片的数量,所有的文档数据都要打乱,重新往不同的分片进行存储,对es性能影响很大。如果后期数据确实增长的比较多,需要重新设置分片,可以重建索引
2.6.脑裂
- 出现脑裂相当于原本一个集群,现在是两个集群,数据不完整
- 出现脑裂没有什么好的解决办法,所以要尽可能规避
-
三四七八节点由于网络延迟联系不上1号节点,以为1号节点挂了,所以三四七八自己进行选举
-
节点负载
-
jvm回收
-
避免脑裂超时时间配置一般10秒,不是越大越好
2.7.集群扩容
现在集群有三个节点,要增加一个节点,就是扩容,按照搭建集群的流程走一遍即可。注意配置文件node.master: true node.data: true不要同时为true