从0到1ES集群搭建实践

ES集群搭建实践

虚拟机安装

下载地址

Windows & Linux:WMware Workstation 16 Pro

MacOS:WMware Fusion

构建CentOS镜像

下载系统镜像

下载地址:https://centos.org/download/

选择符合符合你电脑的指令集版本,比如我的CPU是 x86_64架构

配置网卡信息

vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none" # 关闭dhcp,需要固定ip
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="6dcded77-ba54-4f70-a16c-80535656ba86"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.3.81" #修改每个节点的ip地址
PREFIX="24"
GATEWAY="192.168.3.1" ## 确定网关地址
DNS1="114.114.114.114"
DOMAIN="8.8.8.8"
IPV6_PRIVACY="no"

重启网卡

service network restart

网卡重启报错的话,重启虚拟机

网卡验证

远程登录验证

创建elastic用户

使用elasticsearch账号操作:启动,关闭等

创建用户

useradd elastic

修改密码命令

passwd elastic

账号添加到sudoer

elastic is not in the sudoers file

su 
visudo -f /etc/sudoers## Then add the user below admin user like below syntax.
elastic ALL=(ALL)  ALL

配置Java环境

下载ES

虚拟机直接下载

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.0-linux-x86_64.tar.gz

yuminstall

https://www.elastic.co/guide/en/elasticsearch/reference/7.17/rpm.html#rpm-repo

官网手动下载

ES下载地址

https://www.elastic.co/guide/en/elasticsearch/reference/8.8/rpm.html#rpm-repo

ES7下载地址

linux version
https://www.elastic.co/downloads/past-releases/elasticsearch-7-17-10https://www.elastic.co/guide/en/elasticsearch/reference/7.17/rpm.html#rpm-repohttps://www.elastic.co/downloads/past-releases#elasticsearch  浏览各种release版本
docker version
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/docker.html

本地与目标服务器传输文件

scp elasticsearch-7.17.10-linux-x86_64.tar.gz elastic@node151:~/

解压文件

tar -xzf you.tar.gz

z : gz

x:extract

f: file name

创建数据存储目录

生产环境不允许把data和log放在elasticsearch中

sudo mkdir -p /opt/elasticsearch/data
sudo mkdir -p /opt/elasticsearch/logs
sudo chown -R elastic:elastic /opt/elasticsearch

退出Session使配置生效

quit terminal

修改配置文件

单集群单节点配置

cluster.name: zgc-cluster
node.name: node151
network.host: 172.16.193.151
http.port: 9200
transport.port: 9300
## discovery.seed_hosts: ["172.16.193.152:9300","172.16.193.153:9300"]
cluster.initial_master_nodes: ["node151"]
##cluster.initial_master_nodes: ["node152"]* cluster.name:集群名称,节点根据集群名称确定是否是同一个集群。节点自动互相发现就根据这个名称
* node.name:节点名称,集群内唯一。
* node.roles:[ data, master, voting_only ],`node.roles`配置项如果没有显式的配置,那么当前节点拥有所有角色(master、data、ingest、ml、remote_cluster_client、transform)。如果你放开了注释,或者手动显式添加了 `node.roles`配置项,那么当前节点仅拥有此配置项的中括号中显式配置的角色,没有配置的角色将被阉割。因此如果在不熟悉角色配置的情况下,不要轻易修改角色配置值, **切勿画蛇添足** **。**
* network.host: 节点对外提供服务的地址以及集群内通信的ip地址
* network.publish_host : 如果在一个局域网,节点之间通过network.host进行通信,如果不在一个局域网就需要publish_host。生产环境一般不允许公网地址,因为影响通信效率
* bootstrap.memory_lock: Swapping对性能和节点稳定性非常不利,应该不惜一切代价避免。它可能导致GC持续**几分钟**而不是几毫秒,并且可能导致节点响应缓慢甚至与集群断开连接。在弹性分布式系统中,使用Swap还不如让操作系统杀死节点效果更好。可以通过设置 `bootstrap.memory_lock: true` 以防止任何 Elasticsearch 堆内存被换出。
* http.port:对外提供服务的端口号
* discovery.seed_hosts: 集群初始化的种子节点,可配置部分或全部候选节点,大型集群可通过嗅探器发现剩余节点,考试环境配置全部节点即可
* cluster.initial_master_nodes:节点初始 `active master`节点, 必须是有master角色的节点,即必须是候选节点,但并不是必须配置所有候选节点。生产模式下启动新集群时,必须明确列出应在第一次选举中计算其选票的候选节点。第一次成功形成集群后,`cluster.initial_master_nodes`从每个节点的配置中删除设置。重新启动集群或向现有集群添加新节点时,请勿使用此设置。

