如何在本地电脑搭建ES伪集群环境

前言

正所谓工欲善其事必先利其器,因为ES认证考试都是实操题目,想要考出一个好成绩必须具备一个集群环境可以实操练习。

我猜想应该很多人没有条件操作真实的集群环境,所以准备一个本地的伪集群环境是必不可少的。

我准备考试的时候,ES官方指引上写明了考试的版本是ES7.2,所以我下面也是用这个版本为例说明如何在本地搭建集群环境。

之所以叫伪集群,是因为它不是真实的多节点集群。而是本地电脑通过一些手段模拟出的集群架构。我打算介绍两种本地搭建集群的方案,一种是通过多个端口模拟多节点集群,一种是通过docker模拟多节点集群。

环境:

  • Elasticsearch 7.4
  • kibana 7.4
  • MAC OS

方案一、多端口本地模拟集群

首先,我们去官网下载ES7.2的压缩包,然后解压成三份不同的目录,我本地命名是

es7.2-node1 es7.2-node2 es7.2-node3

首先打开node1目录,config目录下的elasticsearch.yml文件,我的配置如下:

#集群名称
cluster.name: elastic-certified

#节点名称
node.name: node-1

#数据目录地址
path.data: /usr/local/elk/es7.2/datas/data1

#日志目录地址
path.logs: /usr/local/elk/es7.2/logs/log1

#服务启动后绑定的地址,这里设置为可以任意地址
network.host: 0.0.0.0

#http端口,用于浏览器访问
http.port: 9200

#tcp端口,内部通信
transport.tcp.port: 9300

#以便集群中的节点都互相发现对方进行选主
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"]

#第一次启动全新的ES集群时,这个配置起作用,告诉集群符合选主条件的节点
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]

剩下两个集群的配置,我这里只贴出不一样的地方

node-2配置,

node.name: node-2

path.data: /usr/local/elk/es7.2/datas/data2

path.logs: /usr/local/elk/es7.2/logs/log2

http.port: 9201

transport.tcp.port: 9301

node-3配置,

node.name: node-3

path.data: /usr/local/elk/es7.2/datas/data3

path.logs: /usr/local/elk/es7.2/logs/log3

http.port: 9202

transport.tcp.port: 9302

依次启动三个节点,

./es7.2-node1/bin/elasticsearch

然后访问下集群

http://localhost:9200/_cat/nodes

返回,

192.168.31.235 14 94 13 2.84   mdi - node-3
192.168.31.235 28 94 16 2.84   mdi - node-1
192.168.31.235 18 94 16 2.84   mdi * node-2

方案二、使用docker本地搭建集群

首先需要本地电脑安装docker环境,这一步本文省略了。网上文章比较多。

我个人还是比较推荐这种方式,一是环境配置好之后后面可以一键启动整个环境,二是更接近真实的生产环境。

先准备docker的yml文件,的文件如下:

version: '2.2'
services:
  kibana:
    image: docker.elastic.co/kibana/kibana:7.4.0
    container_name: kibana7
    environment:
      - I18N_LOCALE=zh-CN
      - XPACK_GRAPH_ENABLED=true
      - TIMELION_ENABLED=true
      - XPACK_MONITORING_COLLECTION_ENABLED="true"
    ports:
      - "5601:5601"
    networks:
      - es7net
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.4.0
    container_name: es7_01
    environment:
      - cluster.name=cluster-test
      - node.name=es7_01
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.seed_hosts=es7_01,es7_02
      - cluster.initial_master_nodes=es7_01,es7_02
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es7data1:/usr/share/elasticsearch/data
      #- es7plugins1:/usr/share/elasticsearch/plugins
      #- ./plugins1:/usr/share/elasticsearch/plugins
    ports:
      - 9200:9200
    networks:
      - es7net
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.4.0
    container_name: es7_02
    environment:
      - cluster.name=cluster-test
      - node.name=es7_02
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.seed_hosts=es7_01,es7_02
      - cluster.initial_master_nodes=es7_01,es7_02
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es7data2:/usr/share/elasticsearch/data
      #- es7plugins2:/usr/share/elasticsearch/plugins
      #- ./plugins2:/usr/share/elasticsearch/plugins
    networks:
      - es7net


volumes:
  es7data1:
    driver: local
  es7plugins1:
    driver: local
  es7data2:
    driver: local
  es7plugins2:
    driver: local

networks:
  es7net:
    driver: bridge

简单解释下,首先我配置了一个kibana的服务,版本是7.4.0,使用端口5601。然后是两个es节点,版本也是7.4.0,集群名称是cluster-test。

启动命令,

docker-compose up

第一次的时候,会拉取需要的镜像。时间稍慢。启动完毕后,验证下是否启动成功。打开浏览器输入:

http://localhost:9200

返回:

{
  "name" : "es7_01",
  "cluster_name" : "cluster-test",
  "cluster_uuid" : "QgWluu5BTj6WwR13n6Khuw",
  "version" : {
    "number" : "7.4.0",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "22e1767283e61a198cb4db791ea66e3f11ab9910",
    "build_date" : "2019-09-27T08:36:48.569419Z",
    "build_snapshot" : false,
    "lucene_version" : "8.2.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

再输入:

http://localhost:9200/_cat/nodes

返回:

172.20.0.4 39 98 22 1.41 0.69 0.31 dilm * es7_01
172.20.0.2 30 98 22 1.41 0.69 0.31 dilm - es7_02

浏览器本地方位5601kibana也是可以正常启动的。

是不是发现简直不能太方便,而且可以很容易的切换不同版本的ES。

报错:

{
  "error": {
    "root_cause": [
      {
        "type": "security_exception",
        "reason": "current license is non-compliant for [security]",
        "license.expired.feature": "security"
      }
    ],
    "type": "security_exception",
    "reason": "current license is non-compliant for [security]",
    "license.expired.feature": "security"
  },
  "status": 403
}

可能有人会有疑问,早docker环境下如何修改ES的配置文件呢?这个比本地环境稍微麻烦一些,我们需要进入容器内部修改。首先我们先看下已经启动的容器进程,

$ docker ps
CONTAINER ID   IMAGE                                                 COMMAND                  CREATED       STATUS       PORTS                              NAMES
da6413cdcc8d   docker.elastic.co/elasticsearch/elasticsearch:7.4.0   "/usr/local/bin/dock…"   2 hours ago   Up 2 hours   9200/tcp, 9300/tcp                 es7_02
f46221c171a9   docker.elastic.co/elasticsearch/elasticsearch:7.4.0   "/usr/local/bin/dock…"   2 hours ago   Up 2 hours   0.0.0.0:9200->9200/tcp, 9300/tcp   es7_01
7bbdd98281a4   docker.elastic.co/kibana/kibana:7.4.0                 "/usr/local/bin/dumb…"   2 hours ago   Up 2 hours   0.0.0.0:5601->5601/tcp             kibana7

然后进入容器修改配置文件,或者其它一些操作。

$ docker exec -it es7_01 /bin/bash
[root@f46221c171a9 elasticsearch]#
[root@f46221c171a9 elasticsearch]# ls
LICENSE.txt  NOTICE.txt  README.textile  bin  config  data  jdk  lib  logs  modules  plugins
[root@f46221c171a9 elasticsearch]# ls config/
elasticsearch.keystore  elasticsearch.yml  jvm.options  log4j2.properties  role_mapping.yml  roles.yml  users  users_roles

退出容器,输入exit即可。然后重启容器。

如果要停止容器,使用下面的命令。

#停止容器
docker-compose down
#停止容器并且移除数据
docker-compose down -v

参考:

  • https://github.com/deviantony/docker-elk
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值