k8s上搭建elasticsearch集群

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s上搭建elasticsearch集群相关的知识,希望对你有一定的参考价值。

参考技术A 2020-10-13
在k8s中搭建es集群的思路如下图:

service1、service2、service3用于集群内服务互通,service用于集群服务对外提供访问。

statefulset的部署文件 es-statefulset.yaml

存储卷的部署:persistant-voulmes.yaml

注:存储卷的部署不成功的问题,提供下思路:需要对应的服务器上启动nfs服务和相关路径的读写权限。

Service的部署:es-service.yaml

使用阿里云存储就不需要上面方试一那样麻创建PV和PVC了。

经验证,需要搭建三个es实例才能保证其中一个挂了之后集群还能正常运行,官方也推荐最好配置三个以上的mater node,以防数据的丢失。

ps: Elasticsearch默认单机情况下会自动引导组建集群,但是只要配置了
discovery.seed_providers
discovery.seed_hosts
cluster.initial_master_nodes
三个中的一个Elasticsearch就不会自动引导集群了。

ElasticSearch:ElasticSearch集群的搭建

由于资源有限,使用是一台机器上安装三个elasticSearch服务端组成的集群。

1. 安装elasticSearch6.3.2

将原本安装的elasticSearch6.3.2复制两份,分别重新命名,如下:

技术分享图片

2. 修改配置文件

进入elasticSearch的config目录,打开 elasticsearch.yml文件,修改如下信息:

  需要注意的是:

    默认所有节点都会存储数据。

    如果你是一台机器上多个es服务器,那么必须指定不同的tcp端口。

# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
#       Before you set out to tweak and tune the configuration, make sure you
#       understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster: 集群名,其余节点都是通过这个名字来找到集群
cluster.name: zskj
#
# ------------------------------------ Node ------------------------------------
# Use a descriptive name for the node:
# 节点名
node.name: node
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
#path.data: /path/to/data
#
# Path to log files:
#
#path.logs: /path/to/logs
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
# 节点的ip地址
network.host: 127.0.0.1
#
# Set a custom port for HTTP:
# 端口
http.port: 9200
# tcp端口。
transport.tcp.port: 9300
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
# elasticSearch集群的地址。这里使用的是一台机器的不同端口。
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"]
#
# Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1):
# 预防脑裂,建议为总集群数一半 + 1
discovery.zen.minimum_master_nodes: 2
#
# For more information, consult the zen discovery module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
# 跨域
http.cors.enabled: true
http.cors.allow-origin: "*"

需要特别注意的是:

  1. 如果你的elasticSearch节点在 elasticsearch.yml中添加了中文之后,导致elasticSearch无法启动,就必须把yml文件中的中文删除,然后就可以重启启动了。报错信息如下:

  技术分享图片

  2. 配置文件书写的时候需要注意:属性必须定格写,之后是一个“:”,之后空格,然后是属性值。不能使用tab键。

3. 启动集群

分别启动三个elasticSearch节点即可启动集群。

 4. 一个小的技巧

如果你也是和我一样,使用的是一台机器的三个elasticSearch服务端,每次都需要点到文件中,点击elasticsearch.bat,确实挺麻烦,那么你可以试试批处理。

右键创建一个文件,命名为xxxx.bat即可。使用记事本打开,然后写入如下命令,保存即可。

@echo off
title ES集群启动工具
REM 切换命令行目录为当前BAT所在目录
cd /d E:ElasticSearchelasticsearch-6.3.2in
start elasticsearch.bat

echo elasticsearch1正在启动。。。
cd /d E:ElasticSearchelasticsearch-6.3.2_02in
start elasticsearch.bat

echo elasticsearch2正在启动。。。
cd /d E:ElasticSearchelasticsearch-6.3.2_03in
start elasticsearch.bat

echo elasticsearch3正在启动。。。

作用就是:分别自动切换到三个elasticSearch的目录,然后自动点击 elasticsearch.bat,启动服务端。

如果你还安装了head插件,每次点开启动也挺麻烦,可以直接在批处理后面添加语句即可:当elasticSearch服务端完全启动之后,点击任意键启动head插件

echo 任意键继续启动head插件
pause

cd /d E:ElasticSearchhead
call grunt server

综上:你只需要双击你的批处理工具 xxxx.bat就可以完成集群的启动了,如果你在多台服务器上,那么还是一个一个启动吧。

 

以上是关于k8s上搭建elasticsearch集群的主要内容,如果未能解决你的问题,请参考以下文章

(十六)从零开始搭建k8s集群——使用KubeSphere管理平台搭建一个高可用的ElasticSearch服务平台

KubeSphere - 搭建 elasticsearch集群 及 kibana

搭建ElasticSearch7.4.2集群

2.使用Helm构建ElasticSearch集群

(十七)从零开始搭建k8s集群——使用KubeSphere管理平台搭建一个kibana管理平台

[k8s]elk架构设计-k8s集群里搭建