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

文章目录

  • 前言
  • 环境
    • Java 安装
    • 安装docker
    • dockers compose 安装
  • es部署
    • 单节点部署测试
      • 安装ES
    • 安装kibana
    • 安装ik分词器
      • 在线安装
      • 离线安装
    • 集群部署
      • 部署镜像
      • 安装cerebro
      • 测试

前言

没什么就是来玩玩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包
玩转Elastic Search 之 服务集群搭建实例_第1张图片
要的小伙伴自取。

之后我们加载一下镜像。

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

单节点部署测试

安装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 端口
玩转Elastic Search 之 服务集群搭建实例_第2张图片
访问正常

安装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
玩转Elastic Search 之 服务集群搭建实例_第3张图片

安装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看到有两个数据卷正在被使用。
在这里插入图片描述

并且可以看到具体信息
玩转Elastic Search 之 服务集群搭建实例_第4张图片

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

玩转Elastic Search 之 服务集群搭建实例_第5张图片

然后重启容器。

docker restart es

之后我们可以看到分词效果:
玩转Elastic Search 之 服务集群搭建实例_第6张图片
有两个模式
ik_smart
ik_max_word
现在演示的是ik_max_word 这个就和N-gram 有点像了。

此外也支持扩展词库。这个和jieba是一样的,格式也一样。
玩转Elastic Search 之 服务集群搭建实例_第7张图片
当然还有一些停用词,这个在做聊天机器人的时候用的不少。各大输入法平台都有提供。

集群部署

部署镜像

先说明一下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

这个是我上传的文件
玩转Elastic Search 之 服务集群搭建实例_第8张图片

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

vi /etc/sysctl.conf

添加这个:

vm.max_map_count=262144

玩转Elastic Search 之 服务集群搭建实例_第9张图片
然后

sysctl -p

让修改生效

之后启动集群

docker-compose up -d

玩转Elastic Search 之 服务集群搭建实例_第10张图片

安装cerebro

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

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

我这里上传了一个:
玩转Elastic Search 之 服务集群搭建实例_第11张图片

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

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

chomd 777 cerebro

然后

bash cerebro

之后启动成功。
玩转Elastic Search 之 服务集群搭建实例_第12张图片
玩转Elastic Search 之 服务集群搭建实例_第13张图片

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

然后可以看到有3个
玩转Elastic Search 之 服务集群搭建实例_第14张图片

测试

这里的话我们可以直接使用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"
      }
    }
  }
}

此时可以看到有东西了
玩转Elastic Search 之 服务集群搭建实例_第15张图片

POST /huteroxdev/_doc/1
{
  "name":"小明",
  "age":18
}

POST /huteroxdev/_doc/2
{
  "name":"小红",
  "age":18
}

然后查一下:
玩转Elastic Search 之 服务集群搭建实例_第16张图片

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

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

docker stop $(docker ps -a -q)

你可能感兴趣的:(JAVA后端,docker,linux,运维)