增加max file descriptors

一般修改 /etc/security/limits.conf

sudo vim /etc/security/limits.conf

/etc/sysctl.conf 这个文件是所有共享的上限

*  soft    nofile  65536
*  hard    nofile  65536
fs.file-max = 190000

使配置生效

sudo sysctl -p
# Do not forget to reboot or: sysctl --system

查看是否生效

ulimit -n 65536

增加 vm.max_map_count

sudo vim /etc/sysctl.d/99-sysctl.conf

增加如下内容:

vm.max_map_count=362144

使能配置:

sudo sysctl -p

启动服务

# 前台进程
./bin/elasticsearch# 后台启动 守护进程
./bin/elasticsearch -d# 推荐方式(保存进程号 不占用窗口,并且方便杀进程): 它会在当前目录保存一个pid文件,方便查找
./bin/elasticsearch -d -p pid

关闭服务

ps -ef | grep elastic

OR

# kill by pid file
kill -9 `cat pid`
pkill -F pid

启动后验证

http://172.16.193.151:9200/http://172.16.193.151:9200/_cat/nodes?v

常见问题

本地无法访问服务

关闭防火墙,生产环境建议仅开放指定端口

# 关闭防火墙
systemctl stop firewalld
# 禁用防火墙
systemctl disabled firewalld

修改 max file descriptors

  1. fs.file-max:这个参数定义了整个系统中可以打开的文件描述符的最大数量。它表示系统范围内的限制。当系统达到这个限制时,将无法打开更多的文件描述符。可以通过修改该值来增加系统的文件描述符限制。
  2. * hard nofile 65536:这是 /etc/security/limits.conf 文件中的一行配置,它指定了用户的硬限制(hard limit)的文件描述符数量。hard limit 是用户或进程的最大限制值,超过这个限制将导致系统返回错误。在这个例子中,nofile(即文件描述符)的硬限制被设置为 65536。这个配置会影响所有用户。
  3. * soft nofile 65536:这也是 /etc/security/limits.conf 文件中的一行配置,它指定了用户的软限制(soft limit)的文件描述符数量。soft limit 是用户或进程的警告值,超过这个限制会产生警告,但允许继续增加。在这个例子中,nofile(即文件描述符)的软限制被设置为 65536。这个配置会影响所有用户。

Linux中修改文件描述符(file descriptors)的方法有多种。下面列举了一些常见的方法:

  • 命令行参数:在运行程序时,可以使用命令行参数来设置文件描述符的数量。例如,通过ulimit命令可以设置进程的最大文件描述符数量,如ulimit -n 1024表示将最大文件描述符数量设置为1024。
ulimit -n 65536
  • 修改配置文件:可以通过修改系统的配置文件来调整文件描述符的数量限制。在Linux系统中,有两个主要的配置文件与文件描述符相关:/etc/security/limits.conf/etc/sysctl.conf。在这些配置文件中,可以设置文件描述符的软限制和硬限制,以及其他相关参数。

一般修改 /etc/security/limits.conf

sudo vim /etc/security/limits.conf

/etc/sysctl.conf 这个文件是所有共享的上限

*  soft    nofile  65536
*  hard    nofile  65536
fs.file-max = 190000

OR

elastic   soft    nofile  65536
elastic   hard    nofile  65536
fs.file-max = 190000
  • 编程方式:通过编程语言(如C、C++、Java等)的API,可以在程序中设置文件描述符的数量。这通常涉及到使用系统调用(如setrlimit)或编程语言提供的相关函数。

这些配置方法的区别与联系如下:

  • 临时修改适用于临时调整配置,对当前会话有效,重启后会恢复为默认值。
  • 持久修改适用于永久性调整配置,会将修改写入配置文件中,重启后仍然有效。

文件描述符的修改与登录用户相关。在Linux系统中,每个用户都有自己的文件描述符限制。用户可以通过上述方法中的命令行参数或配置文件来调整自己的文件描述符数量限制。登录用户可以根据自身需求灵活地调整文件描述符的数量。

** 不同用户之间的文件描述符配置是相互独立的,即每个用户可以根据自己的需要设置文件描述符的数量。因此,文件描述符的修改配置是与用户相关的,不同用户之间的文件描述符是独立的,不会相互影响。每个用户可以根据自己的需求进行个性化的配置,而不会对其他用户产生影响。**

使配置生效

sudo sysctl -p
# Do not forget to reboot or: sysctl --system

验证max file descriptors配置是否生效

ulimit -n

max virtual memory areas vm.max_map_count [65530] is too low

