手把手教你搭建Elasticsearch集群(Linux + Docker双方案)

前言

你是否曾被海量数据的搜索与分析需求困扰?是否想快速掌握企业级搜索引擎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集群!🚀

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值