docker-compose

  1. version: "2"
  2. services:
  3. es-node01:
  4. container_name: es-node01
  5. image: docker.elastic.co/elasticsearch/elasticsearch:8.1.0
  6. restart: always
  7. mem_limit: 32g
  8. ports:
  9. - 9200:9200
  10. - 9300:9300
  11. environment:
  12. - TAKE_FILE_OWNERSHIP=true
  13. - ES_JAVA_OPTS=-Xms16g -Xmx16g
  14. - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
  15. volumes:
  16. - ./data/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
  17. - ./data/logs:/usr/share/elasticsearch/logs
  18. - ./data/plugins:/usr/share/elasticsearch/plugins
  19. - ./data/certs:/usr/share/elasticsearch/config/certs
  20. - /mnt/disk1/es-data1:/mnt/data1
  21. - /mnt/disk2/es-data2:/mnt/data2
  22. - /mnt/disk3/es-data3:/mnt/data3
  23. - /mnt/disk4/es-data4:/mnt/data4

.env

  1. ELASTIC_PASSWORD=password

data/config/elasticsearch.yml

  1. cluster.name: test-es-cluster
  2. node.name: es-node01
  3. node.roles:
  4. - master
  5. - data
  6. network.host: 0.0.0.0
  7. network.publish_host: 192.168.20.21
  8. http.port: 9200
  9. transport.port: 9300
  10. path.data:
  11. - /mnt/data1
  12. - /mnt/data2
  13. - /mnt/data3
  14. - /mnt/data4
  15. discovery.seed_hosts:
  16. - 192.168.20.22:9300
  17. - 192.168.20.23:9300
  18. cluster.initial_master_nodes:
  19. - es-node01
  20. - es-node02
  21. - es-node03
  22. http.cors.enabled: true
  23. http.cors.allow-origin: "*"
  24. xpack.security.enabled: true
  25. xpack.security.http.ssl.enabled: true
  26. xpack.security.http.ssl.key: /usr/share/elasticsearch/config/certs/es-node02.key
  27. xpack.security.http.ssl.certificate: /usr/share/elasticsearch/config/certs/es-node02.crt
  28. xpack.security.http.ssl.certificate_authorities: /usr/share/elasticsearch/config/certs/ca.crt
  29. xpack.security.http.ssl.verification_mode: certificate
  30. xpack.security.transport.ssl.enabled: true
  31. xpack.security.transport.ssl.key: /usr/share/elasticsearch/config/certs/es-node02.key
  32. xpack.security.transport.ssl.certificate: /usr/share/elasticsearch/config/certs/es-node02.crt
  33. xpack.security.transport.ssl.certificate_authorities: /usr/share/elasticsearch/config/certs/ca.crt
  34. xpack.security.transport.ssl.verification_mode: certificate
  35. xpack.license.self_generated.type: basic

生成证书

  1. version: "2.2"
  2. services:
  3. setup:
  4. image: docker.elastic.co/elasticsearch/elasticsearch:8.1.0
  5. volumes:
  6. - ./certs:/usr/share/elasticsearch/config/certs
  7. user: "0"
  8. command: >
  9. bash -c '
  10. if [ ! -f certs/ca.zip ]; then
  11. echo "Creating CA";
  12. bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip;
  13. unzip config/certs/ca.zip -d config/certs;
  14. fi;
  15. if [ ! -f certs/certs.zip ]; then
  16. echo "Creating certs";
  17. echo -ne \
  18. "instances:\n"\
  19. " - name: es-node01\n"\
  20. " dns:\n"\
  21. " - es-node01\n"\
  22. " ip:\n"\
  23. " - 192.168.20.21\n"\
  24. " - name: es-node02\n"\
  25. " dns:\n"\
  26. " - es-node02\n"\
  27. " ip:\n"\
  28. " - 192.168.20.22\n"\
  29. " - name: es-node03\n"\
  30. " dns:\n"\
  31. " - es-node03\n"\
  32. " ip:\n"\
  33. " - 192.168.20.23\n"\
  34. > config/certs/instances.yml;
  35. bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key;
  36. unzip config/certs/certs.zip -d config/certs;
  37. fi;
  38. '

注意事项

1、echo “vm.max_map_count=262144” > /etc/sysctl.conf ; sysctl -p
2、在容器中,程序是以elasticsearch用户启动的,其uid:gid为1000:1000
如果要绑定挂载本地目录或文件,则elasticsearch用户必须可以读取它。此外,该用户必须具有对配置、数据和日志目录的写入权限。所以要修改本地数据目录uid为1000。

部署参考:
https://www.elastic.co/guide/en/elasticsearch/reference/8.1/docker.html