Elasticsearch环境搭建|ES单机|ES单节点模式启动|ES集群搭建|ES集群环境搭建

版本选择

[ElasticSearch]分析京东商城商品搜索实现|聚合|全文查找|搜索引擎|ES Java High Level Rest Client|ES Java API Client这篇文章里进行了说明,使用的7.17.3版本,不再赘述。

单机ES安装与配置

创建非root用户

ES不允许root用户运行,使用root用户为其创建一个用户es,为用户es配置密码,并切换到es用户。

adduser es
passwd es
su es

导入安装包

将下载好的Elasticsearch,Kibana导入到es用户home目录

[es@polaris ~]$ cd ~
[es@polaris ~]$ pwd
/home/es
[es@polaris ~]$ ls        
kibana-7.17.3-linux-x86_64.tar.gz              
elasticsearch-7.17.3-linux-x86_64.tar.gz    

安装包解压

tar -zxvf elasticsearch-7.17.3-linux-x86_64.tar.gz
tar -zxvf kibana-7.17.3-linux-x86_64.tar.gz

配置JDK环境变量

当前还在用户home目录下,
添加两行(ES7.x及以后版本内置了jdk)

export ES_JAVA_HOME=/home/es/elasticsearch-7.17.3/jdk
export ES_HOME=/home/es/elasticsearch-7.17.3
[es@polaris ~]$ vim .bash_profile 

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

export ES_JAVA_HOME=/home/es/elasticsearch-7.17.3/jdk
export ES_HOME=/home/es/elasticsearch-7.17.3

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

执行以下命令,使之生效。(之后使用es用户开启一个终端会话(参考:ES环境变量设置的问题,分析用户级环境变量设置与读取,报错分析与解决⚠️ usage of JAVA_HOME is deprecated, use ES_JAVA_HOME),该环境变量配置就会是生效的)

source .bash_profile

配置single-node

切换到es目录

cd elasticsearch-7.17.3/
# 0. 备份一下原配置文件
cp config/elasticsearch.yml config/elasticsearch.yml.origin
# 修改配置
vim config/elasticsearch.yml
# 1. 开启远程访问,监听所有网卡,可以在虚拟机外部如win主机上访问  
network.host: 0.0.0.0
# 2. 单节点模式
discovery.type: single-node

配置JVM参数

官方建议:将 Xms 和 Xmx 设置为不超过总内存的 50%。 Elasticsearch 需要内存用于 JVM堆以外的用途。例如,Elasticsearch 使用堆外缓冲区来实现高效的网络通信,并依赖操作系统的文件系统缓存来高效地访问文件。 JVM本身也需要一些内存。Elasticsearch 使用的内存多于 Xmx 设置配置的限制是正常的。

机器情况:CPU 4核8线程,内存16GB,打算搭三节点集群演示,主机上还会运行一些东西,因此为每个虚拟机分配了2GB的内存,处理器数量2个,单个处理器内核数量设置为了2个,处理器内核总数为4

虚拟机内存2GB,堆内存设置不超过50%,这里设置1GB

# 0. 备份一下原配置文件
cp config/jvm.options config/jvm.options.origin
# 修改堆内存
vim config/jvm.option

-Xms1g
-Xmx1g

后台启动|启动日志查看

后台启动可以保证启动成功后,当前会话断开,es还是在运行,不会随着终端会话关闭而终止。

bin/elasticsearch -d

如果启动有问题可以查看es启动日志

tail -f logs/elasticsearch.log

启动成功,访问

终端访问

在这里插入图片描述

浏览器访问

