前言
你是否曾被海量数据的搜索与分析需求困扰?是否想快速掌握企业级搜索引擎Elasticsearch的集群化部署?无论你是开发、运维,还是正在学习分布式系统的学生,本文将为你提供两种高效部署ES集群的方案:纯Linux手动部署与Docker容器化一键启动,并附带每一步的实战截图。
为什么需要集群?单节点ES扛不住高并发?数据丢失风险大?集群化不仅能提升性能,还能实现高可用和容灾。
适合读者:
想快速入门Elasticsearch的开发者
需要部署生产级ES集群的运维人员
对分布式系统感兴趣的学生或技术爱好者
前置知识:
基础Linux命令(如curl、vi、权限管理)
Docker基本概念(镜像、容器、Compose)
了解HTTP协议(测试接口用)
1、Linux手动搭建ES集群
宿主机的准备:
lij-node1:10.1.1.140
lij-node2:10.1.1.141
lij-kibana:10.1.1.142
1.1环境准备:JDK安装、用户权限配置
关闭防火墙,防止后续测试的时候报错
安装jdk环境
yum -y install java-1.8.0-openjdk
java -version
安装es并解压
curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz
tar -xvf elasticsearch-6.5.4.tar.gz #解压
1.2关键配置:系统参数调优、IK分词器集成
由于es默认是不能以root用户来运行es的,所以,我们新建一个用户,以非root用户来运行
groupadd es #创建组
useradd es -g es -p es #创建用户组密码
mv elasticsearch-6.5.4 /home/es #移动文件目录把解压的elasticsearch-6.5.4移到/home/es下
chown -R es:es /home/es/elasticsearch-6.5.4 #赋值权限
修改es配置文件
vi /home/es/elasticsearch-6.5.4/config/elasticsearch.yml
#node1的配置:
cluster.name: my-es-1
node.name: lij-node1
network.host: 10.1.1.140
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.1.1.141"]
discovery.zen.minimum_master_nodes: 2
#node2的配置:
cluster.name: my-es-1
node.name: lij-node2
network.host: 10.1.1.141
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.1.1.140"]
discovery.zen.minimum_master_nodes: 2
安装IK分词器
#在/home/es/elasticsearch-6.5.4/plugins目录下下载文件,并解压
curl -O http://43.136.108.62:8080/elasticsearch-analysis-ik-6.5.4.zip
mkdir ik
unzip elasticsearch-analysis-ik-6.5.4.zip-d ik/
chown -R es:es ik/
1.3集群联调:节点互通、Kibana可视化
切换到es用户
[root@lij-node1 plugins]# cd /home/es/elasticsearch-6.5.4/bin/
[root@lij-node1 bin]# su es
[es@lij-node1 bin]$ ./elasticsearch -d
安装kibana
wget https://mirrors.huaweicloud.com/kibana/6.5.4/kibana-6.5.4-linux-x86_64.tar.gz
tar -zvxf kibana-6.5.4-linux-x86_64.tar.gz -C /home
修改配置文件
执行kibana
./bin/kibana
测试
http:10.1.1.142:5601
1.4避坑提示:max_map_count配置、文件句柄数限制
es可能会报: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
则我们需要修改sysctl.conf,添加上:vm.max_map_count=262144,最后启动配置
vi /etc/sysctl.conf
#添加下面的内容
vm.max_map_count=262144
sysctl -w vm.max_map_count=262144 #重启配置
因为Elasticsearch在运行过程中会打开大量的文件句柄(file descriptors),用于管理索引、存储数据以及与其他节点通信等操作。如果系统限制了文件句柄的数量,可能会导致Elasticsearch无法正常运行,甚至出现性能问题或服务中断。
vi /etc/security/limits.conf
#添加下面的内容
* soft nofile 65536
* hard nofile 65536
reboot #重新登录即可生效
ulimit -H -n #可使用命令查看是否生效
1.5 测试
http://10.1.1.140:9200/_cat/nodes
2、docker安装ES集群
说明:配置两个节点和搭建一个kibana,只需一台宿主机即可,使用的IP为10.1.1.139
3.1准备工作
关闭防火墙
3.2 编写配置文件
cd /opt
mkdir es-standonly-docker #创建一个目录
vim docker-compose.yml #编写一个文件
在docker-compose.yml文件里面添加下面内容
services:
elasticsearch1:
image: elasticsearch:6.5.4
container_name: elasticsearch-node1
ports:
- 9200:9200
environment:
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
- cluster.name=my-es-cluster
- node.name=node1
- "discovery.zen.ping.unicast.hosts=elasticsearch1,elasticsearch2"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata1:/usr/share/elasticsearch/data
networks:
- esnet
elasticsearch2:
image: elasticsearch:6.5.4
container_name: elasticsearch-node2
ports:
- 9201:9200
environment:
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
- cluster.name=my-es-cluster
- node.name=node2
- "discovery.zen.ping.unicast.hosts=elasticsearch1,elasticsearch2"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata2:/usr/share/elasticsearch/data
networks:
- esnet
kibana:
image: kibana:6.5.4
container_name: kibana
environment:
- ELASTICSEARCH_URL=http://elasticsearch1:9200 # 明确指向节点1
ports:
- 5601:5601
depends_on:
- elasticsearch1
- elasticsearch2
networks:
- esnet
volumes:
esdata1:
esdata2:
networks:
esnet:
driver: bridge
3.3 启动docker
docker compose up -d
3.4 测试
curl -X GET "10.1.1.139:9200/_cluster/health?pretty"
curl -X GET "10.1.1.139:9201/_cluster/health?pretty"
3.5 访问kibana
浏览器访问:http://10.1.1.139:5601
立即动手:跟着步骤操作,20分钟搭建属于你的ES集群!🚀