当前位置:   article > 正文

ElasticSearch集群

ElasticSearch集群

        我们ES集群主要解决的是这两个问题:海量数据存储问题、单点故障问题

        海量数据存储问题:单机的ES,数据存储能力是有上限的

        单点故障问题:如果单机上的Elasticsearch节点发生故障,整个系统会停止服务,导致数据不可访问甚至丢失,造成损失

        单机的elasticsearch做数据存储,必然面临两个问题:海量数据存储问题、单点故障问题。

·海量数据存储问题:将索引库从逻辑上拆分为N个分片(shard),每一份叫做一个分片,存储到多个节点,多台机器上,这样我的存储能力是多个节点存储能力总和,机器越多,理论存储的上限就可以越高,存储能力就得到提升了:

  单点故障问题:将分片数据做一个备份,并且一个分片的主分片和副分片绝对不能放在同一个节点,避免这个节点挂了,什么都没有了 ,这样可以在一定的程度上解决单点故障问题,当然成本也越高。

部署es集群

        docker-compose:在一个文本文件里描述多个容器的部署方式,从而实现一键部署,描述了三个es节点容器的部署方案;

        部署es集群可以直接使用docker-compose来完成,不过要求你的Linux虚拟机至少有4G的内存空间,我们现在利用三个docker容器模拟3个ed节点(3个机器),容器之间相互隔离:

  1. version: '2.2'
  2. services:
  3. es01:
  4. image: docker.elastic.co/elasticsearch/elasticsearch:7.17.5
  5. container_name: es01
  6. environment:
  7. - node.name=es01
  8. - cluster.name=es-docker-cluster
  9. - discovery.seed_hosts=es02,es03
  10. - cluster.initial_master_nodes=es01,es02,es03
  11. - bootstrap.memory_lock=true
  12. - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  13. ulimits:
  14. memlock:
  15. soft: -1
  16. hard: -1
  17. volumes:
  18. - data01:/usr/share/elasticsearch/data
  19. ports:
  20. - 9200:9200
  21. networks:
  22. - elastic
  23. es02:
  24. image: docker.elastic.co/elasticsearch/elasticsearch:7.17.5
  25. container_name: es02
  26. environment:
  27. - node.name=es02
  28. - cluster.name=es-docker-cluster
  29. - discovery.seed_hosts=es01,es03
  30. - cluster.initial_master_nodes=es01,es02,es03
  31. - bootstrap.memory_lock=true
  32. - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  33. ulimits:
  34. memlock:
  35. soft: -1
  36. hard: -1
  37. volumes:
  38. - data02:/usr/share/elasticsearch/data
  39. networks:
  40. - elastic
  41. es03:
  42. image: docker.elastic.co/elasticsearch/elasticsearch:7.17.5
  43. container_name: es03
  44. environment:
  45. - node.name=es03
  46. - cluster.name=es-docker-cluster
  47. - discovery.seed_hosts=es01,es02
  48. - cluster.initial_master_nodes=es01,es02,es03
  49. - bootstrap.memory_lock=true
  50. - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  51. ulimits:
  52. memlock:
  53. soft: -1
  54. hard: -1
  55. volumes:
  56. - data03:/usr/share/elasticsearch/data
  57. networks:
  58. - elastic
  59. volumes:
  60. data01:
  61. driver: local
  62. data02:
  63. driver: local
  64. data03:
  65. driver: local
  66. networks:
  67. elastic:
  68. driver: bridge

        在这个compose的文件里,其实就是描述了我们要部署的三个es节点的部署方案,es01、es02、es03的写法基本上一致的:

  •         Image镜像:每一个容器都采用的都是elasticSearch7.12.1。
  •         container_name容器的名称
  •         Environment:环境变量
  •         node.name节点名称,在elasticSearch里边,每个节点都要有自己的名字,不能重复。
  •         Cluster.name集群名称,这个就很重要了,elasticSearch天生是支持集群的,你启动多台机器以后,只需要让他们的集群名称一样就可以了。因为集群名称一样,es就会自动把它们组装成一个集群,非常的方便。
  •         Discovery.seed_hosts其实就是集群中的另外两个节点的ip地址,那这里我为什么没有写i p地址呢?是因为docker容器内可以直接用容器名互联
  •         initial_master_nodes:初始化的主节点/配置候选主节点,既然是集群,一定有主从之分
  •         ES_JAVA_OPTS:配置JVM堆内存大小,最小内存和最大内存都配成了512M
  •         Volumes:数据卷  
  •         Port端口映射:注意一下三个节点容器外的端口不能一致

第一步: 

vi /etc/sysctl.conf

 第二步:

​​​​​​​vm.max_map_count = 262144

第三步: 让配置生效

sysctl -p 
  1. [root@db301601 ~]# docker restart es
  2. es
  3. [root@db301601 ~]# docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. 877298bbcfdf elasticsearch:7.12.1 "/bin/tini -- /usr/l…" 22 minutes ago Up 23 seconds 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp es
  6. 881f28a337e6 kibana:7.12.1 "/bin/tini -- /usr/l…" 2 hours ago Up 2 hours 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp kibana
  7. [root@db301601 ~]# vi /etc/sysctl.conf
  8. [root@db301601 ~]# sysctl -p
  9. vm.swappiness = 0
  10. kernel.sysrq = 1
  11. net.ipv4.neigh.default.gc_stale_time = 120
  12. net.ipv4.conf.all.rp_filter = 0
  13. net.ipv4.conf.default.rp_filter = 0
  14. net.ipv4.conf.default.arp_announce = 2
  15. net.ipv4.conf.lo.arp_announce = 2
  16. net.ipv4.conf.all.arp_announce = 2
  17. net.ipv4.tcp_max_tw_buckets = 5000
  18. net.ipv4.tcp_syncookies = 1
  19. net.ipv4.tcp_max_syn_backlog = 1024
  20. net.ipv4.tcp_synack_retries = 2
  21. net.ipv4.tcp_slow_start_after_idle = 0
  22. vm.max_map_count = 262144
  23. [root@db301601 ~]#

第四步:运行

如果报错请看这篇博客: docker-compose: command not found-CSDN博客

docker-compose up -d

        我们可以用kibana去监控集群的状态,但是kibana默认只能连接到其中的一个节点,并且还依赖x-pack,所以采用cerebro:

然后你输入节点的地址,就可以访问虚拟机上任意节点的地址了:

集群下的数据查询、存储是什么样子的呢 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/504836?site
推荐阅读
相关标签
  

闽ICP备14008679号