1. 前言
当有且仅有一台虚拟机的情况下,又想体验ES集群,就可以试一下使用docker-compose部署一个ES伪集群。
2. 部署ES
2.1 修改linux系统权限
# 往/etc/sysctl.conf添加vm.max_map_count=262144
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
# 执行命令,使配置生效
sysctl -p
2.2 运行 docker-compose.yaml
# docker-compose.yaml
version: '1.0'
services:
es01:
image: elasticsearch:7.12.1
container_name: es01
restart: always
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"
- "ELASTIC_PASSWORD=es123456"
volumes:
- data01:/usr/share/elasticsearch/data
- plugins01:/usr/share/elasticsearch/plugins
ports:
- 9200:9200
networks:
- elastic
es02:
image: elasticsearch:7.12.1
container_name: es02
restart: always
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"
- "ELASTIC_PASSWORD=es123456"
volumes:
- data02:/usr/share/elasticsearch/data
- plugins02:/usr/share/elasticsearch/plugins
ports:
- 9201:9200
networks:
- elastic
es03:
image: elasticsearch:7.12.1
container_name: es03
restart: always
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"
- "ELASTIC_PASSWORD=es123456"
volumes:
- data03:/usr/share/elasticsearch/data
- plugins03:/usr/share/elasticsearch/plugins
ports:
- 9202:9200
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
plugins01:
driver: local
plugins02:
driver: local
plugins03:
driver: local
networks:
elastic:
driver: bridge
# 运行
docker-compose up -d
# 查看
docker-compose ls
[root@192 es]# docker-compose ls
NAME STATUS CONFIG FILES
es running(3) /deploy/es/docker-compose.yaml
# 或者
docker ps |grep elasticsearch
[root@192 es]# docker ps |grep elasticsearch
ed644e91e74b elasticsearch:7.12.1 "/bin/tini -- /usr/l…" 10 minutes ago Up 10 minutes 9300/tcp, 0.0.0.0:9201->9200/tcp, :::9201->9200/tcp es02
1d54eb78601b elasticsearch:7.12.1 "/bin/tini -- /usr/l…" 10 minutes ago Up 10 minutes 9300/tcp, 0.0.0.0:9202->9200/tcp, :::9202->9200/tcp es03
c900e6b79827 elasticsearch:7.12.1 "/bin/tini -- /usr/l…" 10 minutes ago Up 10 minutes 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 9300/tcp es01
# 表示es的容器已经部署好了。
2.3 添加分词器
### 1.可以最开始制作带分词器的镜像,然后将yaml文件中的image改为该镜像即可。该步骤在<<k8s 部署ES集群>>中有提及。
### 2.在创建好容器之后,再添加分词器。下面是步骤:
# 下载
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
# 解压
unzip elasticsearch-analysis-ik-7.12.1.zip -d ./ik/
# 复制到容器中
docker cp ./ik/ es01:/usr/share/elasticsearch/plugins
docker cp ./ik/ es02:/usr/share/elasticsearch/plugins
docker cp ./ik/ es03:/usr/share/elasticsearch/plugins
# 重启容器
# 在docker-compose.yaml文件路径下
docker-compose restart
# 通用
docker restart es01 es02 es03
# 测试分词器是否生效
curl -XGET "http://192.168.255.132:9200/_analyze?pretty" -H 'Content-Type: application/json' -d '{"text": "今天天气真好","tokenizer": "ik_max_word"}'
# 有如下返回,则表示分词器生效了。
{
"tokens" : [
{
"token" : "今天天气",
"start_offset" : 0,
"end_offset" : 4,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "今天",
"start_offset" : 0,
"end_offset" : 2,
"type" : "CN_WORD",
"position" : 1
},
{
"token" : "天天",
"start_offset" : 1,
"end_offset" : 3,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "天气",
"start_offset" : 2,
"end_offset" : 4,
"type" : "CN_WORD",
"position" : 3
},
{
"token" : "真好",
"start_offset" : 4,
"end_offset" : 6,
"type" : "CN_WORD",
"position" : 4
}
]
}
2.4 简单测试
# 访问路径: ip:port ;将ip替换为当前宿主机的ip,port为9200、9201、9202任意一个都可以
# 查看节点
curl -X GET "http://192.168.255.132:9200/_cat/nodes?v"
# 查看健康
curl -X GET "http://192.168.255.132:9200/_cluster/health?pretty"
# 添加索引
curl -X PUT "http://192.168.255.132:9200/my_index"
# 插入文档
curl -X POST "http://192.168.255.132:9200/my_index/_doc/1" -H "Content-Type: application/json" -d '{"title": "测试文档","content": "这是一个测试文档。"}'
# 搜索文档
curl -X GET "http://192.168.255.132:9200/my_index/_search?q=测试文档"
# 删除索引
curl -X DELETE "http://192.168.255.132:9200/my_index"
3. 部署cerebro
# 拉取镜像
docker pull lmenezes/cerebro
# docker run 运行
docker run -d -p 9002:9000 --restart=unless-stopped --name cerebro -v /etc/localtime:/etc/localtime -v cerebro:/opt/cerebro -h cerebro lmenezes/cerebro
#访问
ip:9002
在页面添加ES的访问地址即可。
进入后,便可以看见集群的监控面板了。