基于 docker 搭建 elasticsearch:5.6.8 分布式集群环境

2024-05-26 20:08

本文主要是介绍基于 docker 搭建 elasticsearch:5.6.8 分布式集群环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 1. 目录结构
      • 2. 前置配置
      • 3. 单机版 es 集群搭建
      • 4. es 客户端工具安装
      • 5. 通过 api 操作索引
        • 5.1 创建索引
        • 5.2 创建 index 对应的 mapping
        • 5.3 查询索引信息
        • 5.4 查看索引 mapping
        • 5.5 修改索引配置
        • 5.6 插入数据
        • 5.7 批量导入数据
        • 5.8 创建带 mapping 的索引
        • 5.9 多索引批量导入
        • 5.10 检索文档
        • 5.11 删除文档
      • 6 文档元数据
      • 7. 索引创建原则
      • 8. 对比关系型数据库
      • 附录 - 中文分词器插件安装
      • 附录 - 可视化 docker 管理工具安装
      • 附录 - 参考网址

1. 目录结构

es
├── data1		# es1 数据文件挂载目录
├── data2		# es2 数据文件挂载目录
├── data3		# es3 数据文件挂载目录
├── es1.yml 	# es1 配置文件
├── es2.yml		# es2 配置文件
└── es3.yml		# es3 配置文件

强调: 如果 es 选的 6.x 版本的话,那么需将data1 data2 data3 开启777权限。 命令: sudo chmod 777 data*

 

2. 前置配置

# 1. 调高JVM线程数限制数量, 防止启动容器时,报出如下错误:#  bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
# 方式1: 运行 ELK 镜像需要 vm.max_map_count 至少需要 262144 内存(永久性修改)
sudo vim /etc/sysctl.conf# 存在 vm.max_map_count 参数则修改,没有则新增vm.max_map_count = 262144# 方式2: 临时改变某个指定参数的值
sysctl -w vm.max_map_count=262144# 重新加载内核参数
sudo sysctl -p

 

3. 单机版 es 集群搭建

# 创建数据文件挂载目录
mkdir -p ./es/data1 ./es/data2 ./es/data3# 创建 es 配置文件, 文件内容见下面 git 仓库
touch es1.yml  es2.yml  es3.yml# 拉取 es 镜像
docker pull elasticsearch:5.6.8# 启动 es 集群 节点1 实例
docker run -d -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \-p 2181:2181 -p 7050:7050 \-v /data/es/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml \-v /data/es/data1:/usr/share/elasticsearch/data \--name es1 elasticsearch:5.6.8# 启动 es 集群 节点2 实例
docker run -d -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \-p 2888:2888 -p 7051:7051 \-v /data/es/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml \-v /data/es/data2:/usr/share/elasticsearch/data \--name es2 elasticsearch:5.6.8# 启动 es 集群 节点3 实例
docker run -d -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \-p 3888:3888 -p 7053:7053 \-v /data/es/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml \-v /data/es/data3:/usr/share/elasticsearch/data \--name es3 elasticsearch:5.6.8# 查看节点状态, 以下三个地址均可
http://192.168.10.1:2181/_cat/nodes?pretty
http://192.168.10.1:2888/_cat/nodes?pretty
http://192.168.10.1:3888/_cat/nodes?pretty# 查看集群健康, 以下三个地址均可
http://192.168.10.1:2181/_cluster/health
http://192.168.10.1:2181/_cluster/health
http://192.168.10.1:3888/_cluster/health# 清理 es 集群容器实例
docker rm -f $(docker ps -a | grep "elasticsearch" | awk '{print $1}')

设置 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" 原因: /etc/elasticsearch/jvm.options 默认jvm最大最小内存是2G。 验证命令如下:

  1. docker exec -it es1 bash
  2. cat /etc/elasticsearch/jvm.options | egrep “Xms|Xmx”

es*.yml 配置文件地址: https://github.com/AnswerAIL/aal-csdn-docs/tree/master/es

 

4. es 客户端工具安装

# 下载镜像
docker pull mobz/elasticsearch-head:5# 启动实例
docker run -d -p 7058:9100 --name es-manager  mobz/elasticsearch-head:5# 浏览器端访问
http://192.168.10.1:7058/

页面呈现效果
在这里插入图片描述
 