当出现"max virtual memory areas vm.max_map_count [65530] is too low"的错误消息时,这表示操作系统的虚拟内存区域数量限制太低,无法满足当前的需求。解决此问题的常见方法是增加vm.max_map_count的值。

在Linux系统中,有几种配置方法可以调整vm.max_map_count的值:

  1. 临时修改:可以使用以下命令临时修改vm.max_map_count的值:

    sysctl -w vm.max_map_count=362144
    ## the setting will only last for the duration of the session. If the host reboots, the setting will be reset to the original value.## If you want to set this permanently, you need to edit /etc/sysctl.conf and set vm.max_map_count
    sudo vim /etc/sysctl.conf
    

    这种方法只在当前会话中生效,重启后会恢复为默认值。

  2. 持久修改:

    在 Linux 系统中,可以通过以下几个文件来修改 vm.max_map_count 参数:

    1. /proc/sys/vm/max_map_count:这是一个虚拟文件,它提供了对内核参数 vm.max_map_count 的读写访问。您可以直接编辑该文件,将所需的值写入其中。但是,修改的值只会在当前会话中生效,重启系统后会重置为默认值。
    2. /etc/sysctl.conf:这个文件用于设置系统级别的内核参数。您可以在文件中添加一行类似 vm.max_map_count=65530 的配置,并保存文件。在下次系统启动时,内核会加载该文件,并根据配置进行相应的参数设置。修改该文件可以使配置在系统重启后仍然生效。
    3. /etc/sysctl.d/ 目录:在某些 Linux 发行版中,您可以将包含 *.conf 扩展名的文件放置在 /etc/sysctl.d/ 目录中。这些文件中的配置会在系统启动时自动加载,并覆盖默认的内核参数设置。您可以创建一个新的文件,例如 99-custom.conf,在其中添加 vm.max_map_count=65530 的配置,并保存文件。请注意,这些文件会按字母顺序加载,因此确保文件名的顺序正确以避免冲突。
    sudo vim /etc/sysctl.d/99-sysctl.conf
    

    Add to file :

    vm.max_map_count=362144
    fs.file-max = 190000
    

    然后保存文件并执行以下命令使配置生效:

    sudo sysctl -p
    # Do not forget to reboot or: sysctl --system
    
  3. 通过限制文件:有时操作系统可能对修改vm.max_map_count的值有限制。在这种情况下,可以尝试通过限制文件来修改该值。在/etc/security/limits.conf文件中,

    sudo vim /etc/security/limits.conf
    

    添加以下行:

    * hard memlock unlimited
    

这些配置方法的区别与联系如下:

  • 临时修改适用于临时调整配置,对当前会话有效,重启后会恢复为默认值。
  • 持久修改适用于永久性调整配置,会将修改写入配置文件中,重启后仍然有效。
  • 通过限制文件修改vm.max_map_count的值可以绕过一些操作系统对配置修改的限制。

对于这个问题,不同用户无需单独配置。一旦修改了vm.max_map_count的值,对于所有用户来说都会生效。因为该配置是作用于整个操作系统的虚拟内存区域,所以不需要为每个用户单独配置。任何登录到系统的用户都将受到新的vm.max_map_count值的影响。

