ElasticSearch集群

ops/2025/2/22 15:42:30/

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

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

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

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

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

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

部署es集群

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

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

version: '2.2'
services:es01:image: docker.elastic.co/elasticsearch/elasticsearch:7.17.5container_name: es01environment:- node.name=es01- cluster.name=es-docker-cluster- discovery.seed_hosts=es02,es03- cluster.initial_master_nodes=es01,es02,es03- bootstrap.memory_lock=true- "ES_JAVA_OPTS=-Xms512m -Xmx512m"ulimits:memlock:soft: -1hard: -1volumes:- data01:/usr/share/elasticsearch/dataports:- 9200:9200networks:- elastices02:image: docker.elastic.co/elasticsearch/elasticsearch:7.17.5container_name: es02environment:- node.name=es02- cluster.name=es-docker-cluster- discovery.seed_hosts=es01,es03- cluster.initial_master_nodes=es01,es02,es03- bootstrap.memory_lock=true- "ES_JAVA_OPTS=-Xms512m -Xmx512m"ulimits:memlock:soft: -1hard: -1volumes:- data02:/usr/share/elasticsearch/datanetworks:- elastices03:image: docker.elastic.co/elasticsearch/elasticsearch:7.17.5container_name: es03environment:- node.name=es03- cluster.name=es-docker-cluster- discovery.seed_hosts=es01,es02- cluster.initial_master_nodes=es01,es02,es03- bootstrap.memory_lock=true- "ES_JAVA_OPTS=-Xms512m -Xmx512m"ulimits:memlock:soft: -1hard: -1volumes:- data03:/usr/share/elasticsearch/datanetworks:- elasticvolumes:data01:driver: localdata02:driver: localdata03:driver: localnetworks:elastic: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 
[root@db301601 ~]# docker restart es
es
[root@db301601 ~]# docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS          PORTS                                                                                  NAMES
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
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
[root@db301601 ~]# vi /etc/sysctl.conf
[root@db301601 ~]# sysctl -p 
vm.swappiness = 0
kernel.sysrq = 1
net.ipv4.neigh.default.gc_stale_time = 120
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_slow_start_after_idle = 0
vm.max_map_count = 262144
[root@db301601 ~]# 

第四步:运行

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

docker-compose up -d

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

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

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


http://www.ppmy.cn/ops/18817.html

相关文章

山东专升本计算机基础 --- Windows 10 操作系统安全

文章目录 Windows 10 操作系统安全1、Windows 10 系统安装的安全2、系统帐户安全3、应用安全策略4、网络安全策略 Windows 10 操作系统安全 1、Windows 10 系统安装的安全 操作系统的安全和安装操作系统的选项密切相关。 选择 NTFS 文件格式分区组件的定制安装 Windows 10 …

常见的css面试题(持续更新,欢迎补充)

目录 1. 什么情况下设置margin会造成margin塌陷? 怎么解决? 2. css的选择器的优先级,怎么判断谁的优先级更高? 总结面试常问的css相关面试题~ 1. 什么情况下设置margin会造成margin塌陷? 怎么解决? 通常遇见margin塌陷&…

linux命令ar使用说明

ar 建立或修改备存文件,或是从备存文件中抽取文件 补充说明 ar命令 是一个建立或修改备存文件,或是从备存文件中抽取文件的工具,ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属…

MVP+敏捷开发

MVP敏捷开发 1. 什么是敏捷开发? 敏捷开发是一种软件开发方法论,旨在通过迭代、自组织的团队和持续反馈,快速响应需求变化并交付高质量的软件。相较于传统的瀑布模型,敏捷开发强调灵活性、适应性和与客户的紧密合作。敏捷开发方…

游戏发行困境及OgGame云游戏解决方案简述

随着全球化浪潮的持续推进,中国游戏开发者们不再满足于国内市场的发展,而是开始将目光投向更为广阔的海外市场。这一趋势的崛起背后,是中国企业意识到国际化是其发展的必由之路,也是游戏行业突破国内困境的体现。本文将简要阐述游…

c++补充

构造函数、析构函数 #include <iostream> using namespace std;// 构造函数、析构函数 // --- "构造函数"类比生活中的"出厂设置" --- // --- "析构函数"类比生活中的"销毁设置" --- // 如果我们不写这两种函数&#xff0c;编译…

Linux之线程管理

目录 第1关&#xff1a;创建线程 任务描述 相关知识 使用pthread_create函数创建线程 编程要求 答案&#xff1a; 第2关&#xff1a;线程挂起 任务描述 相关知识 使用pthread_join挂起线程 编程要求 答案&#xff1a; 第3关&#xff1a;线程终止 任务描述 相关知识 使用pthread…

人工智能对数据分析领域的影响是什么?

人工智能&#xff08;AI&#xff09;对数据分析领域的影响深远且不断演进。这一领域的技术革新和应用拓展正在推动数据分析从传统的基于规则的方法转变为基于机器学习和深度学习的自动化方法。 人工智能极大地提高了数据分析的效率和准确性。传统的数据分析通常依赖于分析师的…