基于docker-compose搭建ES服务

一、单节点线下测试

拉取镜像

1、 进入实验机器

go 10.10.10.10

2、 拉取es 7.16.2镜像

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.16.2

安装ik分词器

1、 启动容器

docker run -d -p 0.0.0.0:9200:9200 -p 0.0.0.0:9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.16.2

2、 安装ik分词器

a. 查看刚启动的容器,找到CONTAINER ID

docker ps 

b. 安装ik

注意: ik分词器需要版本和es版本一致,例如es版本是7.16.2,ik分词器也需要是7.16.2

docker exec [CONTAINERID] ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.16.2/elasticsearch-analysis-ik-7.16.2.zip

c. 重启容器

docker restart [CONTAINERID]

如果要保存带ik分词器的镜像,可以如下提交镜像

docker commit [CONTAINERID] elasticsearch_ik:8.0.0

然后就可以push到hub或者本地保存镜像

二、多节点docker-compose部署

1、编辑docker-compose.yml

首先进入到/myhome/service/elaticsearch/,创建esv7目录(esv7代表elasticsearch 7版本) 进入esv7目录,创建docker-compose.yml文件,如下:

version: '2'

services:

es01:
  image: [docker.elastic.co/elasticsearch/elasticsearch:7.16.2](http://docker.elastic.co/elasticsearch/elasticsearch:7.16.2)
  container_name: es01
  environment:
    - node.name=es01
    - cluster.name=es-docker-cluster
    - discovery.seed_hosts=es02,es03
    - cluster.initial_master_nodes=es01,es02,es03
    - bootstrap.memory_lock=true
    - http.cors.enabled=true
    - http.cors.allow-origin=*
    - "ES_JAVA_OPTS=-Xms512m -Xmx512m"   #按需修改,过低节点容易挂
  ulimits:
    memlock:
      soft: -1
      hard: -1
  volumes:
    - ./es01/data:/usr/share/elasticsearch/data
    - ./plugins:/usr/share/elasticsearch/plugins
  ports:
    - "9200:9200"
    - "9300:9300"
  networks:
    - elastic

es02:
  image: [docker.elastic.co/elasticsearch/elasticsearch:7.16.2](http://docker.elastic.co/elasticsearch/elasticsearch:7.16.2)
  container_name: es02
  environment:
    - node.name=es02
    - cluster.name=es-docker-cluster
    - discovery.seed_hosts=es01,es03
    - cluster.initial_master_nodes=es01,es02,es03
    - bootstrap.memory_lock=true
    - "ES_JAVA_OPTS=-Xms512m -Xmx512m"

  ulimits:
    memlock:
      soft: -1
      hard: -1

  volumes:
    - ./es02/data:/usr/share/elasticsearch/data
    - ./plugins:/usr/share/elasticsearch/plugins

  networks:
    - elastic

es03:

  image: [docker.elastic.co/elasticsearch/elasticsearch:7.16.2](http://docker.elastic.co/elasticsearch/elasticsearch:7.16.2)

  container_name: es03

  environment:
    - node.name=es03
    - cluster.name=es-docker-cluster
    - discovery.seed_hosts=es01,es02
    - cluster.initial_master_nodes=es01,es02,es03
    - bootstrap.memory_lock=true
    - "ES_JAVA_OPTS=-Xms512m -Xmx512m"

  ulimits:
    memlock:
      soft: -1
      hard: -1
  volumes:
    - ./es03/data:/usr/share/elasticsearch/data
    - ./plugins:/usr/share/elasticsearch/plugins

  networks:
    - elastic

kib01:

  image: [docker.elastic.co/kibana/kibana:7.16.2](http://docker.elastic.co/kibana/kibana:7.16.2)
  container_name: kib01
  ports:
    - 5601:5601
  environment:
    ELASTICSEARCH_URL: [http://es01:9200](http://es01:9200)
    ELASTICSEARCH_HOSTS: '["[http://es01:9200](http://es01:9200)","[http://es02:9200](http://es02:9200)","[http://es03:9200](http://es03:9200)"]'

  networks:
    - elastic

volumes:

data01:
  driver: local
data02:
  driver: local
data03:
  driver: local

networks:

elastic:

  driver: bridge

2、创建挂载目录

这里我们创建了三个节点的es,在docker-compose.yml中分别是es01,es02,es03,并且分别做了数据映射,所以我们需要在esv7里面创建如下几个目录:

esv7/

├── docker-compose.yml

├── es01

│   └── data

├── es02

│   └── data

├── es03

│   └── data

└── plugins

并且设置权限:

chmod -R 777 es01 es02 es03

配置ik分词插件

然后配置分词器。下载ik插件放到plugins目录,服务器可能没外网,可本地下载上传

https://github.com/medcl/elasticsearch-analysis-ik/releases下载es的对应版本

比如下载elasticsearch-analysis-ik-7.16.2.zip, 注意: ik分词器的版本需要和elasticsearch版本一致,例如这里es用的7.16.2,ik分词器也需要下载7.16.2。然后:

cd ./plugins/ && mkdir ik

解压

unzip elasticsearch-analysis-ik-7.16.2.zip -d ./ik

最终得到如下的esv7项目目录至少包含如下结构:

esv7/

├── docker-compose.yml

├── es01

│   └── data

├── es02

│   └── data

├── es03

│   └── data

└── plugins

└── ik

启动服务

执行 docker-compose up -d启动es集群服务,完成。

可能遇到错误

1、文件权限

报错如下:

AccessDeniedException[/usr/share/elasticsearch/data/nodes]

解决:

提前将挂载目录创建好,并将权限设置好:

chmod -R 777 es01 es02 es03

2、内存不足

报错如下:

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决:修改配置文件:

vi /etc/sysctl.conf

在文件末尾添加一行内容:

vm.max_map_count=262144

执行以下命令立即生效:

/sbin/sysctl -p

之后重新启动即可。

三、读写数据示例

设置mapping

curl -X PUT "localhost:9200/test" -H 'Content-Type: application/json' -d'

{

"settings" : {

"number_of_shards" : 1,

"number_of_replicas" : 1

},

"mappings": {

  "properties": {

    "content": {

      "type":"text",

      "analyzer": "ik_max_word",

      "search_analyzer": "ik_max_word"

    },

    "vec":{

      "type":"dense_vector",

      "dims":768

    },

    "faq_id":{

      "type":"text",

      "index": false

    },

    "fsimilar_id":{

      "type":"text",

      "index": false

    }

  }

}

}

'

posted @ 2023-08-22 10:27  glowwormss  阅读(712)  评论(0编辑  收藏  举报