单台服务器上部署Elasticsearch (ES) 集群虽然不是常见的生产环境做法(因为这会丧失集群应有的高可用性和容错能力),但在测试、学习或资源有限的情况下可以作为一种解决方案。 ### 步骤一:准备阶段 首先确认您的服务器满足运行多个ES实例的需求: - **内存**:建议每个节点最少有4GB以上RAM,并配置足够的交换空间。 - **JDK安装**:确保已正确安装了Java Development Kit (JDK),推荐版本为官方文档指定的支持范围内的最新稳定版。 - **文件描述符限制提升**:为了提高性能并防止因过多连接导致的问题,默认的文件句柄数需要增大。 ### 步骤二:下载与解压 访问[Elastic官网](https://www.elastic.co/cn/downloads/elasticsearch)获取适合您操作系统的压缩包。这里假设我们已经将tar.gz格式的压缩包上传至目标机器,则通过命令行工具将其解压到期望的位置,如`/opt/elasticsearch-7.x.x`. ```bash cd /path/to/downloaded/package/ tar -zxvf elasticsearch-7.*.tar.gz -C /opt/ ``` 创建软链接以便于管理不同版本之间的切换: ```bash ln -s /opt/elasticsearch-7.x.x /opt/es_home ``` ### 步骤三:复制多份实例配置 由于是在单一主机内部署虚拟化的“集群”,所以你需要对刚才建立的基础目录进行多次拷贝来模拟出独立的工作单元。例如,想要构建包含三个节点的小型集群的话,就分别命名为node1,node2以及node3. ```bash cp -r /opt/es_home{,.nodes/node1} cp -r /opt/es_home{,.nodes/node3} # 更新各自的配置路径 for dir in $(ls .nodes);do ln -sf ${PWD}/.nodes/${dir} /etc/init.d/$dir;done; ``` > 注意: 如果是Windows系统则无需设置服务启动项,直接修改config下的elasticsearch.yml即可调整端口等参数 接着进入每一个新生成的副本中编辑其对应的conf/elasticsearch.yml 文件以区分各个成员的身份标识(cluster.name 和 node.name), 并设定监听地址及传输端口号(默认9200,9300). 同时还要确保所有实例都指向相同的cluster name. 对于第i个节点(node-i): ```yaml cluster.name: my-cluster # 全部相同表示属于同一个逻辑组 node.name: es-node$i # 每个实例唯一识别码 network.host: 0.0.0.0 # 监听任意网卡设备 http.port: 920${i} # HTTP REST API对外提供的web service接口 transport.tcp.port: 930${i} # 节点间通信所使用的TCP端口 discovery.seed_hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"] # 列表内应列出其他成员信息用于发现机制查找伙伴节点 cluster.initial_master_nodes: [ "es-node1", "es-node2", "es-node3" ] # 初始化主选举集合列表,在首次引导时发挥作用 ``` 最后一步就是依次启动这几个经过定制后的进程啦! --- 在实际环境中,还涉及到安全性考量比如开启xpack认证授权功能;考虑到磁盘I/O效率影响因素可以选择SSD作为存储介质;另外别忘了定期备份重要数据以防万一哦~