没什么就是来玩玩Elastic Search 来look。顺便记录一下,就非常nice,顺便放松一下,水一篇博客~。
阿里云 centos8
2 核 8 G
连接工具 Final Shell
这个是非常干净的服务器,咱们刚刚创建的一个实例。
这个没啥先装一个Java:
sudo yum -y install java-11-openjdk-devel
或者这个,上面那个把Java的一些额外的东西都会给你搞好。
sudo yum -y install java-11-openjdk
卸载可能存在的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
考虑到后面还要部署集群的话,那么我们必然是需要来安装这个玩意的。
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
好了这个就装好了。
这个可以去docker 镜像那里去拉取,我这里也有一个7.12的
链接:https://pan.baidu.com/s/1tmBP7RHVX62FdAigpcV0Lg
提取码:6666
我在服务器这边创建了一个目录,然后上传了这个tar包
要的小伙伴自取。
之后我们加载一下镜像。
为了测试,我们先做单节点部署,看看行不行。
我们先运行一下我们的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用的。
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
:端口映射配置
这个分词器主要是针对中文,和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官网,去搞到压缩包。
然后的话我们直接进入那个目录,然后上传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
这个主要是用来监控集群的,刚刚那个也可以。
这个你可以上传你的服务器,也可以直接在本地使用。那么我们就上传服务器了。
没办法,这些玩意不好下,只能用老一点的版。
进入到bin,然后的话,改一下权限
chomd 777 cerebro
然后
bash cerebro
我这里是装在服务器的,所以填这个就好了
这里的话我们可以直接使用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)