新手搭建项目系列——elasticsearch集群搭建
elasticsearch集群搭建
集群配置信息
主要自己使用验证技术实现,所以一主一从能够达到相互容灾效果就行
节点名 | ip |
---|---|
es-node-01 | 192.168.136.131 |
es-node-02 | 192.168.136.132 |
创建所需目录
- es-node-01
# 创建docker目录用来摆放所有docker所需要用的东西
mkdir /docker
# 创建es目录存放elasticsearch相关文件
mkdir /docker/es
# 创建data、config、plugins分类存放es的文件
mkdir /docker/es/data
mkdir /docker/es/config
mkdir /docker/es/plugins
- es-node-02
# 创建docker目录用来摆放所有docker所需要用的东西
mkdir /docker
# 创建es目录存放elasticsearch相关文件
mkdir /docker/es
# 创建data、config、plugins分类存放es的文件
mkdir /docker/es/data
mkdir /docker/es/config
mkdir /docker/es/plugins
集群配置
es-node-01
下载elasticsearch镜像
# 下载7.13.2版本elasticsearch
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.13.2
下载elasticsearch-hd镜像
# 下载latest版本elasticsearch,不填写版本号默认下载latest版本
docker pull containerize/elastichd
下载elasticsearch-ik、elasticsearch-pinyin插件
ik分词器插件
pinyin支持拼音搜索的插件
下载与elasticsearch同版本号7.13.2的包,插件版本和elasticsearch必须一致不否则会出现报错
解压插件至plugins
使用FanalShell上传插件包至/docker/es/plugins文件夹中
# 安装unzip解压插件
yum install -y unzip
# 进入plugins文件夹中
cd /docker/es/plugins
# 解压ik、pinyin
unzip elasticsearch-analysis-ik-7.13.2.zip -d elasticsearch-analysis-ik
unzip elasticsearch-analysis-pinyin-7.13.2.zip -d elasticsearch-analysis-pinyin
配置elasticsearch.yml
# 创建并编辑elasticsearch.yml
vi /docker/es/config/elasticsearch.yml
# 填写如下内容
# 绑定地址0.0.0.0代表绑定自身ip
network.host: 0.0.0.0
# 下面两个配置用来解决跨域问题
http.cors.enabled: true
http.cors.allow-origin: "*"
配置docker-compose.yml
# 创建并编辑docker-compose.yml
vi /docker/es/docker-compose.yml
# 填写如下内容
version: '2.2'
services:
# 集群节点名称
es-node-01:
# 节点镜像名称
image: docker.elastic.co/elasticsearch/elasticsearch:7.13.2
# 节点容器名称
container_name: es-node-01
# 重启后自动启动
restart: always
# 节点环境配置
environment:
# 节点名称
- node.name=es-node-01
# 所属集群名称
- cluster.name=es-elasticsearch-cluster
# 对外发布地址
- network.publish_host=192.168.136.131
# 服务绑定地址
- network.host=0.0.0.0
# 集群主机池
- discovery.seed_hosts=192.168.136.131,192.168.136.132
# 初始化主节点池
- cluster.initial_master_nodes=192.168.136.131,192.168.136.132
# 启用内存交换
- bootstrap.memory_lock=true
# 设置使用内存为256m 可以根据自身需求调整
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
ulimits:
# 不限制内存
memlock:
soft: -1
hard: -1
# 映射本地目录至容器中
volumes:
- data01:/docker/es/data
- /docker/es/plugins:/usr/share/elasticsearch/plugins
- /docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
# 访问端口
- 9200:9200
# 集群通讯端口
- 9300:9300
# 配置elasticsearch-hd
elastichd:
# 使用的镜像
image: containerize/elastichd:latest
# 使用容器名称
container_name: elasticsearch-hd
ports:
# 使用节点不要改,否则打不开
- 9800:9800
# 依赖elasticsearch
depends_on:
- "es-node-01"
# 和es-node-01进行连接
links:
- "es-node-01"
volumes:
data01:
driver: local
修改vm.max_map_count
# 编辑sysctl.conf
vi /etc/sysctl.conf
# 在最后追加
vm.max_map_count=262144
# 文件保存后刷新sysctl使之生效
sysctl -p
启动elasticsearch
# 进入es文件夹
cd /docker/es
# docker-compose命令启动
docer-compose up -d
# 使用docker ps查看正在运行的container
docker ps
这时候已经可以在宿机上访问这个节点的elasticsearch了
可以先在虚拟机上使用 curl尝试连接elasticsearh
curl localhost:9200
出现如下结果就表示这个节点本机已经可以访问了 我们可以在宿机上在尝试下
宿机访问节点1:es-node-01
192.168.136.131:9200 与自身访问结果一直,显示如下
es-node-02
与es-node-01差异
es-node-02可以按照es-node-01的方法如法炮制的配置,只需要修改docker-compose.yml中一些配置参数即可
配置docker-compose.yml
# 创建并编辑docker-compose.yml
vi /docker/es/docker-compose.yml
# 填写如下内容
version: '2.2'
services:
# 集群节点名称
es-node-02:
# 节点镜像名称
image: docker.elastic.co/elasticsearch/elasticsearch:7.13.2
# 节点容器名称
container_name: es-node-02
# 重启后自动启动
restart: always
# 节点环境配置
environment:
# 节点名称
- node.name=es-node-02
# 所属集群名称
- cluster.name=es-elasticsearch-cluster
# 对外发布地址
- network.publish_host=192.168.136.132
# 服务绑定地址
- network.host=0.0.0.0
# 集群主机池
- discovery.seed_hosts=192.168.136.131,192.168.136.132
# 初始化主节点池
- cluster.initial_master_nodes=192.168.136.131,192.168.136.132
# 启用内存交换
- bootstrap.memory_lock=true
# 设置使用内存为256m 可以根据自身需求调整
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
ulimits:
# 不限制内存
memlock:
soft: -1
hard: -1
# 映射本地目录至容器中
volumes:
- data02:/docker/es/data
- /docker/es/plugins:/usr/share/elasticsearch/plugins
- /docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
# 访问端口
- 9200:9200
# 集群通讯端口
- 9300:9300
volumes:
data02:
driver: local
elasticsearch-hd 我只在es-node-01中使用了,es-node-02中未使用
elasticsearch-hd
es-node-01和es-node-02都运行起来后就可以访问es-node-01上配置的elasticsearch-hd
将默认连接的127.0.0.1:9200替换为我们配置的192.168.136.131:9200然后点击Connect
集群状态显示为Green,表示我们的集群已经建立成功,下面可以看到集群的信息。
查看集群状态
http://192.168.136.131:9200/_cat/health?v
查看插件
http://192.168.136.131:9200/_cat/plugins
问题排查
如果集群建立有问题,首先排查每个节点是否正在运行,如果节点未运行,可以看下节点启动时的logs,来排查问题
# 通过容器的名称或id查看容器的运行logs
docker logs 【container name/id】
可根据logs中的errors等逐个排查
总结
本章主要介绍通过docker、docker-compose配置elasticsearch集群级elasticsearch-hd