5. 通过 api 操作索引

5.1 创建索引
	# 执行以下指令, 创建 my_index  索引# number_of_shards: 设置索引分片个数# number_of_replicas: 设置索引副本个数# 格式: http://192.168.10.1:2181/{索引名称}curl -X PUT http://192.168.10.1:2181/my_index -d '  { "settings": { "number_of_shards": 3,"number_of_replicas": 1}}'

效果呈现
在这里插入图片描述新建的索引 my_index 中 mapping 是一个空集
在这里插入图片描述

5.2 创建 index 对应的 mapping
# 格式: http://192.168.10.1:2181/{索引名称}/{类型}/_mapping 
curl -X POST http://192.168.10.1:2181/my_index/student/_mapping -d '
{"student": {"properties": {"userName": {"type": "text","store": "true"},"age": {"type": "integer","index": "false"},"credit": {"type": "double"},"isDelete": {"type": "boolean"},"address": {"type": "text"},"createDate": {"type": "date"}}}
}'

此时查找索引 my_index 对应的mapping
在这里插入图片描述在这里插入图片描述

5.3 查询索引信息
  1. 格式: http://192.168.10.1:2181/{索引名称}/_search_shards
  2. eg: http://192.168.10.1:2181/my_index/_search_shards
5.4 查看索引 mapping
  1. 格式: http://192.168.10.1:2181/{索引名称}/_mapping
  2. eg: http://192.168.10.1:2181/my_index/_mapping
5.5 修改索引配置
	# 格式: http://192.168.10.1:2181/{索引名称}/_settingscurl -X PUT http://192.168.10.1:2181/my_index/_settings -d '  { "number_of_replicas": 2}'
  1. number_of_shards: 索引分片个数, 默认为5. 在索引创建后不可修改
  2. number_of_replicas: 索引副本个数, 默认为1. 该参数可随时修改
5.6 插入数据
	# 格式: http://192.168.10.1:2181/{索引名称}/{类型}, 此格式 _id 会自动生成# 格式: http://192.168.10.1:2181/{索引名称}/{类型}/{_id}curl -X POST http://192.168.10.1:2181/my_index/student -d '  { "userName": "answer","age": 25,"address": "pt","credit": 99.98,"isDelete": false,"createDate": "2019-05-12"}'

在这里插入图片描述

5.7 批量导入数据

curl -X PUT “http://192.168.10.1:2181/_bulk” -H ‘Content-Type: application/json’ --data-binary @/data/es/data.json

data.json

{"index": {"_index":"my_index","_type":"student"}}
{"userName": "zhangsan", "age": 21, "address": "shenzhen", "credit": 90.1, "isDelete": false, "createDate": "2019-05-12"}
{"index": {"_index":"my_index","_type":"student"}}
{"userName": "lisi", "age": 12, "address": "beijing", "credit": 90.1, "isDelete": false, "createDate": "2019-05-12"}

在这里插入图片描述

5.8 创建带 mapping 的索引
	# http://192.168.10.1:2181/{索引名称}curl -X PUT http://192.168.10.1:2181/idx_orderno -d '  { "settings": { "number_of_shards": 3,"number_of_replicas": 1}, "mappings": { "order": { "properties": { "orderNo": { "type": "text" },"orderType": {"type": "integer"}, "orderAmt": { "type": "double" },"isValid": {"type": "boolean"}, "orderDate": {"type": "date"} } } } }'

在这里插入图片描述

5.9 多索引批量导入

修改 data.json 文件内容

{"index": {"_index": "my_index", "_type": "student"}}
{"userName": "paul", "age": 21, "address": "usa", "credit": 90.9, "isDelete": false, "createDate": "2019-05-12"}
{"index": {"_index": "my_index", "_type": "student"}}
{"userName": "james", "age": 32, "address": "usa", "credit": 92.1, "isDelete": false, "createDate": "2019-05-12"}{"index": {"_index": "idx_orderno", "_type": "order"}}
{"orderNo": "20190512001", "orderType": 1, "orderAmt": 100.21, "isValid": true, "orderDate": "2019-05-12"}
{"index": {"_index": "idx_orderno", "_type": "order"}}
{"orderNo": "20190512002", "orderType": 2, "orderAmt": 890.15, "isValid": false, "orderDate": "2019-05-13"}
{"index": {"_index": "idx_orderno", "_type": "order"}}
{"orderNo": "20190512003", "orderType": 3, "orderAmt": 2890.98, "isValid": true, "orderDate": "2019-05-11"}

