查看: 418|回复: 1

Elasticsearch的集群

[复制链接]

597

主题

387

回帖

77

日志

管理员

积分
4945
QQ
发表于 2024-5-5 04:57:28 | 显示全部楼层 |阅读模式
集群的理解
ES的集群和Redis 的集群在概念上都大差不离,都是主从分离机制他们都有一个容错机制这个容错机制都是差不多的,当某个主分片宕机时这个主分片的备分片就会通过选举成为主分片,然后当这个新的主分片完成以后整个集群的状态就会变成黄色,因为少了一个备分片,然后当重启宕机的主机后,这个前主机就会变成备分片,然后新的主分片会自动去这个备分片中拷数据,这样做的好处是避免前主机宕机时同步延迟造成的一部分数据还没有同步过去的数据丢失问题

集群的搭建
不同的主机使用同样的端口不同的ip地址,同一台主机使用同一个ip不同的端口

配置说明:
  1. - cluster.name

  2. 集群名,自定义集群名,默认为elasticsearch,建议修改,因为低版本多播模式下同一网段下相同集群名会自动加入同一集群,如生产环境这样易造成数据运维紊乱。

  3. - node.name

  4. 节点名,同一集群下要求每个节点的节点名不一致,起到区分节点和辨认节点作用

  5. - node.master

  6. 是否为主节点,选项为true或false,当为true时在集群启动时该节点为主节点,在宕机或任务挂掉之后会选举新的主节点,恢复后该节点依然为主节点

  7. - node.data

  8. 是否处理数据,选项为true或false。负责数据的相关操作

  9. - path.data

  10. 默认数据路径,可用逗号分隔多个路径

  11. - path.logs

  12. 默认日志路径

  13. - bootstrap.mlockall

  14. 内存锁,选项为true或false,用来确保用户在es-jvm中设置的ES_HEAP_SIZE参数内存可以使用一半以上而又不溢出

  15. - network.host

  16. 对外暴露的host,0.0.0.0时暴露给外网

  17. - http.port

  18. 对外访问的端口号,默认为9200,所以外界访问该节点一般为http://ip:9200/

  19. - transport.tcp.port

  20. 集群间通信的端口号,默认为9300

  21. - discovery.zen.ping.unicast.hosts

  22. 集群的ip集合,可指定端口,默认为9300,如 ["192.168.1.101","192.168.1.102"]

  23. - discovery.zen.minimum_master_nodes

  24. 最少的主节点个数,为了防止脑裂,最好设置为(总结点数/2 + 1)个

  25. - discovery.zen.ping_timeout

  26. 主节点选举超时时间设置

  27. - gateway.recover_after_nodes

  28. 值为n,网关控制在n个节点启动之后才恢复整个集群

  29. - node.max_local_storage_nodes

  30. 值为n,一个系统中最多启用节点个数为n

  31. - action.destructive_requires_name

  32. 选项为true或false,删除indices是否需要现实名字
复制代码
修改es配置

  1. - Node1-配置

  2. # 统一的集群名
  3. cluster.name: my-ealsticsearch
  4. # 当前节点名
  5. node.name: node-1
  6. # 对外暴露端口使外网访问
  7. network.host: 127.0.0.1
  8. # 对外暴露端口
  9. http.port: 9201
  10. #集群间通讯端口号
  11. transport.tcp.port: 9301
  12. #集群的ip集合,可指定端口,默认为9300
  13. discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]
复制代码
Node2-配置

  1. # 统一的集群名
  2. cluster.name: my-ealsticsearch
  3. # 当前节点名
  4. node.name: node-2
  5. # 对外暴露端口使外网访问
  6. network.host: 127.0.0.1
  7. # 对外暴露端口
  8. http.port: 9202
  9. #集群间通讯端口号
  10. transport.tcp.port: 9302
  11. #集群的ip集合,可指定端口,默认为9300
  12. discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]
