第二章:环境搭建——ES单机安装与配置、Kibana安装与配置、Head插件安装、集群模式搭建
好,咱们直接进入正题。环境搭建这块,说难不难,说简单吧,坑也不少。我当年第一次装ES的时候,光一个启动报错就折腾了半小时。后来才发现,是JDK版本没对上。嗯,咱们一步步来,把每个环节都捋清楚。
2.1 ES单机安装与配置
先说说单机版。我个人习惯,不管生产还是测试,都先跑一遍单机,验证基础功能没问题了,再考虑集群。
2.1.1 下载与解压
去官网下载对应操作系统的压缩包。我建议用tar.gz包,别用rpm或deb,因为后面调配置更方便。
# 下载(以7.17.x为例)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.10-linux-x86_64.tar.gz
# 解压
tar -zxvf elasticsearch-7.17.10-linux-x86_64.tar.gz
# 进入目录
cd elasticsearch-7.17.10/
2.1.2 核心配置
配置文件在 config/elasticsearch.yml。这里有几个关键项,我挨个说。
| 配置项 | 说明 | 我的建议值 |
|---|---|---|
| cluster.name | 集群名称,同一集群必须一致 | my-es-cluster |
| node.name | 节点名称,每个节点唯一 | node-1 |
| path.data | 数据存储目录 | /data/es/data |
| path.logs | 日志目录 | /data/es/logs |
| network.host | 监听地址,生产环境别用0.0.0.0 | 192.168.1.100 |
| http.port | HTTP端口 | 9200 |
| discovery.seed_hosts | 集群发现节点列表 | ["192.168.1.100"] |
2.1.3 启动与验证
# 创建专用用户
useradd esuser
chown -R esuser:esuser /data/es
# 切换用户启动
su esuser
./bin/elasticsearch -d # -d表示后台运行
# 验证是否启动成功
curl http://localhost:9200
如果返回类似下面的JSON,说明启动成功了:
{
"name" : "node-1",
"cluster_name" : "my-es-cluster",
"cluster_uuid" : "xxxx",
"version" : {
"number" : "7.17.10",
"build_flavor" : "default"
}
}
tail -f logs/elasticsearch.log 实时盯着,一旦有ERROR能立刻发现。别等出问题了再回头翻日志,那太被动了。
2.2 Kibana安装与配置
Kibana是ES的官方可视化工具。说白了,就是给你一个Web界面,不用再对着curl敲命令了。我个人觉得,Kibana的Dev Tools是调试ES查询最顺手的工具,没有之一。
2.2.1 下载与解压
注意版本号必须和ES一致。我见过有人ES装7.17,Kibana装8.x,结果连不上,折腾半天才发现版本不匹配。
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.10-linux-x86_64.tar.gz
tar -zxvf kibana-7.17.10-linux-x86_64.tar.gz
cd kibana-7.17.10-linux-x86_64/
2.2.2 配置与启动
配置文件在 config/kibana.yml。核心就两个配置:
server.port: 5601
server.host: "0.0.0.0" # 允许外部访问
elasticsearch.hosts: ["http://localhost:9200"] # ES地址
启动命令:
./bin/kibana & # 后台运行
启动后访问 http://你的IP:5601,看到Kibana界面就对了。
elasticsearch.hosts 配置。我曾经帮一个同事排查问题,他ES在服务器A,Kibana装服务器B,结果忘了改这个配置,Kibana一直报连接拒绝。
2.3 Head插件安装
Head是一个第三方插件,用来查看ES集群状态、索引数据等。虽然现在Kibana功能很强了,但Head的简洁界面在某些场景下还是很有用的,比如快速查看分片分布。
2.3.1 安装方式
Head插件有两种安装方式:
- 浏览器插件方式:Chrome商店搜“Elasticsearch Head”,安装后直接访问ES地址即可。这种方式最简单,我推荐新手用。
- 独立部署方式:需要Node.js环境,适合需要自定义的场景。
这里说下独立部署:
# 安装Node.js(如果没装的话)
yum install -y nodejs
# 克隆Head项目
git clone https://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
# 安装依赖
npm install
# 启动
npm run start &
启动后访问 http://localhost:9100,在连接地址栏输入你的ES地址即可。
elasticsearch.yml 中添加:http.cors.enabled: truehttp.cors.allow-origin: "*"然后重启ES。嗯,这个坑我踩过,当时Head一直显示连接失败,查了半天才发现是跨域没开。
2.4 集群模式搭建
单机版玩熟了,就该上集群了。集群的好处很明显:高可用、水平扩展、数据分片。我在生产环境维护过一个20节点的集群,每天处理上亿条日志,稳得很。
2.4.1 集群规划
假设我们搭建一个3节点的集群,节点信息如下:
| 节点名称 | IP地址 | 角色 |
|---|---|---|
| node-1 | 192.168.1.101 | master + data |
| node-2 | 192.168.1.102 | master + data |
| node-3 | 192.168.1.103 | master + data |
2.4.2 配置修改
每个节点的 elasticsearch.yml 配置如下(以node-1为例):
cluster.name: my-es-cluster
node.name: node-1
node.master: true
node.data: true
path.data: /data/es/data
path.logs: /data/es/logs
network.host: 192.168.1.101
http.port: 9200
discovery.seed_hosts: ["192.168.1.101", "192.168.1.102", "192.168.1.103"]
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
其他节点只需改 node.name 和 network.host 即可。
cluster.initial_master_nodes 这个配置只在集群首次启动时需要。它告诉ES哪些节点有资格成为主节点。一旦集群形成,这个配置就可以去掉了。我第一次搭集群时没加这个,结果三个节点互相找不到,日志里全是“master not discovered”的报错。
2.4.3 启动集群
按顺序启动每个节点:
# 在每个节点上执行
su esuser
./bin/elasticsearch -d
启动后,用以下命令检查集群状态:
curl http://192.168.1.101:9200/_cluster/health?pretty
返回结果中,status 字段如果是 green,说明集群健康;number_of_nodes 显示3,说明三个节点都加入了。
curl -X POST http://localhost:9200/_cluster/reroute?retry_failed=true
2.4.4 集群验证
咱们做个简单的验证:创建一个索引,写入一条数据,看看数据是否自动分片到不同节点。
# 创建索引,设置3个分片、1个副本
curl -X PUT "http://192.168.1.101:9200/test_index" -H 'Content-Type: application/json' -d'
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}'
# 写入一条数据
curl -X POST "http://192.168.1.101:9200/test_index/_doc" -H 'Content-Type: application/json' -d'
{
"title": "Hello ES Cluster",
"timestamp": "2024-01-01"
}'
# 查看分片分布
curl "http://192.168.1.101:9200/_cat/shards/test_index?v"
你会看到分片均匀分布在三个节点上,每个分片还有一个副本在另一个节点。这就是集群的魅力——单节点挂了,数据不丢,服务不停。
好了,环境搭建这块就这些。记住一个原则:先单机验证,再集群扩展。别一上来就搞集群,出了问题排查起来很头疼。下一章咱们开始玩真正的搜索功能,到时候你会觉得,前面这些搭建工作都是值得的。