Linux环境下Elasticsearch分布式集群运维实战

在Linux服务器上部署Elasticsearch分布式集群,是构建企业级搜索服务的核心环节。

本文将围绕CentOS 7.9系统环境,详解从零搭建Elasticsearch集群的完整流程,涵盖域名解析配置、Docker容器化部署、服务器资源规划等实操内容。

一、服务器环境准备

购买云服务器建议选择4核8GB以上配置,推荐使用腾讯云S5或阿里云g6系列实例。

操作系统统一采用CentOS 7.9 64位,所有节点需配置内网互通。

假设规划三节点集群:

node1:172.16.0.1(主节点候选)

node2:172.16.0.2(数据节点)

node3:172.16.0.3(数据节点)

登录服务器后执行系统优化:

# 修改系统限制
echo " soft nofile 655360" >> /etc/security/limits.conf
echo " hard nofile 655360" >> /etc/security/limits.conf
echo " soft nproc 4096" >> /etc/security/limits.conf
echo " hard nproc 4096" >> /etc/security/limits.conf
# 禁用swap
echo "vm.swappiness=0" >> /etc/sysctl.conf
sysctl -p

二、D方式部署Elasticsearch

采用Docker容器化部署可简化版本管理。

首先安装Docker环境:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable docker && systemctl start docker

拉取官方镜像(以7.17.15版本为例):

Elasticsearch分布式特性 高可用性 水平扩展_服务器Elasticsearch故障

docker pull elasticsearch:7.17.15

创建挂载目录和配置文件:

mkdir -p /data/es/{config,data,logs}
chmod 777 /data/es/data
cat > /data/es/config/elasticsearch.yml << EOF
cluster.name: production-es
node.name: node-1
path.data: /usr/share/elasticsearch/data
path.logs: /usr/share/elasticsearch/logs
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["172.16.0.1", "172.16.0.2", "172.16.0.3"]
cluster.initial_master_nodes: ["node-1"]
EOF

启动容器:

docker run -d 
--name es-node1 
--restart=always 
-p 9200:9200 
-p 9300:9300 
-v /data/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml 
-v /data/es/data:/usr/share/elasticsearch/data 
-v /data/es/logs:/usr/share/elasticsearch/logs 
-e "ES_JAVA_OPTS=-Xms4g -Xmx4g" 
elasticsearch:7.17.15

Elasticsearch分布式特性 高可用性 水平扩展_服务器Elasticsearch故障

Elasticsearch分布式特性 高可用性 水平扩展_服务器Elasticsearch故障

三、域名解析与Nginx代理

购买域名后(如search.example.com),在云解析控制台添加A记录指向任意节点公网IP。

为统一访问入口,部署Nginx做负载均衡:

# 安装Nginx
yum install nginx -y
# 配置反向代理
cat > /etc/nginx/conf.d/es.conf << EOF
upstream es_backend {
server 172.16.0.1:9200 max_fails=3 fail_timeout=30s;
server 172.16.0.2:9200 max_fails=3 fail_timeout=30s;
server 172.16.0.3:9200 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name search.example.com;
location / {
proxy_pass http://es_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
EOF
nginx -t && systemctl restart nginx

四、集群健康状态验证

通过curl命令检查集群状态:

curl -X GET "http://search.example.com/_cluster/health?pretty"

正常返回应显示"status" : "green",且"number_of_nodes" : 3。

若为yellow状态,说明存在未分配副本分片,需检查磁盘空间或调整副本数。

服务器Elasticsearch故障_Elasticsearch分布式特性 高可用性 水平扩展

五、分片规划与性能调优

根据数据量评估分片配置。

假设单日日志量50GB,保留30天共1.5TB数据,按单个分片30GB计算:

# 创建索引时指定分片数
curl -X PUT "search.example.com/logs-2026.02.28" -H 'Content-Type: application/json' -d'
{
"settings": {
"number_of_shards": 50,
"number_of_replicas": 1
}
}'

监控磁盘使用率,设置告警阈值:

# 查看磁盘空间
df -h | grep /dev/vda1
# 配置ES磁盘水位线
curl -X PUT "search.example.com/_cluster/settings" -H 'Content-Type: application/json' -d'
{
"transient": {
"cluster.routing.allocation.disk.watermark.low": "85%",
"cluster.routing.allocation.disk.watermark.high": "90%",
"cluster.routing.allocation.disk.watermark.flood_stage": "95%"
}
}'

number_of_shards 主分片数
number_of_replicas 副本分片数
{
  "my_index": {
    "settings": {
      "index": {
        "number_of_shards": "8",
        "number_of_replicas": "1"
      }
    }
  }
}

六、生产环境注意事项

1. 节点角色分离:通过配置node.roles精确指定主节点、数据节点、协调节点角色

2. JVM堆内存设置:不超过物理内存50%,且最大不超过32GB

3. 索引生命周期管理:使用ILM策略自动rollover和删除过期索引

4. 安全加固:开启X-Pack认证,配置防火墙仅放行指定IP访问9200端口

通过以上步骤,即可在Linux服务器上完成企业级Elasticsearch集群的部署。

实际运维中需结合Prometheus+Grafana监控体系,实现集群状态的实时观测与预警。