elasticsearch集群配置[基于Docker]

elasticsearch集群配置[基于Docker]

  • 环境准备
    • 安装Docker
  • 开始配置
    • 一、下载elasticsearch镜像
    • 二、创建elasticsearch容器
      • 创建宿主机挂载目录
      • 创建三个容器,映射端口,挂载目录
        • 创建容器es1
        • 创建容器es2
        • 创建容器es3
            • 命令作用
            • 命令详情
            • 挂载目的
        • 查看容器状态
    • 配置集群
          • 配置文件信息
          • 重启容器
    • 验证

环境准备

安装Docker

CentOS下Docker安装部署及常用命令

开始配置

一、下载elasticsearch镜像

1.查看镜像版本

[root@localhost conf] docker search elasticsearch
NAME                                 DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
elasticsearch                        Elasticsearch is a powerful open source sear…   4048                [OK]                
nshou/elasticsearch-kibana           Elasticsearch-7.1.1 Kibana-7.1.1                110                                     [OK]
itzg/elasticsearch                   Provides an easily configurable Elasticsearc…   69                                      [OK]
mobz/elasticsearch-head              elasticsearch-head front-end and standalone …   52                                      
elastichq/elasticsearch-hq           Official Docker image for ElasticHQ: Elastic…   44                                      [OK]
elastic/elasticsearch                The Elasticsearch Docker image maintained by…   26                                      
bitnami/elasticsearch                Bitnami Docker Image for Elasticsearch          25                                      [OK]

2.下载对应镜像
采用命令 docker pull 镜像名:版本号
不输入版本号默认下载最新版,本文采用5.6.15 版本

[root@localhost conf] docker pull logstash:5.6.15

3.查看已下载的镜像

[root@localhost conf] docker images
REPOSITORY                                             TAG                 IMAGE ID            CREATED             SIZE
zookeeper                                              latest              611ffeaf5959        2 weeks ago         224MB
mysql                                                  5.7                 1e4405fe1ea9        4 weeks ago         437MB
rabbitmq                                               management          36ed80b6a1b1        4 weeks ago         180MB
logstash                                               5.6.15              4b1eb31737d4        9 months ago        660MB
mongo                                                  3.2                 fb885d89ea5c        13 months ago       300MB
redis                                                  3.2                 87856cc39862        14 months ago       76MB
elasticsearch                                          5.6.11              362c5cb1669b        15 months ago       486MB
kibana                                                 5.6.11              388661dcd03e        15 months ago       390MB
docker.elastic.co/logstash/logstash                    6.2.4               00a38ba5444c        20 months ago       657MB
nginx                                                  1.10                0346349a1a64        2 years ago         182MB

二、创建elasticsearch容器

创建宿主机挂载目录

	[root@localhost elasticsearch] mkdir -p /mydata/elasticsearch/es1/conf/
	[root@localhost elasticsearch] mkdir -p /mydata/elasticsearch/es2/conf/
	[root@localhost elasticsearch] mkdir -p /mydata/elasticsearch/es3/conf/

并创建配置文件(为空亦可,仅做关联,下面统一进行配置)

[root@localhost conf] pwd
/mydata/elasticsearch/es1/conf
[root@localhost conf] ll
总用量 4
-rw-r--r--. 1 root root 975 12月 23 10:29 elasticsearch.yml

创建三个容器,映射端口,挂载目录

本文采用一台虚拟机的不同端口,模拟多台机器

创建容器es1

[root@localhost conf] docker run --name es1 \
	-p 9200:9200 \
	-p 9300:9300 \
	-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
	-v /mydata/elasticsearch/es1/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
	-v /mydata/elasticsearch/es1/data:/usr/share/elasticsearch/data -d elasticsearch:5.6.11

创建容器es2

	docker run --name es2 -p 9201:9200 -p 9301:9300 \
	-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
	-v /mydata/elasticsearch/es2/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
	-v /mydata/elasticsearch/es2/data:/usr/share/elasticsearch/data -d elasticsearch:5.6.11

