Elasticsearch 基本概念
node:运行单个ES实例的服务器
cluster:一个或多个节点组成的集群
index:索引多个文档的集合
type:一个 index 可以定义一个或多个类型,将 document 逻辑份组
document:index 里的每条记录
field:ES存储最小单元
shards:ES将index分片
replicas:index 一份或多份副本
和关系型数据库对照:
Elasticsearch MySQL
index database
type table
document row
field Column
安装
查询镜像
[root@0006 elasticsearch]# docker search elasticsearch INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/elasticsearch Elasticsearch is a powerful open source se... 3521 [OK] docker.io docker.io/nshou/elasticsearch-kibana Elasticsearch-6.5.4 Kibana-6.5.4 96 [OK] docker.io docker.io/itzg/elasticsearch Provides an easily configurable Elasticsea... 67 [OK] docker.io docker.io/elastichq/elasticsearch-hq Official Docker image for ElasticHQ: Elast... 26 [OK] docker.io docker.io/kubernetes/fluentd-elasticsearch An image that ingests Docker container log... 25 docker.io docker.io/lmenezes/elasticsearch-kopf elasticsearch kopf 17 [OK] docker.io docker.io/bitnami/elasticsearch Bitnami Docker Image for Elasticsearch 16 [OK] docker.io docker.io/taskrabbit/elasticsearch-dump Import and export tools for elasticsearch 15 [OK] docker.io docker.io/esystemstech/elasticsearch Debian based Elasticsearch packing for Lif... 14 docker.io docker.io/monsantoco/elasticsearch ElasticSearch Docker image 11 [OK] docker.io docker.io/mesoscloud/elasticsearch [UNMAINTAINED] Elasticsearch 9 [OK] docker.io docker.io/blacktop/elasticsearch Alpine Linux based Elasticsearch Docker Image 8 [OK] docker.io docker.io/justwatch/elasticsearch_exporter Elasticsearch stats exporter for Prometheus 8 docker.io docker.io/centerforopenscience/elasticsearch Elasticsearch 4 [OK] docker.io docker.io/barchart/elasticsearch-aws Elasticsearch AWS node 3 docker.io docker.io/forkdelta/fluentd-elasticsearch fluent/fluentd with fluent-plugin-elastics... 1 [OK] docker.io docker.io/jetstack/elasticsearch-pet An elasticsearch image for kubernetes PetSets 1 [OK] docker.io docker.io/phenompeople/elasticsearch Elasticsearch is a powerful open source se... 1 [OK] docker.io docker.io/thingswise/elasticsearch Elasticsearch + etcd2 peer discovery 1 [OK] docker.io docker.io/18fgsa/elasticsearch Built from https://github.com/docker-libra... 0 docker.io docker.io/axway/elasticsearch-docker-beat "Beat" extension to read logs of container... 0 [OK] docker.io docker.io/driveclutch/infra-elasticsearch-aws Elasticsearch Docker for use in AWS 0 [OK] docker.io docker.io/igneoussystems/base-elasticsearch A base image containing 3p tools for elast... 0 docker.io docker.io/igneoussystems/base-elasticsearch-5 Base elasticsearch 5.1.1 container 0 docker.io docker.io/wreulicke/elasticsearch elasticsearch 0 [OK]
拉取镜像
[root@0006 elasticsearch]# docker pull elasticsearch:5.6.12 Using default tag: latest Trying to pull repository docker.io/library/elasticsearch ... latest: Pulling from docker.io/library/elasticsearch 05d1a5232b46: Pull complete 5cee356eda6b: Pull complete 89d3385f0fd3: Pull complete 65dd87f6620b: Pull complete 78a183a01190: Pull complete 1a4499c85f97: Pull complete 2c9d39b4bfc1: Pull complete 1b1cec2222c9: Pull complete 59ff4ce9df68: Pull complete 1976bc3ee432: Pull complete 5af49e8af381: Pull complete 42c8b75ff7af: Pull complete 7e6902915254: Pull complete 99853874fa54: Pull complete 596fbad6fcff: Pull complete Digest: sha256:a8081d995ef3443dc6d077093172a5931e02cdb8ffddbf05c67e01d348a9770e Status: Downloaded newer image for docker.io/elasticsearch:latest
运行镜像
[root@0006 elasticsearch]# docker run -e ES_JAVA_OPTS="-Xms4G -Xmx4G" -d -p 9200:9200 -p 9300:9300 --restart=always -v /elasticsearch/data:/usr/share/elasticsearch/data --name elasticsearch docker.io/elasticsearch:5.6.12 4862c1bfee14081445a636d7d51c8b65607574d1881e6a41fb02272ad60a546f
//查看否是已经监听9200和9300 [root@0006 elasticsearch]# netstat -tnpl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:32000 0.0.0.0:* LISTEN 1318/java tcp 0 0 0.0.0.0:5601 0.0.0.0:* LISTEN 644/node tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 6065/mysqld tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6688/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1032/sshd tcp6 0 0 :::9092 :::* LISTEN 3749/docker-proxy-c tcp6 0 0 :::10086 :::* LISTEN 85540/docker-proxy- tcp6 0 0 :::6732 :::* LISTEN 1291/dockerd-curren tcp6 0 0 :::9200 :::* LISTEN 104656/docker-proxy tcp6 0 0 :::50000 :::* LISTEN 68374/docker-proxy- tcp6 0 0 :::9300 :::* LISTEN 104645/docker-proxy tcp6 0 0 :::22 :::* LISTEN 1032/sshd
ES_JAVA_OPTS="-Xms4G -Xmx4G" //设置只允许4G的jvm运行空间
检查安装是否成功
[root@0006 ~]# curl http://172.16.10.383:9200/ { "name" : "gqsc0ge", "cluster_name" : "elasticsearch", "cluster_uuid" : "7KPSH7V6R-mBDaIHCetkDg", "version" : { "number" : "5.6.12", "build_hash" : "cfe3d9f", "build_date" : "2018-09-10T20:12:43.732Z", "build_snapshot" : false, "lucene_version" : "6.6.1" }, "tagline" : "You Know, for Search" } [root@0006 ~]#
集群安装
docker run -dit --name es01 --restart=always -e node.name=es01 -e cluster.name=es-docker-cluster -e discovery.seed_hosts=es02,es03 -e cluster.initial_master_nodes=es01,es02,es03 -e bootstrap.memory_lock=true --ulimit memlock=-1:-1 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -v /data/escluster/:/usr/share/elasticsearch/data -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:7.7.1 docker run -dit --name es02 --restart=always -e node.name=es02 -e cluster.name=es-docker-cluster -e discovery.seed_hosts=es01,es03 -e cluster.initial_master_nodes=es01,es02,es03 -e bootstrap.memory_lock=true --ulimit memlock=-1:-1 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -v /data/escluster/:/usr/share/elasticsearch/data -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:7.7.1 docker run -dit --name es03 --restart=always -e node.name=es03 -e cluster.name=es-docker-cluster -e discovery.seed_hosts=es01,es02 -e cluster.initial_master_nodes=es01,es02,es03 -e bootstrap.memory_lock=true --ulimit memlock=-1:-1 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -v /data/escluster/:/usr/share/elasticsearch/data -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:7.7.1
提交_cat/nodes请求以查看节点是否已启动并正在运行:
curl -X GET "localhost:9200/_cat/nodes?v&pretty"
虚拟内存设置
在生产环境中在Docker中运行Elasticsearch时,以下要求和建议适用。
vm.max_map_count至少设置为262144
该vm.max_map_count内核设置必须至少设置为262144用于生产。
grep vm.max_map_count /etc/sysctl.conf vm.max_map_count=262144 sysctl -p
要将设置配置于实时生效:
sysctl -w vm.max_map_count=262144
数据目录访问权限
默认情况下,Elasticsearch elasticsearch使用uid:gid 作为用户在容器内运行1000:0。
迁移时确保授予组0对本地目录的gid的访问权限
chmod g + rwx /data/escluster chgrp 0 /data/escluster
增加nofile和nproc的ulimit
nofile和nproc的增加的ulimit 必须可用于Elasticsearch容器。验证 Docker守护程序的初始化系统是否将它们设置为可接受的值。
要检查Docker守护程序默认值是否为ulimits,请运行:
docker run --rm centos:7 /bin/bash -c 'ulimit -Hn && ulimit -Sn && ulimit -Hu && ulimit -Su'
如果需要,请在守护程序中调整它们,或按每个容器覆盖它们。例如,使用时docker run,请设置:
--ulimit nofile=65535:65535
禁用交换
为了性能和节点稳定性,需要禁用交换。
如果选择该bootstrap.memory_lock:true方法,则还需要memlock:true