Elasticsearch 单机和集群环境部署教程
目录
- 一、Elasticsearch 单机环境部署
- 1. 环境准备
- 2. 安装 Elasticsearch
- 2.1 在 Ubuntu 上安装
- 2.2 在 CentOS 上安装
- 2.3 启动并配置 Elasticsearch
- 二、Elasticsearch 集群环境部署
- 1. 集群架构
- 2. 集群部署步骤
- 2.1 在每个节点上安装 Elasticsearch
- 2.2 配置集群
- 2.3 启动 Elasticsearch 服务
- 2.4 验证集群状态
- 3. 集群部署注意事项
- 三、Elasticsearch 使用案例
- 1. Java 示例:使用 Elasticsearch RestHighLevelClient
- 1.1 添加 Maven 依赖
- 1.2 Java 代码示例
- 2. Python 示例:使用 `elasticsearch` 库
- 2.1 安装 `elasticsearch` 库
- 2.2 Python 代码示例
- 总结
- 部署过程中的注意事项
一、Elasticsearch 单机环境部署
1. 环境准备
- 操作系统:Linux(推荐 Ubuntu 20.04 或 CentOS 7),也可以在 Windows 上安装 Elasticsearch。
- Java 版本:Elasticsearch 需要 JDK 版本 17(Elasticsearch 8.x 版本自带 OpenJDK)。
- Elasticsearch 版本:推荐使用 Elasticsearch 8.x(最新版本)。
2. 安装 Elasticsearch
2.1 在 Ubuntu 上安装
-
导入 Elasticsearch PGP 密钥:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
-
添加 Elasticsearch 源:
sudo sh -c 'echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" > /etc/apt/sources.list.d/elastic-8.x.list'
-
安装 Elasticsearch:
sudo apt update sudo apt install elasticsearch
2.2 在 CentOS 上安装
-
导入 Elasticsearch GPG 密钥:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
-
添加 Elasticsearch 仓库:
cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo [elasticsearch-8.x] name=Elasticsearch repository for 8.x packages baseurl=https://artifacts.elastic.co/packages/8.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF
-
安装 Elasticsearch:
sudo yum install elasticsearch
2.3 启动并配置 Elasticsearch
-
启动 Elasticsearch 服务:
sudo systemctl start elasticsearch sudo systemctl enable elasticsearch
-
检查服务状态:
sudo systemctl status elasticsearch
-
配置 Elasticsearch:
编辑
/etc/elasticsearch/elasticsearch.yml
,进行基本配置。例如:network.host: 0.0.0.0 discovery.type: single-node
network.host
设置为0.0.0.0
允许远程访问;discovery.type
设置为single-node
表示这是单节点配置。 -
重启 Elasticsearch:
sudo systemctl restart elasticsearch
-
验证安装:
使用
curl
命令验证 Elasticsearch 是否正常运行:curl -X GET "localhost:9200/"
二、Elasticsearch 集群环境部署
1. 集群架构
Elasticsearch 集群至少需要 3 台节点,其中:
- 主节点:负责管理集群状态、索引元数据。
- 数据节点:存储实际的数据,执行搜索和聚合操作。
- 协调节点:协调搜索和索引请求,不存储数据。
2. 集群部署步骤
2.1 在每个节点上安装 Elasticsearch
在所有节点上按照单机部署的步骤安装 Elasticsearch。
2.2 配置集群
-
配置集群名称和节点名称:
在每个节点的
/etc/elasticsearch/elasticsearch.yml
中设置:cluster.name: my-cluster node.name: node-1 # 修改为每个节点的唯一名称
-
配置网络:
配置
network.host
和discovery.seed_hosts
。例如:network.host: 0.0.0.0 discovery.seed_hosts: ["192.168.1.10", "192.168.1.11", "192.168.1.12"]
-
配置角色:
在不同节点上,配置节点角色,如主节点、数据节点:
node.roles: ["master", "data"] # 可以设置为 master, data, ingest
-
配置集群引导主节点:
在主节点的配置文件中添加:
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
2.3 启动 Elasticsearch 服务
在所有节点上启动 Elasticsearch 服务:
sudo systemctl start elasticsearch
2.4 验证集群状态
在任何一个节点上执行以下命令来检查集群状态:
curl -X GET "localhost:9200/_cluster/health?pretty"
3. 集群部署注意事项
- 网络配置:确保所有节点之间的网络通信顺畅,尤其是主节点与数据节点之间的通信。
- 节点角色:合理分配节点角色,避免单点故障。
- 高可用性:配置多个主节点和多个数据节点,防止节点故障时导致服务中断。
- 日志和监控:使用 Elasticsearch 自带的 X-Pack 或者使用其他工具(如 Kibana、Prometheus)进行集群监控。
三、Elasticsearch 使用案例
1. Java 示例:使用 Elasticsearch RestHighLevelClient
1.1 添加 Maven 依赖
在 pom.xml
中添加依赖:
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.15.0</version>
</dependency>
</dependencies>
1.2 Java 代码示例
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.common.xcontent.XContentType;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class ElasticsearchExample {
public static void main(String[] args) throws IOException {
// 创建客户端
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http")));
// 创建文档
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("name", "John Doe");
jsonMap.put("age", 30);
jsonMap.put("email", "john.doe@example.com");
// 构建索引请求
IndexRequest request = new IndexRequest("users").id("1").source(jsonMap, XContentType.JSON);
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
System.out.println("Indexed document ID: " + indexResponse.getId());
// 关闭客户端
client.close();
}
}
2. Python 示例:使用 elasticsearch
库
2.1 安装 elasticsearch
库
pip install elasticsearch
2.2 Python 代码示例
from elasticsearch import Elasticsearch
# 创建 Elasticsearch 客户端
es = Elasticsearch("http://localhost:9200")
# 创建文档
doc = {
'name': 'John Doe',
'age': 30,
'email': 'john.doe@example.com'
}
# 索引文档
res = es.index(index="users", id=1, body=doc)
print(res['result'])
# 获取文档
res = es.get(index="users", id=1)
print(res['_source'])
# 关闭连接
es.transport.close()
总结
通过以上步骤,我们完成了 Elasticsearch 的单机和集群环境的部署,并实现了 Java 和 Python 的简单连接示例。Elasticsearch 是一个强大的分布式搜索引擎,适用于处理大量数据并提供快速的搜索功能。
部署过程中的注意事项
- 节点规划:在集群环境中,合理规划主节点和数据节点,确保集群的高可用性。
- 资源管理:确保每个节点有足够的内存和 CPU 资源,防止因为资源不足导致性能下降。
- 安全性:使用 X-Pack 或其他工具加强 Elasticsearch 的认证、授权和通信加密。
- 监控和日志:配置 Kibana 或 Prometheus 进行集群监控,及时发现并处理性能瓶颈。