如果浏览器访问不通,那么可以关闭防火墙简化操作,
云服务器的话可以通过配置安全组规则,进行端口映射,开放端口(参考:添加安全组规则

在这里插入图片描述

这样单节点的es就可以正常工作,之后通过修改配置把他加入到集群。

Kibana安装

Kibana是官方提供的ES一个客户端连接工具。
只在一台虚拟机上安装即可(或者win主机上安装一个都行),注意修改配置,使之能够访问到es(单机或集群),以及可以对外提供服务(Kibana对外能够被访问)。
这里是在虚拟机上安装。

修改配置

cd ~/kibana-7.17.3-linux-x86_64/
#备份一个源文件
cp config/kibana.yml config/kibana.yml.origin
#修改配置
vim config/kibana.yml

#指定Kibana服务器监听的端口号
server.port: 5601    
#开启远程访问,监听所有网卡,可以在虚拟机外部如win主机上访问  
server.host: "0.0.0.0"    
#指定Kibana连接到的ES实例的访问地址,
#如果访问本地的ES(Kibana与ES安装在同一台服务器上)就是localhost,访问其他的换成ip
#集群的话就配上所有的节点elasticsearch.hosts: ["http://192.168.43.69:9200", "http://192.168.43.133:9200", "http://192.168.43.225:9200"]
elasticsearch.hosts: ["http://localhost:9200"]  
#将 Kibana 的界面语言设置为简体中文。默认en
i18n.locale: "zh-CN"  

后台启动|启动日志查看

后台启动可以保证启动成功后,当前会话断开,kibana还是在运行,不会随着终端会话关闭而终止。

nohup bin/kibana &

如果启动有问题可以查看Kibana启动日志

tail -f nohup.out

浏览器访问

win主机浏览器访问机器ip+“:”+port(5601),

http://192.168.43.69:5601/

到此,Elasticsearch环境及客户端Kibana就安装配置完成。

在这里插入图片描述

这里查看到的节点ip是192.168.25.74而不是我们访问的机器ip 192.168.43.69,是有问题的(正常情况是不会有这个问题的)。这个问题的原因参考:[ES] ElasticSearch节点加入集群失败经历分析主节点选举、ES网络配置 [publish_address不是当前机器ip]

下面说明ES集群搭建方法。

ES三节点集群搭建

可以把刚才的虚拟机克隆出额外的两个,也可以在额外的两个虚拟机上重复上面es的安装过程(Kibana不需要再装了,它只是个es连接工具,装一个就行了)

停止es服务

#查看es进程
ps -ef|grep elasticsearch
#停止es运行
kill pid #pid是上面命令查出来的进程号

域名配置

三台机器都切换root用户,配置机器ip与域名对应关系,用于在服务发现时,集群内的各节点通过这个域名彼此可以找到彼此。

su
vim /etc/hosts

192.168.43.69 es-node1
192.168.43.133 es-node2
192.168.43.225 es-node3

之后再切换回es用户

su es

配置修改

注释掉单节点

#注释掉单节点
#discovery.type: single-node

集群配置

注意:数据目录日志目录单独指定,要和之前单机启动区别开

配置说明

  • cluster.name:集群名称,指定一个(避免因未指定,启动一个es就会加入到集群中),配置好其他属性,然后集群同名才可加入到这个集群中。
  • node.name:节点名字,集群内唯一
  • node.master:是否有资格为master节点,默认为true,表示这个节点有资格成为主节点(master node)。主节点主要负责集群级别的操作,如创建或删除索引、跟踪集群中哪些节点是活动的等。
  • node.data:是否为data数据节点,默认为true,表示这个节点也是一个数据节点(data node),它会存储索引数据并处理搜索请求。
  • http.cors.enabled: true:允许跨源资源共享(CORS)。当你想从另一个域的网页或应用访问这个Elasticsearch节点时,CORS允许这样的请求
  • http.cors.allow-origin: “*” : 允许来自任何域的CORS请求。但出于安全考虑,通常不建议在生产环境中使用*,而是指定特定的域名。
  • path.data:定义了Elasticsearch用于存储索引数据的路径。
  • path.logs:定义了Elasticsearch存储其日志文件的路径。
  • network.host: 0.0.0.0:告诉Elasticsearch监听所有可用的网络接口。但在生产环境中,为了安全起见,通常会指定特定的IP地址或范围。
  • discovery.seed_hosts:定义了Elasticsearch在启动时用于发现其他集群成员的初始主机列表。可以通过es-node1、es-node2和es-node3这些主机域名或IP地址来访问其他节点。(上面配置了域名与机器ip的映射关系,因此可以使用机器域名)
  • cluster.initial_master_nodes:在Elasticsearch第一次启动时,需要指定哪些节点应该成为主节点(指定node.name指定的节点名字列表)。

配置节点1

vim config/elasticsearch.yml
# node-1
cluster.name: es-cluster

node.name: node-1
node.master: true
node.data: true


http.cors.enabled: true
http.cors.allow-origin: "*"

path.data: /home/es/elasticsearch-7.17.3/data-cluster
path.logs: /home/es/elasticsearch-7.17.3/logs-cluster

network.host: 0.0.0.0

discovery.seed_hosts: ["es-node1","es-node2","es-node3"]
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]

