准备环境

虚拟机:CentOS Linux release 7.6.1810

jdk:jdk-15.0.0

elasticsearch:elasticsearch-7.10.0

0、关闭防火墙

  1. systemctl stop firewalld.service
  2. systemctl disable firewalld.service
  3. systemctl status firewalld.service

image.png

0.1、将elasticsearc的tar包上传解压并修改文件名

  1. tar -zxvf elasticsearch-oss-7.10.0-linux-x86_64.tar.gz
  2. mv elasticsearch-oss-7.10.0/ es1

image.png

0.2、复制两份

  1. cp -r es1 es2
  2. cp -r es1 es3

image.png

0.3、添加elasticsearch专属账户和组

  1. groupadd es
  2. useradd es -g es -p es
  3. chown -R es:es /opt/es1/

0.4、修改es1、es2、es3的用户组和用户为es

  1. chown -R es:es /opt/es1/ /opt/es2/ /opt/es3/

image.png

0.4、配置jdk环境变量

  1. vim /etc/profile

找到es自带JDK目录,复制路径,文件末添加:

  1. export JAVA_HOME=/opt/es1/jdk
  2. export PATH=${JAVA_HOME}/bin:$PATH

使配置立即生效:

  1. source /etc/profile

查看jdk,确认环境变量配置成功:

  1. java -version

image.png

0.5、提高线程个数、es用户描述权限、内存权限、限制swap交换空间、TCP重传最大次数

  1. cat >> /etc/security/limits.conf << EOF
  2. * soft nofile 65536
  3. * hard nofile 65536
  4. * soft nproc 4096
  5. * hard nproc 4096
  6. EOF


  1. cat >> /etc/sysctl.conf << EOF
  2. vm.max_map_count=262144
  3. vm.swappiness = 1
  4. net.ipv4.tcp_retries2=5
  5. EOF

注:在更庞大的集群内,建议将swap空间提升至10,提高系统性能。

加载sysctl.conf参数

  1. sysctl -p

1、配置elasticsearch

1.0、调整jvm堆空间大小

  1. vim /opt/es1/config/jvm.options

找到

-Xms1G -Xmx1G 修改为:

  1. -Xms256m
  2. -Xmx256m

将jvm.options传给其他节点:

  1. cp /opt/es1/config/jvm.options /opt/es2/config/
  2. cp /opt/es1/config/jvm.options /opt/es3/config/

1.1、修改elasticsearch.yml

角色配置:
Node角色设置.pngelasticsearch默认将所有节点都设置为数据节点,这会降低集群的运行效率,因此将集群角色和数据节点分开有利于集群的任务分配和效率
es1:

  1. cluster.name: es_test_cluster
  2. node.name: es_master
  3. node.master: true
  4. node.data: false
  5. network.host: 0.0.0.0
  6. http.port: 9200
  7. transport.tcp.port: 9300
  8. discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"]
  9. cluster.initial_master_nodes: ["es_master"]
  10. http.cors.enabled: true
  11. http.cors.allow-origin: "*"
  12. path.data: /opt/es_storage/data
  13. path.logs: /opt/es_storage/logs

创建es用户组和用户的专属的数据存储和日志存储目录

  1. mkdir -p /opt/es_storage/{data,logs}
  2. chown -R es:es /opt/es_storage

注:以下推荐在搭建时就完成。搭建并运行后再配置储存位置,会造成从节点报错,删除data才能运行
image.png
可以添加多个储存路径,例:
image.png

1.2、启动es1

切换到es用户,到es1的bin目录下:

  1. su es
  2. cd /opt/es1/bin

启动es启动脚本:

  1. ./elasticsearch

image.png
Ctrl+C:强制结束当前进程

2、配置elasticsearch_slaves

2.0、修改elasticsearch.yml

切换到root用户:

  1. exit

es2:

  1. cat >> /opt/es2/config/elasticsearch.yml << EOF
  2. cluster.name: es_test_cluster
  3. node.name: es_slaves1
  4. node.master: false
  5. node.data: true
  6. network.host: 0.0.0.0
  7. http.port: 9201
  8. transport.tcp.port: 9301
  9. discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"]
  10. http.cors.enabled: true
  11. http.cors.allow-origin: "*"
  12. EOF

