部署ES集群
首先,ES集群的运行需要大量内存映射,所有我们需要修改linux的配置
vi /etc/sysctl.conf
添加内容,该配置能修改linux对单个进程内存映射的限制
vm.max_map_count=262144
sysctl -p 为从指定的文件加载系统参数,不指定的话默认为/etc/sysctl.conf文件
sysctl -p
我们此处利用docker-compose开启三个ES容器来模拟多台机器,以下为文件信息
version: '2.2'
services:
es01:
image: elasticsearch:7.12.1
container_name: es01 #容器名称
environment:
- node.name=es01 #结点名称
- cluster.name=es-docker-cluster #集群名称,ES会自动将集群名称一样的结点做为一个集群处理
- discovery.seed_hosts=es02,es03 #集群中其他结点的IP地址
- cluster.initial_master_nodes=es01,es02,es03 #初始化主节点,此处将三个结点都设为了候选的主节点
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" #如果服务器配置吃紧,就设置一下内存大小
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic #不想用默认网络名,就设置一下集群网络名
es02:
image: elasticsearch:7.12.1
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- data02:/usr/share/elasticsearch/data
ports:
- 9201:9200
networks:
- elastic
es03:
image: elasticsearch:7.12.1
container_name: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- data03:/usr/share/elasticsearch/data
networks:
- elastic
ports:
- 9202:9200
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
启动
docker-compose up -d
对于ES集群的管理,我们不再使用kibana,转而使用cerebro,双击/bin/cerebro.bat文件启动,访问启动的网站,在网站输入我们ES集群的任意一个结点地址就可以管理
ES集群中,结点有四种类型:
master eligible:备选主节点。主节点用于处理索引库创建,删除等操作(主节点会自动从备选主节点选取)
data:数据结点。存储数据、搜索、聚合还有数据的CRUD等操作都是由它处理的
ingest:在数据被存储前,该结点负责对数据进行过滤处理
coordinating:用于路由,来分配每次请求给哪个结点处理,合并多个结点的处理结果
默认情况下,如果不设置,结点会充当所有四种类型
注意:因为脑裂问题的存在,主节点需要选票数超过(总结点数量+1)/2才能当选,所以我们建议备选主节点个数为奇数