创建容器es3

	docker run --name es3 -p 9202:9200 -p 9302:9300 \
	-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
	-v /mydata/elasticsearch/es3/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
	-v /mydata/elasticsearch/es3/data:/usr/share/elasticsearch/data -d elasticsearch:5.6.11
命令作用
	创建一个容器,命名为 es2,
	将宿主机的9201端口映射到容器的9200端口
	并将宿主机的9301端口映射到容器的9300端口,
	同时为当前容器设置内存,
	然后将宿主机中/mydata/elasticsearch/es3/conf/elasticsearch.yml文件挂载到容器的/usr/share/elasticsearch/config/elasticsearch.yml 
	将宿主机/mydata/elasticsearch/es3/data目录挂载到容器/usr/share/elasticsearch/data
	运行模式:后台运行
	容器镜像:elasticsearch
	镜像版本:5.6.11
命令详情
	docker run
	--name es1      --name name  为当前容器命名
	-p 9200:9200	-p 宿主机端口:容器端口  指定要映射的IP和端口,但是在一个指定端口上只可以绑定一个容器   
	-p 9300:9300	同上;
		9300端口是使用tcp客户端连接使用的端口;内部通信
		9200端口是通过http协议连接es使用的端口;外部访问
	-e ES_JAVA_OPTS="-Xms256m -Xmx256m" 指定key/value进行传递环境变量,为了保证性能(默认自动分配),此处设置es内存
	-v 宿主机目录:容器目录  将容器目录挂载到宿主机目录
挂载目的
 1. 数据备份
		即使容器删除,数据依然存在于宿主机
		容器是基于镜像创建的,最后的容器文件系统包括镜像的只读层+可写层,容器中的进程操作的数据持久化都是保存在容器的可写层上。一旦容器删除后,这些数据就没了,除非我们人工备份下来(或者基于容器创建新的镜像)。可以让容器进程持久化的数据保存在主机上,这样即使容器删除了,数据还在。
 2. 数据同步
		宿主机与容器数据同步
		当容器操作容器目录/宿主操作宿主机目录,两者数据都是实时同步的
 3. 数据共享
		多个容器运行一组相关联的服务,可用来共享一些数据

查看容器状态

[root@localhost conf]docker ps
CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS              PORTS                                                  NAMES
a338b51416d5        elasticsearch:5.6.11                        "/docker-entrypoint.…"   34 minutes ago      Up 34 minutes       0.0.0.0:9202->9200/tcp, 0.0.0.0:9302->9300/tcp         es3
b04453e2fb6c        elasticsearch:5.6.11                        "/docker-entrypoint.…"   5 hours ago         Up 51 minutes       0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp         es1
efdabddf29af        elasticsearch:5.6.11                        "/docker-entrypoint.…"   5 hours ago         Up 50 minutes       0.0.0.0:9201->9200/tcp, 0.0.0.0:9301->9300/tcp         es2

配置集群

操作步骤:
修改宿主机的配置文件,容器内自动同步修改后的配置文件,重启容器即可

[root@localhost conf]vim /mydata/elasticsearch/es1/conf/elasticsearch.yml
配置文件信息
# 开启跨域,为了让es-head可以访问
http.cors.enabled: true
#允许跨域,允许所有请求
http.cors.allow-origin: "*"
# 集群的名称,es中 同名即为集群
cluster.name: elasticsearch
# 节点的名称,唯一
node.name: es2
# 指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: true
# 允许该节点存储数据(默认开启)
node.data: true
# 允许任何ip访问
network.host: 0.0.0.0
# 通过这个ip列表(内部通讯端口)进行节点发现,我这里配置的是各个容器的ip
discovery.zen.ping.unicast.hosts: ["192.168.33.129:9300","192.168.33.129:9301","192.168.33.129:9302"]
#如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 – 导致脑裂 - 这将导致数据丢失
discovery.zen.minimum_master_nodes: 2
重启容器
[root@localhost conf]docker restart es1 es2 es3

验证

三个节点
elasticsearch集群配置[基于Docker]_第1张图片

你可能感兴趣的:(elasticsearch集群配置[基于Docker])