复制代码
Node3-配置

  1. # 统一的集群名
  2. cluster.name: my-ealsticsearch
  3. # 当前节点名
  4. node.name: node-3
  5. # 对外暴露端口使外网访问
  6. network.host: 127.0.0.1
  7. # 对外暴露端口
  8. http.port: 9203
  9. #集群间通讯端口号
  10. transport.tcp.port: 9303
  11. #集群的ip集合,可指定端口,默认为9300
  12. discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]
复制代码

分别启动三个ES节点 , 访问:http://127.0.0.1:9201/



上士闻道,勤而行之;中士闻道,若存若亡;下士闻道,大笑之。不笑不足以为道!
回复 关闭延时

使用道具 举报

597

主题

387

回帖

77

日志

管理员

积分
4945
QQ
发表于 2024-5-5 04:58:03 | 显示全部楼层
连接集群

修改kibana配置

  1. elasticsearch.url: "http://localhost:9201"
复制代码
jpa操作ES

导入依赖

  1. <dependency>
  2. <groupId>org.elasticsearch.client</groupId>
  3. <artifactId>transport</artifactId>
  4. <version>5.2.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.logging.log4j</groupId>
  8. <artifactId>log4j-api</artifactId>
  9. <version>2.7</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.apache.logging.log4j</groupId>
  13. <artifactId>log4j-core</artifactId>
  14. <version>2.7</version>
  15. </dependency>
复制代码

编写工具

  1. public class ESClientUtil {

  2. public static TransportClient getClient(){
  3. Settings settings = Settings.builder()
  4. .put("cluster.name","my-ealsticsearch")
  5. .put("client.transport.sniff", true).build();

  6. TransportClient client = null;
  7. try {
  8. client = new PreBuiltTransportClient(settings)
  9. .addTransportAddress(
  10. new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));
  11. } catch (UnknownHostException e) {
  12. e.printStackTrace();
  13. }
  14. return client;
  15. }
  16. }
复制代码

添加文档

  1. @Test
  2. public void testAdd() {
  3. //获取客户端对象
  4. TransportClient client = ESClientUtil.getClient();

  5. //创建索引
  6. IndexRequestBuilder indexRequestBuilder = client.prepareIndex("shopping", "user", "1");
  7. Map<String,Object> data = new HashMap<>();
  8. data.put("id",1);
  9. data.put("username","zs");
  10. data.put("age",11);
  11. //获取结果
  12. IndexResponse indexResponse = indexRequestBuilder.setSource(data).get();

  13. System.out.println(indexResponse);
  14. client.close();
  15. }
复制代码

查询

  1. @Test
  2. public void testSearch() throws Exception{
  3. //获取客户端对象
  4. TransportClient client = ESClientUtil.getClient();

  5. //设置需要查询的索引库
  6. SearchRequestBuilder searchRequestBuilder = client.prepareSearch("shopping");
  7. //设置类型表
  8. searchRequestBuilder.setTypes("user");
  9. //设置分页条件
  10. searchRequestBuilder.setFrom(0);
  11. searchRequestBuilder.setSize(10);
  12. //设置排序条件
  13. searchRequestBuilder.addSort("age", SortOrder.ASC);

  14. //拼接组合
  15. BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
  16. //设置必须匹配的条件
  17. List<QueryBuilder> must = boolQueryBuilder.must();
  18. must.add(QueryBuilders.matchQuery("sex", "1"));

  19. //设置过滤条件
  20. List<QueryBuilder> filter = boolQueryBuilder.filter();
  21. //设置范围
  22. filter.add(QueryBuilders.rangeQuery("age").lte(20).gte(10));
  23. //设置过滤的id
  24. //filter.add(QueryBuilders.termQuery("id",11));


  25. searchRequestBuilder.setQuery(boolQueryBuilder);
  26. SearchResponse searchResponse = searchRequestBuilder.get();
  27. SearchHits hits = searchResponse.getHits();
  28. System.out.println("条数:"+hits.getTotalHits());
  29. for (SearchHit hit : hits.getHits()) {
  30. System.out.println(hit.getSource());

  31. }
  32. client.close();
  33. }
复制代码


上士闻道,勤而行之;中士闻道,若存若亡;下士闻道,大笑之。不笑不足以为道!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

快速回复 返回顶部 返回列表