docker-compose安装ES集群-元一软件

📅 2026/7/19 15:27:51
docker-compose安装ES集群-元一软件
在同一个目录下新建配置文件vim docker-compose.yml挂载的目录记得提前建好version:3networks: es-net: external:trueservices: kibana: image: kibana:7.17.4 restart: always container_name: kibana environment: -XPACK_GRAPH_ENABLEDtrue -TIMELION_ENABLEDtrue volumes: - ./kibana/kibana.yml:/usr/share/kibana/config/kibana.yml networks: - es-net ports: -15602:5601elasticsearch1: image: elasticsearch:7.17.4 restart: always container_name: es-master volumes: - ./data/master:/usr/share/elasticsearch/data# 后面挂载分词器的目录- ./plugins:/usr/share/elasticsearch/plugins - ./elasticsearch_master.yml:/usr/share/elasticsearch/config/elasticsearch.yml# 这个是把生成的证书挂载到es节点容器内,后面配置密码时会用到,es集群不需要配置密码的可以删除# 这个账号密码的映射需要在配置好账号密码,并且把.p12文件从容器中复制出来了,再进行映射,刚开始先注释# 不然映射会自动创建好名为elastic-certificates.p12的文件,在配置时就会报错,导致容器一直重启- ./config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 networks: - es-net environment: -ES_JAVA_OPTS-Xms512m -Xmx512mports: -19210:9200-19310:9300privileged:trueelasticsearch2: image: elasticsearch:7.17.4 restart: always container_name: es-slave1 volumes: - ./data/slave1:/usr/share/elasticsearch/data - ./plugins:/usr/share/elasticsearch/plugins - ./elasticsearch_slave1.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ./config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 networks: - es-net environment: -ES_JAVA_OPTS-Xms512m -Xmx512mports: -19220:9200-19320:9300privileged:trueelasticsearch3: image: elasticsearch:7.17.4 restart: always container_name: es-slave2 volumes: - ./data/slave2:/usr/share/elasticsearch/data - ./plugins:/usr/share/elasticsearch/plugins - ./elasticsearch_slave2.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ./config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 networks: - es-net environment: -ES_JAVA_OPTS-Xms512m -Xmx512mports: -19230:9200-19330:9300privileged:truees-master服务器配置文件vim elasticsearch_master.ymldiscovery.seed_hosts直接填容器名,因为es的三个节点使用的是同一个network;# 集群名称cluster.name: es-cluster# 节点名称node.name: es-node-1# 绑定host0.0.0.0代表当前节点的ipnetwork.host:0.0.0.0# 表示这个节点是否可以充当主节点node.master:true# 是否充当数据节点node.data:true# 所有主从节点discovery.seed_hosts:[es-master,es-slave1,es-slave2]# 这个参数决定了在选主过程中需要 有多少个节点通信 预防脑裂 N/21discovery.zen.minimum_master_nodes:3#初始化主节点cluster.initial_master_nodes: es-node-1# 单节点上可以开启的ES存储实例的个数,没配置的话会报一个错误node.max_local_storage_nodes:3es-slave1服务器配置文件vim elasticsearch_slave1.ymlcluster.name: es-cluster node.name: es-node-2 network.host:0.0.0.0 node.master:truenode.data:truediscovery.seed_hosts:[es-master,es-slave1,es-slave2]discovery.zen.minimum_master_nodes:3cluster.initial_master_nodes: es-node-1 node.max_local_storage_nodes:3es-slave2服务器配置文件vim elasticsearch_slave2.ymlcluster.name: es-cluster node.name: es-node-3 network.host:0.0.0.0 node.master:truenode.data:truediscovery.seed_hosts:[es-master,es-slave1,es-slave2]discovery.zen.minimum_master_nodes:3cluster.initial_master_nodes: es-node-1 node.max_local_storage_nodes:3新建kibana文件夹mkdir kibanavim kibana/kibana.ymlelasticsearch.hosts要填宿主机ip加映射出来的端口server.name: kibana server.host:0# 可以填容器名加端口,也可以用宿主机ip和映射的端口elasticsearch.hosts:[http://es-master:9200/,http://es-slave1:9200,http://es-slave2:9200]xpack.monitoring.ui.container.elasticsearch.enabled:truei18n.locale: zh-CN elasticsearch.username:elasticelasticsearch.password:66668888server.port:5601新建data文件夹mkdir data在data文件夹中建立如下三个文件夹image.png在docker-compose.yml文件所在的目录执行如下命令docker-compose up -d --build如果配置文件名不是docker-compose.yml可使用docker-compose -f 文件名 up -d使用http://宿主机ip:port/_cat/nodes查看集群正常情况如下图image.png访问kibanahttp://宿主机ip:port/PS:访问成功的话,es集群和kibana已经搭建完成了,假如不需要给ES集群配置密码的话编辑每个节点的elasticsearch.yml加入如下配置:# 开启x-pack功能并指定证书位置xpack.security.enabled:truexpack.security.transport.ssl.enabled:truexpack.security.transport.ssl.verification_mode: certificate# 下面两个配置在生成elastic-certificates.p12文件时无需配置,会报错的,一样导致容器一直重启# 在生成好elastic-certificates.p12文件后并且映射进容器了,再解开注释xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/elastic-certificates.p12# 我这里报了一个找不到配置文件的错误# 正常是下面这样的,由于是docker容器中配置,,所以写的是绝对路径# xpack.security.transport.ssl.keystore.path: elastic-certificates.p12# xpack.security.transport.ssl.truststore.path: elastic-certificates.p12配置好了的话,就可以通过docker exec -it es-master /bin/bash这个命令进入容器开始生成证书随便选择一个es节点进入即可输入如下命令生成证书./bin/elasticsearch-certutil cert-outconfig/elastic-certificates.p12-pass# 根据提示输入y即可执行完毕后即可在elasticsearch/config目录下看到名为elastic-certificates.p12的证书文件记录下路径及文件名:快捷键ctrlD退出容器我的路径是: /usr/share/elasticsearch/config/elastic-certificates.p12这个路径即是配置文件中的路径image.png执行命令新建文件夹: mkdir config通过docker命令把证书文件复制到config文件中,上面docker-compose.yml文件中已经做了挂载dockercpes-master:/usr/share/elasticsearch/config/elastic-certificates.p12 ./config确保配置文件的新内容已经重新挂载进入容器并且当前用户拥有执行权限再映射进所有容器中chomd x elastic-certificates.p12重启es集群如果发现新加配置文件内容没有进入容器中docker ps 查看所有启动的容器docker rm -f 容器名重新运行 docker-compose up -d --build重新进入es集群中一个容器创建Elasticsearch集群密码docker exec -it es-master /bin/bash执行命令./bin/elasticsearch-setup-passwords-himage.png自动创建密码./bin/elasticsearch-setup-passwords auto# 对应账号的密码会自动生成一定要拷贝下来手动创建密码./bin/elasticsearch-setup-passwords interactive# 先输入y# 然后依次给es预设的账号设置密码### ps:有七八个账号要设置,要么一一记录下来,要么设置成一样的设置完成后,访问kibana或者es就需要账号密码了测试下:http://宿主机ip:port/_cat/nodes输入账号:elastic输入密码: ***********image.png访问成功添加ik分词器我这里是自己下载分词器并上传到服务器分词器下载地址版本很多,选择自己想要的,最好是和es相对应的版本我是7.17.4https://github.com/medcl/elasticsearch-analysis-ik/releases把分词器上传到挂载目录plugins中# 解压zip文件需要安装一个zip的工具sudoapt-getinstallzip# 解压并指定文件夹名称为ikunzipelasticsearch-analysis-ik-7.17.4.zip-dik# 删除elasticsearch-analysis-ik-7.17.4.ziprm-rfelasticsearch-analysis-ik-7.17.4.zip添加自己的词库词库是啥嘞,就是你在这个词库文件中加入词语;如:人们必须有信当es在使用ik对这句话进行分词时人们必须有信仰就会把人们必须有信做为一次单独的词这是我用的开发人员通用词库,下载下来可以直接使用链接https://pan.baidu.com/s/1Jr9LGjSTQQyK7gDscbeNTg提取码cmcc把词库文件上传到plugins/ik/config/目录下修改plugins/ik/config/IKAnalyzer.cfg.xml配置文件红框中改为你的词库文件全称image.png确保生效,我把所有的容器删了重新编排了一次docker rm -f es-master es-slave1 es-slave2docker-compose up -d --build测试默认分词器和ik分词器下面的分词的粒度不同,自己去kibana上测试吧GET _analyze{text:d图像!}GET _analyze{analyzer:ik_smart,text:d图像}GET _analyze{analyzer:ik_max_word,text:d图像}