本地安装部署
以下以ubantu22.04系统为例,详解本地安装部署ElastickSearch-8.3.2
以及Kibana-8.3.2
过程
单节点
集群
本地部署集群有以下两种方式
- 多节点多项目
- 单节点多项目
多节点多项目
概念
集群中配置几个节点就有几个文件夹。一个节点(ElasticSearch实例)占一个文件夹,每个节点单独配置
(base) lucifer@lucifer-ElasticStack:~/service/ElasticStack/8.3/c1_5nodes_<ip_address>_9201-9205$ tree -L 2
.
├── kibana-8.3.2
│ ├── bin
│ ├── config
│ ├── data
│ ├── LICENSE.txt
│ ├── logs
│ ├── node
│ ├── node_modules
│ ├── NOTICE.txt
│ ├── package.json
│ ├── plugins
│ ├── README.txt
│ ├── src
│ └── x-pack
├── node-1
│ ├── bin
│ ├── config
│ ├── data
│ ├── jdk
│ ├── lib
│ ├── LICENSE.txt
│ ├── logs
│ ├── modules
│ ├── NOTICE.txt
│ ├── plugins
│ └── README.asciidoc
├── node-2
│ ├── bin
│ ├── config
│ ├── data
│ ├── jdk
│ ├── lib
│ ├── LICENSE.txt
│ ├── logs
│ ├── modules
│ ├── NOTICE.txt
│ ├── plugins
│ └── README.asciidoc
├── node-3
│ ├── bin
│ ├── config
│ ├── data
│ ├── jdk
│ ├── lib
│ ├── LICENSE.txt
│ ├── logs
│ ├── modules
│ ├── NOTICE.txt
│ ├── plugins
│ └── README.asciidoc
├── node-4
│ ├── bin
│ ├── config
│ ├── data
│ ├── jdk
│ ├── lib
│ ├── LICENSE.txt
│ ├── logs
│ ├── modules
│ ├── NOTICE.txt
│ ├── plugins
│ └── README.asciidoc
├── node-5
│ ├── bin
│ ├── config
│ ├── data
│ ├── jdk
│ ├── lib
│ ├── LICENSE.txt
│ ├── logs
│ ├── modules
│ ├── NOTICE.txt
│ ├── plugins
│ └── README.asciidoc
└── start_cluster.sh
55 directories, 20 files
步骤
-
从官网下载对应系统和架构的安装包
- 下载ElasticSearch-8.3.2
- 下载Kibana-8.3.2(ElasticSearch和Kibana两者版本必须一致)
-
建立项目文件夹,将解压的ElasticSearch和Kibana安装包放入该文件夹
- 注意项目文件夹命名规范(不强制要求,但可以提醒避免某些错误)。格式:
c<cluster_num>_<num>nodes_<ip_address>_<startnode_port>-<endnode_port>
- 注意项目文件夹命名规范(不强制要求,但可以提醒避免某些错误)。格式:
c:表示集群标识符cluster
<cluster_num>:表示集群编号
<num>nodes:表示集群中包含的节点数量
<ip_address>:表示主机地址
<startnode_port>:表示节点的http-port的起始编号
<endnode_port>:表示节点的http-port的终止编号
-
需要几个节点就复制几个解压后的ElasticSearch文件,并将文件名称重命名为
node-num
,num从1开始编号 -
打开各个节点文件夹的
config/elasticsearch.yml
文件进行以下初始化配置,以下配置在集群启动后不能二次更改cluster.name
:集群名称(唯一)默认配置为elasticsearch。如果手动修改,则集群中所有节点的配置文件也要修改为一致node.name
:该节点的名称。建议与节点文件夹名称一致。eg. node-1node.roles
:该节点的角色。默认是所有角色,除了启动的第一个节点(active_master
)不能设置该属性,其余节点都可以设置http.port
:默认是9200transport.port
:默认是9300
-
开启第一个节点(ElasticSearch实例)。第一个节点默认是
active_master
- 打开cmd,进入到
node-1/bin
目录下,按以下命令操作
- 打开cmd,进入到
(base) lucifer@lucifer-ElastickStack:~/service/ElasticStack/8.3/c1_5nodes_<ip_address>_9201-9205/node-1/bin$ ./elasticsearch
- 打开另一个终端在
node-1/bin
目录下运行以下命令
(base) lucifer@lucifer-ElasticStack:~/service/ElasticStack/8.3/c1_5nodes_<ip_address>_9201-9205/node-1/bin$ ./elasticsearch-create-enrollment-token -s node
- 打开另一个终端在
kibana/bin
目录下运行以下命令
(base) lucifer@lucifer-ElasticStack:~/service/ElasticStack/8.3/c1_5nodes_<ip_address>_9201-9205/kibana-8.3.2/bin$ ./kibana
- 根据节点个数开启终端,在每个终端中进入剩余节点的
bin/
目录下,运行以下命令
# 以node-2加入node-1所在集群演示
# <token> 指4.2中运行 node-1/bin/elasticsearch-create-enrollment-token -s node 的结果
(base) lucifer@lucifer-ElasticStack:~/service/ElasticStack/8.3/c1_5nodes_<ip_address>/node-2/bin$ ./elasticsearch --enrollment-token <token>
- 修改各个节点的配置文件
node-num/config/elasticsearch.yml
- 本例中
node-1
节点作为active_master
节点,在第一次启动后配置文件elasticsearch.yml
会自动设置cluster.initial_master_nodes: ["node-1"]
。这项配置在之后再次启动集群是不建议的(可能会造成数据丢失),把它注释掉
- 本例中
# Create a new cluster with the current node only
# Additional nodes can still join the cluster later
cluster.initial_master_nodes: ["node-1"] # 之后不需要此配置,需手动注释掉
- 在所有节点(包括
active_master
,本例中暂时为node-1
)的配置文件中加入或修改discovery.seed_hosts
配置
# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
# 根据候选master节点的transport.port进行配置
discovery.seed_hosts: ["127.0.0.1:9301", "127.0.0.1:9302", "127.0.0.1:9303"]
- 在项目根目录下写一个bash脚本,用于后续批量启动集群中的节点
# 编辑脚本 start_cluster.sh
(base) lucifer@lucifer-ElasticStack:~/service/ElasticStack/8.3/c1_5nodes_<ip_address>_9201-9205$ vim start_cluster.sh
# 注意修改为你自己的路径
# -d 表示以守护进程的方试运行
/service/ElasticStack/8.3/c1_5nodes_<ip_address>_9201-9205/node-1/bin/elasticsearch -d
/service/ElasticStack/8.3/c1_5nodes_<ip_address>_9201-9205/node-2/bin/elasticsearch -d
/service/ElasticStack/8.3/c1_5nodes_<ip_address>_9201-9205/node-3/bin/elasticsearch -d
/service/ElasticStack/8.3/c1_5nodes_<ip_address>_9201-9205/node-4/bin/elasticsearch -d
/service/ElasticStack/8.3/c1_5nodes_<ip_address>_9201-9205/node-5/bin/elasticsearch -d
注意事项
如果集群中任意节点启动报错,注意查看node-num/logs/elasticsearch.log
文件,定位错误
vm.max_map_count
如果报错,需修改/etc/sysctl.conf
系统配置文件,按照报错提示设置vm.max_map_count
值。官网参考
heap size
- 如果加入节点到集群时,ElasticSearch意外退出,检查对应节点文件夹下
/logs/elasticsearch.log
中heap size
大小- 如果
heap size
值很大或很小,说明elastic占用系统内存较多或分配的内存不够,需修改jvm配置。在node-num/config/jvm.options.d
目录下新增以.options
为拓展名的文件,例如jvm.options
- 在
jvm.options.d/jvm.options
中设置Xms
和Xmx
的值(这两个参数需设置成一样),按以下格式设置
- 如果
# 表示堆内存占用1G
-Xms1g
-Xmx1g
cluster.name和node.name
- 在第一次启动节点前可修改节点名称和所属的集群名称
- 一个集群中所有节点的集群名
cluster.name
要相同,默认配置为elasticsearch
;node.name
默认配置为主机名称(可手动修改以区分不同的节点) - 如果手动修改了集群名称,集群中的其他节点也需要手动修改一致,否则报错
- 一个集群中所有节点的集群名
- 节点角色配置
- 集群的首个节点会被当做
active_master
,不能在配置文件elasticsearch.yml
或roles.yml
中指定角色node.roles
,其余节点可配置角色
- 集群的首个节点会被当做
discovery.seed_hosts
- 此配置用于发现集群上存在的节点配置
discovery.seed_hosts
不能在首个启动的节点上配置,只能在其余节点启动后更新elasticsearch.yml
文件后,再自行修改此配置(默认是127.0.0.1:9300)
kibana加入集群
- 当elasticsearch.security开启时,kibana的启用检查很严格
- 先前已加入一个集群的kibana不能再加入另一个集群(原先的集群节点更改配置后则不能启动kibanna)
- 集群的
ip_address
变化后,原来的kibana也不能启动。一个ElasticSearch集群,Kibana的部署和主机IP有关,IP变动后,ElasticSearch和Kibana之间的认证(node-num/config/certs
目录下的文件)无效,需重新认证,官网参考链接如下 - 因此,一个集群对应一个
ip_address
,一个kibana对应一个集群