配置节点2

vim config/elasticsearch.yml
# node-2
cluster.name: es-cluster

node.name: node-2
node.master: true
node.data: true


http.cors.enabled: true
http.cors.allow-origin: "*"

path.data: /home/es/elasticsearch-7.17.3/data-cluster
path.logs: /home/es/elasticsearch-7.17.3/logs-cluster

network.host: 0.0.0.0

discovery.seed_hosts: ["es-node1","es-node2","es-node3"]
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]

配置节点3

vim config/elasticsearch.yml
# node-3
cluster.name: es-cluster

node.name: node-3
node.master: true
node.data: true

http.cors.enabled: true
http.cors.allow-origin: "*"

path.data: /home/es/elasticsearch-7.17.3/data-cluster

path.logs: /home/es/elasticsearch-7.17.3/logs-cluster

network.host: 0.0.0.0

discovery.seed_hosts: ["es-node1","es-node2","es-node3"]
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]

分别启动

bin/elasticsearch -d

验证集群搭建成功

在这里插入图片描述

Kibana配置修改

集群搭建成功,更改kibana的配置中的ES instances地址

elasticsearch.hosts: ["http://192.168.43.6:9200", "http://192.168.43.133:9200", "http://192.168.43.225:9200"]

重启Kibana

查看进程

netstat -tunlp|grep 5601
[es@polaris kibana-7.17.3-linux-x86_64]$ netstat -tunlp|grep 5601
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      7379/bin/../node/bi 

停止Kibana服务

kill 7379

启动Kibana

nohup bin/kibana &

验证

在这里插入图片描述

ES开启认证

参考:Elasticsearch开启认证|为ES设置账号密码|ES账号密码设置|ES单机开启认证|ES集群开启认证

