参考文档:
- docker搭建ElasticSearch集群
- ES脑裂问题及解决
- Elasticsearch学习
- SpringBoot整合Elasticsearch
- Linux系统下安装es中ik分词器
- docker安装的ES和Kibana设置账号密码
- 使用postman访问带密码的es
- java ES RestHighLevelClient客户端“单机“、集群配置
前提条件:Linux服务器,已经安装好了docker。
概述:本文档讲述由三台es服务组建es集群,服务器的配置稍微高一点,至少4G的内存。
假设我们手上有三台服务器,这三台服务器的ip地址如下:
- 192.168.1.149(主服务器,服务1)
- 192.168.1.167(服务2)
- 192.168.1.152(服务3)
1. 创建挂载文件夹
首先给这三台es服务都创建上数据文件夹挂载目录,分别执行以下命令:
mkdir -p /mydata/es/es-node1
mkdir -p /mydata/es/es-node1/config
mkdir -p /mydata/es/es-node1/data
mkdir -p /mydata/es/es-node1/plugins
1.1. 修改文件夹权限:
修改创建的挂载目录的文件夹权限:
chmod -R 777 /mydata/es/es-node1/*
如果没有修改文件夹权限就挂载,启动容器之后会发现容器自动关闭,查看容器的日志会发现如下报错:
ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes];
2. 创建配置文件
然后在创建的config
文件夹里面创建配置文件,文件名elasticsearch.yml
:
2.1. 服务1的配置文件:
cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 192.168.1.149
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.1.149:9300","192.168.1.167:9300","192.168.1.152:9300"]
discovery.zen.minimum_master_nodes: 2
cluster.initial_master_nodes: ["es-node1","es-node2","es-node3"]
# 以下配置用于设置密码访问ES集群,如不需要可以不用配置,如需要请在三台es服务上都配置
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
参数释义;
cluster.name
:集群名称node.name
:节点名称network.publish_host
:设置其他节点连接此节点的地址,如果不设置的话,则自动获取,publish_host的地址必须为真实地址http.port
:Http传输监听端口transport.tcp.port
:该节点与其他节点交互的端口http.cors.enabled
:是否支持跨域,默认不支持