玩转Elastic Search 之 服务集群搭建实例

Posted Huterox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩转Elastic Search 之 服务集群搭建实例相关的知识,希望对你有一定的参考价值。

文章目录

前言

没什么就是来玩玩Elastic Search 来look。顺便记录一下,就非常nice,顺便放松一下,水一篇博客~。

环境

阿里云 centos8
2 核 8 G

连接工具 Final Shell

这个是非常干净的服务器,咱们刚刚创建的一个实例。

Java 安装

这个没啥先装一个Java:

sudo yum -y install java-11-openjdk-devel

或者这个,上面那个把Java的一些额外的东西都会给你搞好。

sudo yum -y install java-11-openjdk

安装docker

卸载可能存在的docker版本

yum remove docker \\
                  docker-client \\
                  docker-client-latest \\
                  docker-common \\
                  docker-latest \\
                  docker-latest-logrotate \\
                  docker-logrotate \\
                  docker-selinux \\
                  docker-engine-selinux \\
                  docker-engine \\
                  docker-ce

咱们这个是新的玩意,不需要这个,但是如果你有可能安装过了,那就可以跳过,或者重装一下。

输入下面的指令,这个是安装一些可能需要的依赖的:

yum install -y yum-utils \\
           device-mapper-persistent-data \\
           lvm2 --skip-broken

然后设置一下镜像:

yum-config-manager \\
    --add-repo \\
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache --refresh

然后安装一下:

yum install -y docker-ce

安装成功,我们可以看到这个:

之后,把防火墙关一下:

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

dockers compose 安装

考虑到后面还要部署集群的话,那么我们必然是需要来安装这个玩意的。

curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

之后可以在这里看到这个:

然后我们修改一下权限:

chmod +x /usr/local/bin/docker-compose

好了这个就装好了。

es部署

这个可以去docker 镜像那里去拉取,我这里也有一个7.12的
链接:https://pan.baidu.com/s/1tmBP7RHVX62FdAigpcV0Lg
提取码:6666

我在服务器这边创建了一个目录,然后上传了这个tar包

要的小伙伴自取。

之后我们加载一下镜像。

为了测试,我们先做单节点部署,看看行不行。

单节点部署测试

安装ES

我们先运行一下我们的docker

systemctl start docker

然后切换到 es.tar 的目录,我的目录是 /elastic

然后加载镜像

 docker load -i es.tar 

之后我们创建一个容器:

docker run -d \\
	--name es \\
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \\
    -e "discovery.type=single-node" \\
    -v es-data:/usr/share/elasticsearch/data \\
    -v es-plugins:/usr/share/elasticsearch/plugins \\
    --privileged \\
    --network es-net \\
    -p 9200:9200 \\
    -p 9300:9300 \\
elasticsearch:7.12.1

命令解释:

  • -e "cluster.name=es-docker-cluster":设置集群名称
  • -e "http.host=0.0.0.0":监听的地址,可以外网访问
  • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":内存大小
  • -e "discovery.type=single-node":非集群模式
  • -v es-data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录
  • -v es-logs:/usr/share/elasticsearch/logs:挂载逻辑卷,绑定es的日志目录
  • -v es-plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录
  • --privileged:授予逻辑卷访问权
  • --network es-net :加入一个名为es-net的网络中
  • -p 9200:9200:端口映射配置

之后你可以看到容器当中创建了一个叫做es的玩意

之后打开你的 IP:9200 端口

访问正常

安装kibana

这个是咱们联调elastic用的。

docker run -d \\
--name kibana \\
-e ELASTICSEARCH_HOSTS=http://es:9200 \\
--network=es-net \\
-p 5601:5601  \\
kibana:7.12.1

运行这个命令会自动帮助我们安装。

  • --network es-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中
  • -e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
  • -p 5601:5601:端口映射配置

可以看到有两个了

之后在浏览器打开 5601端口

由于一个DevTool

安装ik分词器

这个分词器主要是针对中文,和jieba一样也支持自定义词库。

安装的话两种方案:

在线安装

这个比较慢。

执行如下指令就好了:

# 进入容器内部
docker exec -it containerName /bin/bash

