前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用docker安装elasticsearch伪分布式集群以及安装ik中文分词插件

使用docker安装elasticsearch伪分布式集群以及安装ik中文分词插件

作者头像
端碗吹水
发布2020-09-23 10:07:30
7440
发布2020-09-23 10:07:30
举报

docker安装elasticsearch伪分布式集群

0.在安装es之前,首先编辑一下宿主机的内核参数,否则配置es集群的时候极有可能启动不成功:

代码语言:javascript
复制
[root@study-01 ~]# vim /etc/sysctl.conf
vm.max_map_count=655360
[root@study-01 ~]# sysctl -p # 加载参数

1.搜索es的镜像,如下第一个就是官方镜像:

使用docker安装elasticsearch伪分布式集群以及安装ik中文分词插件
使用docker安装elasticsearch伪分布式集群以及安装ik中文分词插件

2.拉取镜像:

代码语言:javascript
复制
[root@study-01 ~]# docker pull elasticsearch

3.启动镜像为容器:

代码语言:javascript
复制
[root@study-01 ~]# docker run -d --name es1 -p 9200:9200 -p 9300:9300 elasticsearch

使用浏览器访问9200端口,看看是否正常返回如下json数据:

使用docker安装elasticsearch伪分布式集群以及安装ik中文分词插件
使用docker安装elasticsearch伪分布式集群以及安装ik中文分词插件

能返回图中的json数据代表已经启动成功,接着再启动两个节点:

代码语言:javascript
复制
[root@study-01 ~]# docker run -d --name es2 -p 9201:9200 -p 9301:9300 elasticsearch
[root@study-01 ~]# docker run -d --name es3 -p 9202:9200 -p 9302:9300 elasticsearch

启动成功后,此时会有三个实例正在运行:

使用docker安装elasticsearch伪分布式集群以及安装ik中文分词插件
使用docker安装elasticsearch伪分布式集群以及安装ik中文分词插件

4.由于我们需要编辑配置文件来完成es伪分布式集群的配置,但该容器默认不自带vi或vim命令,所以我们还得先进入到容器里,将所有的实例都安装上vim命令,示例如下:

代码语言:javascript
复制
[root@study-01 ~]# docker exec -it 2dc233622dcb bash
root@2dc233622dcb:/usr/share/elasticsearch# apt-get update
root@2dc233622dcb:/usr/share/elasticsearch# apt-get install vim -y

5.我们将es1作为master节点,剩余的es2和es3作为slave节点,首先编辑es1的配置文件内容如下:

代码语言:javascript
复制
root@2dc233622dcb:/usr/share/elasticsearch# vim config/elasticsearch.yml # 在文件末尾加入如下内容
# 开启跨域,为了让es-head可以访问
http.cors.enabled: true
http.cors.allow-origin: "*"

# 集群的名称
cluster.name: es
# 节点的名称
node.name: es1
# 指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: true
# 允许该节点存储数据(默认开启)
node.data: true
# 允许任何ip访问
network.host: 0.0.0.0
# 通过这个ip列表进行节点发现,我这里配置的是各个容器的ip
discovery.zen.ping.unicast.hosts: ["127.0.0.1","172.17.0.2","172.17.0.4","172.17.0.5"]
#如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 - 分裂的大脑 - 这将导致数据丢失
discovery.zen.minimum_master_nodes: 2
root@2dc233622dcb:/usr/share/elasticsearch# 

es2和es3的配置文件配置的内容则如下:

代码语言:javascript
复制
-----------------------es2-----------------------
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name: es
node.name: es2

network.host: 0.0.0.0
node.master: true
node.data: true

discovery.zen.ping.unicast.hosts: ["127.0.0.1","172.17.0.2","172.17.0.4","172.17.0.5"]
discovery.zen.minimum_master_nodes: 2

-----------------------es3-----------------------
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name: es
node.name: es3

network.host: 0.0.0.0
node.master: true
node.data: true

discovery.zen.ping.unicast.hosts: ["127.0.0.1","172.17.0.2","172.17.0.4","172.17.0.5"]
discovery.zen.minimum_master_nodes: 2

6.配置好后,重启所有的es实例容器:

代码语言:javascript
复制
[root@study-01 ~]# docker restart 2dc233622dcb
[root@study-01 ~]# docker restart 81d5bcb5394a
[root@study-01 ~]# docker restart e354f31b7785

7.重启完成之后,执行如下命令确认一下集群状况:

代码语言:javascript
复制
[root@study-01 ~]# curl '192.168.190.129:9200/_cluster/health?pretty'
{
  "cluster_name" : "es",
  "status" : "green",  # 为green则代表健康没问题,如果是yellow或者red则是集群有问题
  "timed_out" : false,  # 是否有超时
  "number_of_nodes" : 3,  # 集群中的节点数量 
  "number_of_data_nodes" : 2,  # 集群中data节点的数量
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}
[root@study-01 ~]#

如果需要配置其他配置项的话,可以参考如下说明进行配置:

代码语言:javascript
复制
#集群的名称
cluster.name: es6.2
#节点名称,其余两个节点分别为node-2 和node-3
node.name: node-1
#指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: true
#允许该节点存储数据(默认开启)
node.data: true
#索引数据的存储路径
path.data: /usr/local/elk/elasticsearch/data
#日志文件的存储路径
path.logs: /usr/local/elk/elasticsearch/logs
#设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
bootstrap.memory_lock: true
#绑定的ip地址
network.host: 0.0.0.0
#设置对外服务的http端口,默认为9200
http.port: 9200
# 设置节点间交互的tcp端口,默认是9300 
transport.tcp.port: 9300
#Elasticsearch将绑定到可用的环回地址,并将扫描端口9300到9305以尝试连接到运行在同一台服务器上的其他节点。
#这提供了自动集群体验,而无需进行任何配置。数组设置或逗号分隔的设置。每个值的形式应该是host:port或host
#(如果没有设置,port默认设置会transport.profiles.default.port 回落到transport.tcp.port)。
#请注意,IPv6主机必须放在括号内。默认为127.0.0.1, [::1]
discovery.zen.ping.unicast.hosts: ["192.168.8.101:9300", "192.168.8.103:9300", "192.168.8.104:9300"]
#如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 - 分裂的大脑 - 这将导致数据丢失
discovery.zen.minimum_master_nodes: 3

安装es-head可视化插件

1.这一小节我们来安装es-head,同样的,先在镜像仓库中搜索相应的镜像:

使用docker安装elasticsearch伪分布式集群以及安装ik中文分词插件
使用docker安装elasticsearch伪分布式集群以及安装ik中文分词插件

2.拉取镜像:

代码语言:javascript
复制
docker pull mobz/elasticsearch-head:5

3.启动镜像为容器:

代码语言:javascript
复制
[root@study-01 ~]# docker run -d --name es-head -p 9100:9100 mobz/elasticsearch-head:5

4.同样需要进入到容器里安装一下vim命令:

代码语言:javascript
复制
[root@study-01 ~]# docker exec -it 85f03139f1ba bash
root@85f03139f1ba:/usr/src/app# apt-get update
root@85f03139f1ba:/usr/src/app# apt-get install vim -y

如果执行apt-get update时,报如下错误的话:

代码语言:javascript
复制
W: Failed to fetch http://deb.debian.org/debian/dists/jessie/main/binary-amd64/Packages  Hash Sum mismatch

E: Some index files failed to download. They have been ignored, or old ones used instead.

则需要更换安装源,由于没有vi及vim命令,只能使用echo来重定向了,如下示例:

代码语言:javascript
复制
root@85f03139f1ba:/usr/src/app# mv /etc/apt/sources.list /etc/apt/sources.list.bak
root@85f03139f1ba:/usr/src/app# echo -e "deb http://mirrors.aliyun.com/debian wheezy main contrib non-free\ndeb-src http://mirrors.aliyun.com/debian wheezy main contrib non-free\ndeb http://mirrors.aliyun.com/debian wheezy-updates main contrib non-free\ndeb-src http://mirrors.aliyun.com/debian wheezy-updates main contrib non-free\ndeb http://mirrors.aliyun.com/debian-security wheezy/updates main contrib non-free\ndeb-src http://mirrors.aliyun.com/debian-security wheezy/updates main contrib non-free" > /etc/apt/sources.list
root@85f03139f1ba:/usr/src/app# 