修改limits.conf和sysctl.conf区别

  1. /etc/security/limits.conf

    • 作用:limits.conf文件的配置是针对用户级别的,包括文件描述符限制。可以为每个用户或用户组设置不同的限制。
    • 文件描述符限制:通过nofilenofiles参数可以设置每个用户(或用户组)可以打开的文件描述符的最大数量。该参数的值表示用户(或用户组)可以同时打开的文件或网络套接字的数量。生效范围:配置limits.conf文件后,对应的限制会应用于特定的用户或用户组,而不会影响整个系统的其他用户。
  2. /etc/sysctl.conf

    • 作用:sysctl.conf`文件的配置是针对整个系统的内核参数,包括系统级别的配置。适用于所有用户。
    • 文件描述符限制:通过修改fs.file-max参数可以调整系统级别的文件描述符限制,指定整个系统可以打开的文件描述符的最大数量。
    • 生效范围:配置sysctl.conf文件后,对应的内核参数会影响整个系统的所有用户,即所有用户共享相同的文件描述符限制。

总结:

  • /etc/security/limits.conf用于设置用户级别的资源限制,包括文件描述符限制,配置针对用户或用户组,并且对应的限制仅适用于指定的用户或用户组。
  • /etc/sysctl.conf用于设置系统级别的内核参数,包括文件描述符限制,配置对整个系统生效,所有用户共享相同的限制。这句话指的是所有用户加起来不能超过这个值。所以就要注意limits和sysctl之间的数量关系,sysctl中的配置一定要大于limit

max file descriptors too low 没有生效原因

  • 没有改配置文件

vim /etc/security/limits.conf

* hard memlock unlimited
*  soft    nofile  65536
*  hard    nofile  65536
elasticsearch   soft    nofile  65536
elasticsearch   hard    nofile  65536

sudo vim /etc/sysctl.conf

vm.max_map_count=362144
  • 没有执行
sudo sysctl -p
  • 没有重启终端

通过执行ulimit -n如果仍然不行则:

如果仍然不行,则退出当前shell session(terminal),重新登录。亲测有效。

两个节点的集群为什么都成为master了

  • 选举票数导致的问题,你需要设置2n+1
  • 节点名字重复了: 修改node.name
  • 发生脑裂了: 删除data目录然后重启

生产环境注意事项

data和log目录一定不要默认

如果es本身的一些升级等操作很可能被覆盖,所以硬性要求必须配置到es目录之外

vim config/elasticsearch.yml

modify

# 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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/4242.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6月琐碎但值得的事情

6月份又过了,又到了每月总结的的时间,说实话我还挺喜欢这种方式,每个月固定的事情做。 老规矩分享一些自己每个月的一些琐碎经历,不一定对也不高大上,但是如果对你有一些启发就最好不过了。 6月主要两件事:…

SpringBoot项目做成Docker 镜像

1.使用Xshell5使用 put指令上传到Centos put D:\git\repository_idea\emsms\target\emsms-0.0.1-SNAPSHOT.jar 2.编辑文件 vim spring ROM java:8 ADD emsms-0.0.1-SNAPSHOT.jar dd.jar CMD java -jar dd.jar 示例: 3.退出并保存编辑 4.将文件打包成镜像 dock…

技术讨论:我心中TOP1的编程语言

欢迎关注博主 六月暴雪飞梨花 或加入【六月暴雪飞梨花】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术…

03双向链表

双向链表 单向链表的缺点 单向链表,只能是一个方向来查找,而双向链表可以向前或者向后查找。单向链表不能自我删除,需要靠辅助结点。而双向链表可以自我删除。所以我们单链表删除结点的时候,总要找到temp(待删除结点…

空间曲线的切线和法平面与曲面的切平面和法线

(一)空间曲线的切线和法平面 1. 参数方程的形式 理解和记忆如下公式: 参数方程在知道偏导数的情况下,得到该点的切线以及法平面的公式,笔者可以理解但是无法证明。 2. 可以转换为参数方程的第二种形式&#xff1a…

从入门到精通:解锁Linux开发工具和编译器的力量

目录 一.编辑器vim的使用1.vim的基本概念2.vim的使用二.编译器gcc/g1.编译器的使用2.编译器是如何完成的?3.动态库与静态库 一.编辑器vim的使用 1.vim的基本概念 vim是一个方便编程的功能特别丰富的文本编辑器,凭借他简洁的三种模式以及丰富的快捷键操…

MySQL进阶SQL语句(二)

MySQL进阶SQL语句(二) 一、MySQL进阶SQL语句1.1 连接查询1.2 CREATE VIEW视图,可以被当作是虚拟表或存储查询1.3 UNION 联集1.4 CASE1.5 空值(NULL) 和 无值() 的区别1.6 正则表达式 二、存储过程2.1 存储过程定义2.2 存储过程的优点2.3 存储…

PySpark如何输入数据到Spark中?【RDD对象】

PySpark支持多种数据的输入,在输入完成后,都会得到一个:RDD类的对象RDD全称为弹性分布式数据集(Resilient Distributed Datasets),PySpark针对数据的处理,都是以RDD对象作为载体,即: •数据存储…

java面试Day13

1. 有哪些注解可以注入 Bean?Autowired 和 Resource 的区别? 在 Spring 框架中,常用的注入 Bean 的注解包括: Autowired:自动注入,按照类型自动装配,如果有多个同类型的 Bean,则需要…

手撕code(3)

文章目录 迷宫最短路径和输出深度优先广度优先 48 旋转矩阵图像大数加减法146 LRU 缓存算法460 LFU 缓存算法 迷宫最短路径和输出 给定一个 n m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1 ,其中 0 表示可以走的路,1…

软考A计划-系统集成项目管理工程师-项目整体管理-上

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

SurfaceFlinge/InputFlinger分析-android画面缩放后依然点击正常原理分析

hi,粉丝朋友们: 这两天刚好在做自由窗口相关国内需求,刚好遇到一个疑惑,那就是画面进行缩放后发现依然触摸画面可以正常反映问题。 具体疑惑背景 疑问点如下: 坐标是针对屏幕的,按钮也是相对Activity的&…