执行导入: curl -X PUT “http://192.168.10.1:2181/_bulk” -H ‘Content-Type: application/json’ --data-binary @/data/es/data.json

5.10 检索文档
  1. 格式: http://192.168.10.1:2181/{索引名称}/{类型}/{_id}/_source
  2. eg: http://192.168.10.1:2181/my_index/student/AWqq6Di5iA6UKPrDKXmT/_source

在这里插入图片描述
_source字段不会被美化,它的样子与我们输入的一致,现在只包含我们请求的字段,而且过滤了date字段

 

  1. 格式: http://192.168.10.1:2181/{索引名称}/{类型}/{_id}?pretty
  2. eg: http://192.168.10.1:2181/my_index/student/AWqq6Di5iA6UKPrDKXmT?pretty

在这里插入图片描述
pretty:在任意的查询字符串中增加pretty参数,类似于上面的例子。会让Elasticsearch美化输出(pretty-print)JSON响应以便更加容易阅读

 

5.11 删除文档
  1. 格式: curl -XDELETE http://192.168.10.1:2181/{索引名称}/{索引类型}/{_id}
  2. eg: curl -XDELETE http://192.168.10.1:2181/my_index/student/AWqq7x7YiA6UKPrDKXmV

 

6 文档元数据

属性注释说明
_index索引文档存储的地方
_type类型文档代表的对象的类
_idid仅仅是一个字符串,它与_index和_type组合时,就可以在es中唯一标识一个文档。
当创建一个文档,可以自定义_id,也可以让es帮你自动生成
文档的唯一标识

 

7. 索引创建原则

  • 类似的数据放在一个索引,非类似的数据放不同索引
  • 索引名称必须是小写的,不能用下划线开头,不能包含逗号
  • index中包含了很多类似的document:类似是什么意思,其实指的就是说,这些document的fields很大一部分是相同的,你说你放了3个document,每个document的fields都完全不一样,这就不是类似了,就不太适合放到一个index里面去了

 

8. 对比关系型数据库

es关系型数据库
索引(index)库(database)
类型(type)表(table)
文档(document)行(row)
字段(field)列名(column)

 

附录 - 中文分词器插件安装

	# 进入 es 集群的 es1 节点容器内部docker exec -it es1 bashcd /usr/share/elasticsearch# 执行安装命令, 请安装 ES 对应版本的分词器, https://github.com/medcl/elasticsearch-analysis-ik/releases./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.8/elasticsearch-analysis-ik-5.6.8.zip# 重启 es1 容器docker restart es1

ik 带有两个分词器:

  1. ik_max_word:会将文本做最细粒度的拆分;尽可能多的拆分出词语
  2. ik_smart:会做最粗粒度的拆分;已被分出的词语将不会再次被其它词语占有

 

附录 - 可视化 docker 管理工具安装

# 下载 ui-for-docker 镜像
docker pull uifd/ui-for-docker# 启动容器实例
docker run -d -p 7050:9000 --privileged -v /var/run/docker.sock:/var/run/docker.sock --name dockerUI uifd/ui-for-docker# 浏览器端访问
http://192.168.10.1:7050/

页面呈现效果
在这里插入图片描述
 

附录 - 参考网址

  • Elasticsearch Reference
  • ES 配置文件参数说明
  • 中文分词器 elasticsearch-analysis-ik git 地址
  • ElasticSearch教程——汇总篇

这篇关于基于 docker 搭建 elasticsearch:5.6.8 分布式集群环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005463

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

高并发环境中保持幂等性

在高并发环境中保持幂等性是一项重要的挑战。幂等性指的是无论操作执行多少次,其效果都是相同的。确保操作的幂等性可以避免重复执行带来的副作用。以下是一些保持幂等性的常用方法: 唯一标识符: 请求唯一标识:在每次请求中引入唯一标识符(如 UUID 或者生成的唯一 ID),在处理请求时,系统可以检查这个标识符是否已经处理过,如果是,则忽略重复请求。幂等键(Idempotency Key):客户端在每次