选择两台服务器搭建最简易集群
- cluster01 192.168.0.132
- cluster02 192.168.0.133
cluster01节点
编写docker-compose.yml
version: '2.2'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
container_name: es01
environment:
- node.name= "es01" #集群中节点名称,唯一
- cluster.name=es-docker-cluster #集群名称
#- discovery.type=single-node #启动但实例时需要打开,并关闭discovery.seed_hosts和cluster.initial_master_nodes
- discovery.seed_hosts=192.168.0.133 #其他节点名称
- cluster.initial_master_nodes=192.168.0.133,192.168.0.132 #可选的master节点
- bootstrap.memory_lock=true #锁定物理内存地址,防止es内存被交换出去,也就是避免es使用swap交换分区,频繁的交换,会导致IOPS变高
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" #jvm堆栈大小
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- /opt/clusters_test/Elasticsearch/plugins:/usr/share/elasticsearch/plugins
- /opt/clusters_test/Elasticsearch/data:/usr/share/elasticsearch/data
- /opt/clusters_test/Elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- 9200:9200
- 9300:9300
插件
一般插件可放到docker里的/usr/share/elasticsearch/plugins下使用,做好文件映射就好
数据
将docker产生的数据映射到本地服务器上
配置文件elasticsearch.yml
cluster.name: "es-docker-cluster" #集群名称
network.host: 0.0.0.0
network.publish_host: 192.168.0.132 ## 改成相应的 node ip
node.ingest: true #开启es预处理功能,因为没有引入logstash,但需要对日志进行分割
cluster02节点
编写docker-compose.yml
version: '2.2'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
#- discovery.type=single-node #启动但实例时需要打开,并关闭discovery.seed_hosts和cluster.initial_master_nodes
- discovery.seed_hosts=192.168.0.132
- cluster.initial_master_nodes=192.168.0.133,192.168.0.132
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1G -Xmx1G" #xms与xmx需要一致
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- /opt/clusters_test/Elasticsearch/plugins:/usr/share/elasticsearch/plugins
- /opt/clusters_test/Elasticsearch/data:/usr/share/elasticsearch/data
- /opt/clusters_test/Elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- 9200:9200
- 9300:9300
配置文件elasticsearch.yml
#es02
cluster.name: "es-docker-cluster"
network.host: 0.0.0.0
network.publish_host: 192.168.0.133 ## 改成相应的 node ip
node.ingest: true
注意
文件挂载权限问题
由于es在docker运行时需要用到elasticsearch用户去操作数据和日志目录,可能会遇到权限不够的问题需要提前给路径加更多的权限,或创建好elasticsearch用户,并修改文件夹的属主或属组
系统配置设置
- 虚拟内存配置
elasticsearch使用mmapfs的方式来存储索引,通常系统默认的mmap数值较小,容易产生内存不足的错误,处理方法:
需要在本地服务配置
先切换到root用户,执行vi /etc/sysctl.conf
添加配置vm.max_map_count=655360
执行sysctl -p使得配置生效 - 进程数和打开文件句柄数在docker-compose.yml中有设置
以上cluster02与cluster01的两个文件内容略有差别。
之后分别在两台不同的服务器上使用docker-compose up命令启动,如有报错还需查看日志进行处理
验证查看es集群情况:
localhost根据实际情况改变
curl -X GET "localhost:9200/_cat/nodes?v&pretty"
网友评论