# 在线下载并安装
./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip

#退出
exit
#重启容器
docker restart elasticsearch

离线安装

那么我们这边选择离线安装,所以先到ik官网,去搞到压缩包。

我们可以在docke看到有两个数据卷正在被使用。

并且可以看到具体信息

然后的话我们直接进入那个目录,然后上传ik分词器。

然后重启容器。

docker restart es

之后我们可以看到分词效果:

有两个模式
ik_smart
ik_max_word
现在演示的是ik_max_word 这个就和N-gram 有点像了。

此外也支持扩展词库。这个和jieba是一样的,格式也一样。

当然还有一些停用词,这个在做聊天机器人的时候用的不少。各大输入法平台都有提供。

集群部署

部署镜像

先说明一下es默认启动1GB内存,所以需要部署集群的话,至少保证你的服务器有4GB的运行内存。用都是一样的,只是看你的需求,如果是做快速缓存的话不如直接SpringCache+ redis ,像我只是玩玩的,最多用es做个简单查询,而且数据量也不多,所以还不如直接mysql怼,加上缓存缓解压力,毕竟qps 1K 都木有。

那么由于咱们这里是8GB的服务器,所以先浪一波,反正看自己,那么我这里先把容器stop一下。

创建一个docker-compose文件,然后上传服务器。

version: '2.2'
services:
  es01:
    image: elasticsearch:7.12.1
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: elasticsearch:7.12.1
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - data02:/usr/share/elasticsearch/data
    ports:
      - 9201:9200
    networks:
      - elastic
  es03:
    image: elasticsearch:7.12.1
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic
    ports:
      - 9202:9200
volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local

networks:
  elastic:
    driver: bridge

这个是我上传的文件

然后我们修改一下。这个文件:

vi /etc/sysctl.conf

添加这个:

vm.max_map_count=262144


然后

sysctl -p

让修改生效

之后启动集群

docker-compose up -d

安装cerebro

这个主要是用来监控集群的,刚刚那个也可以。

这个你可以上传你的服务器,也可以直接在本地使用。那么我们就上传服务器了。

我这里上传了一个:

没办法,这些玩意不好下,只能用老一点的版。

进入到bin,然后的话,改一下权限

chomd 777 cerebro

然后

bash cerebro

之后启动成功。

我这里是装在服务器的,所以填这个就好了

然后可以看到有3个

测试

这里的话我们可以直接使用Kibana测试,但是刚刚我们创建的集群和那个Kibana不在一个虚拟网络,所以我们需要重新创建,或者直接使用postman去搞一下。

这里我们再创建一个容器,玩玩。

docker run -d \\
--name kibananodes \\
-e ELASTICSEARCH_HOSTS=http://172.19.0.2:9200 \\
--network=elasticnodes_elastic \\
-p 5601:5601  \\
kibana:7.12.1

这个http://172.19.0.2:9200是我们es01 的内网地址,实际上你改成http:ip:9200也可以。

然后我们来创建一个mapping

PUT /huteroxdev

  "settings": 
    "number_of_shards": 3, 
    "number_of_replicas": 1 
  ,
  "mappings": 
    "properties": 
      "name":
        "type": "text"
      ,
      "age":
        "type": "integer"
      
    
  

此时可以看到有东西了

POST /huteroxdev/_doc/1

  "name":"小明",
  "age":18


POST /huteroxdev/_doc/2

  "name":"小红",
  "age":18

然后查一下:

完美,接下来就用RestClient 玩一下就好了。

当然玩玩还是单节点就好了。
最后,停止所有容器,还是玩玩单节点吧,那玩意2GB 服务器就能玩。

docker stop $(docker ps -a -q)

以上是关于玩转Elastic Search 之 服务集群搭建实例的主要内容,如果未能解决你的问题,请参考以下文章

玩转Linux系统之轻松搭建Mysql主从复制集群

玩转Raspberry_Pi_4之搭建MongoDB集群

玩转Linux系统之轻松搭建Mysql读写分离集群

Elastic Search和Kibana入门

Elastic Search 集群

玩转 Redis 集群之 Sentinel