5.es-head使用的是grunt server作为服务器,而grunt server默认监听的是localhost,所以我们需要修改Gruntfile.js文件,增加一段配置,不然外部是无法访问的,如下:

代码语言:javascript
复制
root@85f03139f1ba:/usr/src/app# vim Gruntfile.js
connect: {
        server: {
                options: {
                        hostname: '0.0.0.0',  # 增加这段
                        port: 9100,
                        base: '.',
                        keepalive: true
                }
        }
}
root@85f03139f1ba:/usr/src/app#

6.配置好后,重启容器:

代码语言:javascript
复制
[root@study-01 ~]# docker restart 85f03139f1ba

7.使用浏览器访问9100端口,访问结果如下则是正常的,可以看到es集群的状态:

使用docker安装elasticsearch伪分布式集群以及安装ik中文分词插件
使用docker安装elasticsearch伪分布式集群以及安装ik中文分词插件

安装ik中文分词插件

中文分词就是将一句话的语义,分成一个个的词,之所以要分词是因为需要保证搜索的准确度。es默认对于英文分词的支持较好,毕竟是老外开发的,并且英文本身的语言特性也利于分词,只需要按空格、逗号、分号隔开即可。但中文不一样,es对中文分词的时候,也是和英文一样,一个个词的分,所以就会导致搜索的准确度较差。例如我想搜中国这个词,却会返回学习中、开车中、出国事项等包含中字和国字的数据。因此我们需要使用一些中文的分词插件来解决这种问题。

es有许多中文分词的插件,其中较为流行的是elasticsearch-analysis-ik,GitHub地址如下:

https://github.com/medcl/elasticsearch-analysis-ik

我们来安装一下这个插件,这里以es1节点为例,首先进入容器并下载该插件到容器中:

代码语言:javascript
复制
[root@study-01 ~]# docker exec -it es1  # 进入es1容器
root@2dc233622dcb:/usr/share/elasticsearch# wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.11/elasticsearch-analysis-ik-5.6.11.zip   # 下载压缩包

然后在es的plugins目录下创建ik目录,并解压下载的安装包到该目录下:

代码语言:javascript
复制
root@2dc233622dcb:/usr/share/elasticsearch# mkdir ./plugins/ik   # 创建ik目录
root@2dc233622dcb:/usr/share/elasticsearch# unzip elasticsearch-analysis-ik-5.6.11.zip  # 解压
root@2dc233622dcb:/usr/share/elasticsearch# mv elasticsearch/* plugins/ik/  # 移动解压后的文件
root@2dc233622dcb:/usr/share/elasticsearch# rm -rf elasticsearch   # 删除空目录
root@2dc233622dcb:/usr/share/elasticsearch# cd plugins/ik/
root@2dc233622dcb:/usr/share/elasticsearch/plugins/ik# ls   # 该插件所包含的文件如下
commons-codec-1.9.jar    elasticsearch-analysis-ik-5.6.11.jar  plugin-descriptor.properties
commons-logging-1.2.jar  httpclient-4.5.2.jar
config           httpcore-4.4.4.jar
root@2dc233622dcb:/usr/share/elasticsearch/plugins/ik#

我这里的es版本是5.6.12的,但是ik并没有5.6.12对应的版本可下载,于是我就下载了5.6.11版本。由于版本不符,所以还需编辑配置文件如下,手动修改一下版本:

代码语言:javascript
复制
root@1c2a4dbc8de6:/usr/share/elasticsearch/plugins/ik# vim plugin-descriptor.properties
version=5.6.12
elasticsearch.version=5.6.12
root@1c2a4dbc8de6:/usr/share/elasticsearch/plugins/ik# 

其他节点也是和上面一样的步骤,这里就不赘述了。最后需重启es容器:

代码语言:javascript
复制
[root@study-01 ~]# docker restart es1
[root@study-01 ~]# docker restart es2
[root@study-01 ~]# docker restart es3
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • docker安装elasticsearch伪分布式集群
  • 安装es-head可视化插件
  • 安装ik中文分词插件
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档