es3:

  1. cat >> /opt/es3/config/elasticsearch.yml << EOF
  2. cluster.name: es_test_cluster
  3. node.name: es_slaves2
  4. node.master: false
  5. node.data: true
  6. network.host: 0.0.0.0
  7. http.port: 9202
  8. transport.tcp.port: 9302
  9. discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301", "127.0.0.1:9302"]
  10. http.cors.enabled: true
  11. http.cors.allow-origin: "*"

2.1、尝试单独启动es2、es3节点

切换到es用户,到es2的bin目录下:

  1. su es
  2. cd /opt/es2/bin

启动es启动脚本:

  1. ./elasticsearch

es2:
image.png
Ctrl+C:强制结束当前进程
到es3的bin目录下:

  1. cd /opt/es3/bin

启动es启动脚本:

  1. ./elasticsearch

image.png
Ctrl+C:强制结束当前进程
实例:
image.png

3 启动所有节点的elasticsearch:

es1:

  1. cd /opt/es1/bin
  2. ./elasticsearch -d
  3. cd /opt/es2/bin
  4. ./elasticsearch -d
  5. cd /opt/es3/bin
  6. ./elasticsearch -d

网页输入本机ip地址+端口查看群节点情况:

  1. 192.168.100.155:9200/_cat/nodes?v

image.png

小知识:

http://192.168.5.122:9200/_cat/
1 /_cat/allocation 提供一个快照,反映当前节点有多少个分片(shard)以及用了多少磁盘空间(disk)
2 /_cat/shards 反应每个节点有那些分片,告诉我们,那些是主分片,那些是从分片,每个分片的document数量,以及在该节点占用的磁盘空间
3 /_cat/shards/{index} 查看具体索引的分片信息
4 /_cat/master 查看master信息
5 /_cat/nodes 查看节点信息
6 /_cat/tasks 查看任务
7 /_cat/indices 查看索引信息
8 /_cat/indices/{index} 查看具体索引信息
9 /_cat/segments 查看存储片段信息
10 /_cat/segments/{index} 查看具体索引的存储片段信息
11 /_cat/count 该指令可以获取当前集群中有多少个document,类似mysql中有多少条记录,**查看文档总数**
12 /_cat/count/{index} 查看具体索引的文档总数
13 /_cat/recovery 反应当前系统中,索引分片的恢复信息,包括正在进行的以及已经完成了的。
恢复,指的是当节点添加或者减少时发生的数据移动造成的。
14 /_cat/recovery/{index} 查看具体索引的数据恢复状态
15 /_cat/health 反应当前集群的健康指数信息
16 /_cat/pending_tasks 查看待处理任务
17 /_cat/aliases 可以查询出当前索引的filter以及routing所配置的别名信息。
18 /_cat/aliases/{alias} 指定别名查看信息
19 /_cat/thread_pool 查看线程池信息
20 /_cat/thread_pool/{thread_pools} 查看线程池下插件
21 /_cat/plugins 提供一个视图,反应当前节点中处在运行状态的插件。
22 /_cat/fielddata 查看fielddata占用内存情况(查询时es会把fielddata信息load进内存)
23 /_cat/fielddata/{fields} 针对某一字段进行查看
24 /_cat/nodeattrs 反应出当前数据节点的属性信息
25 /_cat/repositories 查看存储库
26 /_cat/snapshots/{repository} 查看快照库
27 /_cat/templates 查看模板

ElasticSearch的基本概念

1 Index 类似于mysql数据库中的database
2 Type 类似于mysql数据库中的table表,es中可以在Index中建立type(table),通过mapping进行映射
3 Document 由于es存储的数据是文档型的,一条数据对应一篇文档即相当于mysql数据库中的一行数据row,一个文档中可以有多个字段也就是mysql数据库一行可以有多列
4 Field es中一个文档中对应的多个列与mysql数据库中每一列对应
5 Mapping 可以理解为mysql或者solr中对应的schema,只不过有些时候es中的mapping增加了动态识别功能
6 indexed 就是名义上的建立索引
7 Query DSL 类似于mysql的sql语句,只不过在es中是使用的json格式的查询语句,专业术语就叫:QueryDSL GET/PUT/POST/DELETE

使用curl命令操作ElasticSearch 格式如下:

  1. curl -X<REST Verb> <Node>:<Port>/<Index>/<Type>/<ID>
  2.   <REST Verb>:REST风格的语法谓词
  3.   <Node>:节点ip
  4.   <Index>:索引名
  5.   <Type>:索引类型
  6.   <ID>:操作对象的ID