1.简介
首先引用 Elasticsearch (下文简称 ES)官网的一段描述:
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。
本文主要介绍 Elasticsearch 集群的搭建。通过在一台服务器上创建 3 个 ES 实例来创建一个建议的 ES 集群。
Elasticsearch/ES
官方的Elasticsearch Reference 提供了不同版本的文档连接,真是赞!
如果英文的不想看,还提供了中文版的 Elasticsearch 2.x: 权威指南,版本不是最新的,但是了解基本概念也是有帮助的。
Elasticsearch 7.x 包里自包含了 OpenJDK 的包。如果你想要使用你自己配置好的 Java 版本,需要设置 JAVA_HOME
环境变量 —— 参考
官方文档 Set up Elasticsearch
有各个 OS 的安装指导,页面 Installing Elasticsearch 中提供了多种安装包对应的指导链接!
本文选择绿色安装包的的方式(tar.gz
)安装。
由于实验机器有限,可以在同一台机器上模拟出 3 个节点,安装 ES 集群
2.环境
1>三台真实服务器:
1.物理cpu数:主板上实际插入的cpu数量,可以数不重复的 physical id 有几个(physical id) $ cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l 2 2.cpu核数:单块CPU上面能处理数据的芯片组的数量,如双核、四核等 (cpu cores) cat /proc/cpuinfo| grep "cpu cores"| uniq 3.逻辑cpu数:简单来说,它可使处理器中的1颗内核,如2颗内核那样在操作系统中发挥作用。 $ cat /proc/cpuinfo| grep "cpu cores"| uniq cpu cores : 8 4.查看cpu信息(型号) $ cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 32 Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz 5.查看服务器版本号 $ more /etc/redhat-release CentOS Linux release 7.6.1810 (Core)
2>ES版本:elasticsearch-7.9.2-linux-x86_64.tar
3>kibana版本:kibana-7.9.2-linux-x86_64.tar
因是实体机器,所以这里的三台机器用1,2,3机器表示
3.ES下载
链接:https://pan.baidu.com/s/1K7XGf0ewWeabIcHBHnCGAw 提取码:y2my
4.ES集群安装
4.1调整linux系数相关参数设置
注意:
ES最新版本需要jdk11,需要修改环境变量
所有版本不能用root用户跑ES
改变其权限
chown 用户:用户组 elasticsearch-7.9.2-linux-x86_64.tar.gz
防火墙状态
l firewall-cmd --state 运行则关闭防火墙 # 临时关闭防火墙 systemctl stop firewalld.service # 永久关闭防火墙` systemctl disable firewalld
selinux状态
查看selinux命令 /usr/sbin/sestatus 临时关闭 setenforce 0 永久关闭 vim /etc/selinux/config 将SELINUX=enforcing改为SELINUX=disabled,保存后退出
4.1.1修改最大文件数和锁内存限制以及用户最大线程数
打开文件vi /etc/security/limits.d/20-nproc.conf was soft nproc 20000 * soft nproc 4096 root soft nproc unlimited 修改完保存即可
同时修改
vi /etc/security/limits.conf # End of file * soft nofile 300000 * hard nofile 300000 * soft nofile 65536 * hard nofile 65536 * hard memlock unlimited * soft memlock unlimited
查看修改完结果
# ulimit -a
4.1.2更改一个进城能拥有的最大内存区域限制,编辑swappiness禁用交换分区
vi /etc/sysctl.conf vm.max_map_count=262144 vm.swappiness=1 # sysctl -p vm.max_map_count = 262144 vm.swappiness = 1
4.1.3解压安装包
tar -zxvf elasticsearch-7.9.2-linux-x86_64.tar.gz
4.1.4进入文件,改其env
vim /data/disk04/es/elasticsearch-7.9.2/bin/elasticsearch-env 在文件第一行加入下面变量 JAVA_HOME="/data/disk04/es/elasticsearch-7.9.2/jdk/"
4.1.5修改垃圾回收器需要转换(不转换不会报错,但是会有警告)
vim /data/disk04/es/elasticsearch-7.9.2/config/jvm.options
改之前
改之后
以 – 开头的行被视为jvm版本应用的选项 -Xmx2g 以n:-开头的行被视为依赖数字指明的JVM版本 8:- -Xmx2g 以n-n开始的行是指明要求了JVM的版本 8-13
4.1.6修改 yml文件(以下标明机器与节点只是例子,不应用本次实验)
vi /data/disk04/es/elasticsearch-7.9.2/config/elasticsearch.yml ******集群名********** #集群的名字,每个节点的拥有同一个名字才能认为是同一个集群 #cluster.name: my-application cluster.name: es-cluster *****节点名字********** #节点的名字,保证唯一,每个节点不同,需要修改 #node.name: node-1 node.name: node-1(第一个节点) node.name: node-2 (第二个节点文件) node.name: node-3(第三个节点文件) ******自带属性 ******** #自定义的属性,这是官方文档中自带的 # Add custom attributes to the node: node.attr.rack: r1 *********网络****** *** #设置成 本机 或 0.0.0.0即可 http.cors.enabled: true http.cors.allow-origin: "*" http.port: 9200 transport.tcp.port: 9300 ******日志数据存放 ********* (目录需要有普通用户的权限) #根据自己的习惯配置data文件夹 #path.data: /path/to/data path.data: /app/elasticsearch-7.9.2/data # Path to log files: #path.logs: /path/to/logs path.logs: /app/elasticsearch-7.9.2/logs/logs *******内存 ************** #开启启动es时锁定内存 # Lock the memory on startup: # #bootstrap.memory_lock: true bootstrap.memory_lock: true ***********初始列表********** 第一个节点 discovery.seed_hosts: ["10.135.139.11:9200", "10.135.139.12:9200", "10.135.139.13:9200"] cluster.initial_master_nodes: ["es-bd1701"] client.transport.ping_timeout: 60s 第二个节点 discovery.seed_hosts: ["10.135.139.11:9200", "10.135.139.12:9200", "10.135.139.13:9200"] cluster.initial_master_nodes: ["es-bd1702"] client.transport.ping_timeout: 60s 第三个节点 discovery.seed_hosts: ["10.135.139.11:9200", "10.135.139.12:9200", "10.135.139.13:9200"] cluster.initial_master_nodes: ["es-bd1703"] client.transport.ping_timeout: 60s **********跨第三方插件访问 ************* http.cors.enabled: true http.cors.allow-origin: "*"
例如本次实验的第一个节点
cluster.name: qqd-es-cluster node.name: 节点名 path.data: /data/disk04/es/es_data path.logs: /data/disk04/es/es_logs node.master: true network.host:节点IP node.data: true http.port: 9200 transport.tcp.port: 9300 transport.tcp.compress: true node.attr.rack: r1 transport.profiles.default.port: 9300 discovery.zen.minimum_master_nodes: 2 discovery.seed_hosts: ["IP1:节点1", "IP2:节点2", "IP3:节点3"] bootstrap.memory_lock: false bootstrap.system_call_filter: false cluster.initial_master_nodes: ["节点1", "节点2", "节点3"] gateway.recover_after_nodes: 3 http.cors.enabled: true http.cors.allow-origin: "*"
4.1.7配置/etc/hosts
节点1ip 节点1名称 节点2ip 节点2名称 节点3ip 节点3名称
4.1.8配置环境变量
vim /etc/profile #es环境变量 export ES_HOME=/data/disk04/es/elasticsearch-7.9.2 export PASH=$ES_HOME/bin:$PATH
source /etc/profile
4.1.8修改jvm(最好不要超过机器内存的一半或者32以下)
vi /data/disk04/es/elasticsearch-7.9.2/config/jvm.options -Xms31g -Xmx31g
4.1.8启动es集群(可能会需要点时间)
/data/disk04/es/elasticsearch-7.9.2/bin/elasticsearch
4.1.9查看es集群(*号为主节点)
http://ip:9200/_cat/nodes?pretty
4.1.10查看es节点
http://ip:9200/_cat/nodes?pretty
集群的状态(status):red红表示集群不可用,有故障。yellow黄表示集群不可靠但可用,一般单节点时就是此状态。green正常状态,表示集群一切正常。
节点数(node.total):节点数,这里是3,表示该集群有三个节点。
数据节点数(node.data):存储数据的节点数,这里是3。数据节点在Elasticsearch概念介绍有。
分片数(shards : 表示我们把数据分成多少块存储。
主分片数(pri):primary shards,实际上是分片数的两倍,因为有一个副本,如果有两个副本,这里的数量应该是分片数的三倍,这个会跟后面的索引分片数对应起来,这里只是个总数。
激活的分片百分比(active_shards_percent):这里可以理解为加载的数据分片数,只有加载所有的分片数,集群才算正常启动,在启动的过程中,如果我们不断刷新这个页面,我们会发现这个百分比会不断加大。