<think>嗯,用户想了解如何搭建启动Elasticsearch集群。我需要先理清楚步骤,确保覆盖所有关键点。首先,我应该从准备工作开始,比如环境准备和节点规划。用户可能对Elasticsearch的基本概念不太熟悉,所以得解释一下集群、节点、分片这些术语。 接下来,安装Elasticsearch。可能需要说明不同操作系统下的安装方法,比如用apt-get或者手动下载。配置环节很重要,每个节点的设置需要详细说明,比如节点名称、网络地址、集群名称、发现和选举设置。用户可能会遇到配置错误,所以要提醒他们注意参数的正确性,比如discovery.seed_hosts的正确格式。 然后,启动集群的步骤。需要分节点启动,强调检查日志的重要性,以及如何验证集群状态。这里可能需要介绍curl命令和_cat API的使用方法。如果用户是新手,可能不知道如何查看节点状态,所以给出具体的命令示例会很有帮助。 安全方面也不能忽视,尤其是生产环境。需要提到设置密码、HTTPS和防火墙规则。可能用户会忽略安全配置,导致集群暴露在风险中,所以得提醒他们这些步骤的重要性。 最后,维护和优化的部分。监控工具如Elasticsearch Head或Cerebro的使用,分片分配的策略,备份恢复的方法,这些都能帮助用户更好地管理集群。可能用户在实际操作中会遇到性能问题,所以优化建议是必要的。 还要考虑用户的实际场景,他们可能是在测试环境还是生产环境搭建集群。如果是测试环境,可能只需要单节点多个实例,而生产环境需要多节点和高可用性配置。需要区分这些情况,给出不同的建议。 用户的问题中没有提到版本问题,但不同版本的Elasticsearch配置可能有差异,特别是7.0之后的版本默认启用bootstrap.memory_lock,可能需要特别说明。此外,系统配置如vm.max_map_count的设置,在Linux系统中容易出错,需要强调修改方法。 总结下来,回答需要结构清晰,分步骤讲解,同时包含必要的注意事项和常见问题处理。确保用户按照步骤操作时不会遗漏关键配置,遇到问题能够找到解决方法。语言要简洁明了,避免使用过于专业的术语,或者在使用时进行解释,让新手也能理解。</think>好的!以下是ElasticsearchES集群搭建启动的逐步说明: --- ### 一、基础概念 1. **集群(Cluster)**:多个ES节点组成的分布式系统 2. **节点(Node)**:单个ES实例,分为主节点(Master)、数据节点(Data)、协调节点(Coordinating)等角色 3. **分片(Shard)**:索引数据的存储单元,分为主分片(Primary)和副本分片(Replica) --- ### 二、搭建步骤 #### 1. 环境准备 - **操作系统**:Linux(推荐CentOS/Ubuntu) - **Java**:JDK 11+(ES 7.0+要求) - **硬件要求**: - 内存:至少4GB(生产环境建议16GB+) - 磁盘:SSD最佳 - 文件描述符:`ulimit -n 65535` #### 2. 节点规划 ```bash # 示例集群(3节点): 节点1:192.168.1.10 (主节点 + 数据节点) 节点2:192.168.1.11 (数据节点) 节点3:192.168.1.12 (协调节点) ``` #### 3. 安装ES ```bash # 以Ubuntu为例 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.5.3-linux-x86_64.tar.gz tar -zxvf elasticsearch-8.5.3-linux-x86_64.tar.gz mv elasticsearch-8.5.3 /usr/local/elasticsearch ``` #### 4. 配置节点 修改`config/elasticsearch.yml`: ```yaml # 节点1配置 cluster.name: my-es-cluster node.name: node-1 node.roles: [master, data] # 主节点+数据节点 network.host: 192.168.1.10 discovery.seed_hosts: ["192.168.1.10", "192.168.1.11", "192.168.1.12"] cluster.initial_master_nodes: ["node-1"] ``` ```yaml # 节点2配置 node.name: node-2 node.roles: [data] # 纯数据节点 network.host: 192.168.1.11 ``` ```yaml # 节点3配置 node.name: node-3 node.roles: [] # 默认协调节点 network.host: 192.168.1.12 ``` #### 5. 系统配置 ```bash # 修改内核参数(所有节点) sudo sysctl -w vm.max_map_count=262144 echo "vm.max_map_count=262144" >> /etc/sysctl.conf ``` --- ### 三、启动集群 1. **逐个启动节点**: ```bash cd /usr/local/elasticsearch ./bin/elasticsearch -d # -d表示后台运行 ``` 2. **验证启动状态**: ```bash curl -XGET 'http://192.168.1.10:9200/_cat/nodes?v' ``` 3. **预期输出**: ``` ip heap.percent ram.percent cpu load node.role master name 192.168.1.10 35 95 3 0.45 dim * node-1 192.168.1.11 28 93 2 0.32 d - node-2 192.168.1.12 22 89 1 0.12 - - node-3 ``` --- ### 四、安全配置(生产环境必做) 1. **启用安全功能**(在`elasticsearch.yml`中): ```yaml xpack.security.enabled: true xpack.security.transport.ssl.enabled: true ``` 2. **设置密码**: ```bash ./bin/elasticsearch-setup-passwords auto # 自动生成密码 ``` --- ### 五、常见问题处理 1. **节点无法加入集群**: - 检查`discovery.seed_hosts`配置 - 确认防火墙开放端口(默认9200/9300) 2. **脑裂问题**: - 配置`discovery.zen.minimum_master_nodes: (N/2)+1`(7.x之前版本) - 8.x版本已自动优化选举机制 3. **内存不足**: - 修改`config/jvm.options`: ```bash -Xms4g # 最小内存 -Xmx4g # 最大内存(不超过物理内存50%) ``` --- ### 六、维护建议 1. **监控工具**: - Kibana Monitoring - Cerebro(第三方管理工具) 2. **定期备份**: - 使用快照(Snapshot)到共享存储(NFS/S3) 3. **滚动升级**: - 逐个节点停机更新,确保集群高可用 --- 按照以上步骤操作,即可完成ES集群搭建启动。实际部署时请根据硬件资源和业务需求调整节点角色与配置参数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值