Elasticsearch7.x - 集群部署

发布时间 2023-09-14 18:21:21作者: lihewei

1. 软件下载

软件下载地址:https://www.elastic.co/cn/downloads/past-releases/

2. 集群部署

  • 多个不同的节点(es)要提供不同的端口号,将集群当成一个整体来使用。
  • 一个 Elasticsearch 集群有一个唯一的名字标识,节点只能通过指定某个集群的名字,来加入这个集群。
  • 建议部署3台
# 解压缩到三台服务器 node1、node2、node3
tar -zxvf elasticsearch-7.9.3-linux-x86_64.tar.gz 
# 改名
mv elasticsearch-7.9.3 es-node1

3. 创建账户

因为安全问题, Elasticsearch 不允许 root 用户直接运行,所以要在每个节点中创建新用户,在 root 用户中创建新用户

#root账户下新增es用户

useradd es #新增用户
passwd es #为 es 用户设置密码
userdel -r es  #如果错了,可以删除再加
chown -R es:es /home/yc/elastic/es-node1 #文件夹所有者
chown -R es:es /home/yc/elastic/es-node2 #文件夹所有者
chown -R es:es /home/yc/elastic/es-node3 #文件夹所有者

#给最高权限
chmod 775 文件名

4. 集群搭建

Linux集群搭建

1)解压软件:tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz -C /opt/module

2)创建用户:Elasticsearch 不允许 root 用户直接运行,所以要创建新用户。

3)修改三个节点上的config/elasticsearch.yml 文件

  • node-1

    # 加入如下配置
    #集群名称
    cluster.name: cluster-es
    #节点名称, 每个节点的名称不能重复
    node.name: node-1
    #ip 地址,填入每个节点的ip
    network.host: xxx.xxx.xxx.xxx
    #是不是有资格主节点
    node.master: true
    node.data: true
    # 设置对外服务的http端口,默认为9200
    http.port: 9200
    # 设置节点间交互的tcp端口,默认是9300
    transport.tcp.port: 9300
    # head 插件需要这打开这两个配置
    http.cors.allow-origin: "*"
    http.cors.enabled: true
    http.max_content_length: 200mb
    #es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 master
    cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
    #es7.x 之后新增的配置,节点发现
    discovery.seed_hosts: ["xxx.xxx.xxx.xxx:9300","xxx.xxx.xxx.xxx:9301","xxx.xxx.xxx.xxx:9302"]
    #集群内同时启动的数据任务个数,默认是 2 个
    cluster.routing.allocation.cluster_concurrent_rebalance: 16
    #添加或删除节点及负载均衡时并发恢复的线程个数,默认 4 个
    cluster.routing.allocation.node_concurrent_recoveries: 16
    #初始化数据恢复时,并发恢复线程的个数,默认 4 个
    cluster.routing.allocation.node_initial_primaries_recoveries: 16
    
    
  • node-2

    # 加入如下配置
    #集群名称
    cluster.name: cluster-es
    #节点名称, 每个节点的名称不能重复
    node.name: node-2
    #ip 地址,填入每个节点的ip
    network.host: xxx.xxx.xxx.xxx
    #是不是有资格主节点
    node.master: true
    node.data: true
    # 设置对外服务的http端口,默认为9200
    http.port: 9201
    # 设置节点间交互的tcp端口,默认是9300
    transport.tcp.port: 9301
    # head 插件需要这打开这两个配置
    http.cors.allow-origin: "*"
    http.cors.enabled: true
    http.max_content_length: 200mb
    #es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 master
    cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
    #es7.x 之后新增的配置,节点发现
    discovery.seed_hosts: ["xxx.xxx.xxx.xxx:9300","xxx.xxx.xxx.xxx:9301","xxx.xxx.xxx.xxx:9302"]
    #集群内同时启动的数据任务个数,默认是 2 个
    cluster.routing.allocation.cluster_concurrent_rebalance: 16
    #添加或删除节点及负载均衡时并发恢复的线程个数,默认 4 个
    cluster.routing.allocation.node_concurrent_recoveries: 16
    #初始化数据恢复时,并发恢复线程的个数,默认 4 个
    cluster.routing.allocation.node_initial_primaries_recoveries: 16
    
    
  • node-3

    # 加入如下配置
    #集群名称
    cluster.name: cluster-es
    #节点名称, 每个节点的名称不能重复
    node.name: node-3
    #ip 地址,填入每个节点的ip
    network.host: xxx.xxx.xxx.xxx
    #是不是有资格主节点
    node.master: true
    node.data: true
    # 设置对外服务的http端口,默认为9200
    http.port: 9202
    # 设置节点间交互的tcp端口,默认是9300
    transport.tcp.port: 9302
    # head 插件需要这打开这两个配置
    http.cors.allow-origin: "*"
    http.cors.enabled: true
    http.max_content_length: 200mb
    #es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 master
    cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
    #es7.x 之后新增的配置,节点发现
    discovery.seed_hosts: ["xxx.xxx.xxx.xxx:9300","xxx.xxx.xxx.xxx:9301","xxx.xxx.xxx.xxx:9302"]
    #集群内同时启动的数据任务个数,默认是 2 个
    cluster.routing.allocation.cluster_concurrent_rebalance: 16
    #添加或删除节点及负载均衡时并发恢复的线程个数,默认 4 个
    cluster.routing.allocation.node_concurrent_recoveries: 16
    #初始化数据恢复时,并发恢复线程的个数,默认 4 个
    cluster.routing.allocation.node_initial_primaries_recoveries: 16
    

3)需要修改一下系统的相关配置

  • 修改/etc/security/limits.conf(es是新建的账户)

    # 在文件末尾中增加下面内容
    # 每个进程可以打开的文件数的限制
    es soft nofile 65536
    es hard nofile 65536
    
  • 修改/etc/security/limits.d/20-nproc.conf

    # 在文件末尾中增加下面内容
    # 每个进程可以打开的文件数的限制
    es soft nofile 65536
    es hard nofile 65536
    # 操作系统级别对每个用户创建的进程数的限制
    * hard nproc 4096
    # 注:* 带表 Linux 所有用户名称
    
  • 修改/etc/sysctl.conf

    # 在文件中增加下面内容
    # 一个进程可以拥有的 VMA(虚拟内存区域)的数量,默认值为 65536
    vm.max_map_count=655360
    
  • 重新加载

    sysctl -p
    

5)启动es(顺序启动)

cd /opt/module/es/
#启动
bin/elasticsearch
#后台启动
bin/elasticsearch -d

关闭防火墙(按需操作)

#暂时关闭防火墙
systemctl stop firewalld
#永久关闭防火墙
systemctl enable firewalld.service #打开放货抢永久性生效,重启后不会复原
systemctl disable firewalld.service #关闭防火墙,永久性生效,重启后不会复原

Windows集群搭建

1)创建 elasticsearch-cluster 文件夹,在内部复制三个 elasticsearch 服务

2)修改集群文件目录中每个节点的 config/elasticsearch.yml 配置文件

3)启动集群(启动前先删除每个节点中的 data 目录中所有内容),bin/elasticsearch.bat, 启动节点服务。

config/elasticsearch.yml

  • node1

    #节点 1 的配置信息:
    #集群名称,节点之间要保持一致
    cluster.name: my-elasticsearch
    #节点名称,集群内要唯一
    node.name: es-1001
    node.master: true
    node.data: true
    
    #ip 地址
    network.host: localhost
    #http 端口
    http.port: 1001
    #tcp 监听端口
    transport.tcp.port: 9301
    
    #ES查找节点模块(第一台机器不需要加)
    #discovery.seed_hosts: ["localhost:9301", "localhost:9302","localhost:9303"]
    #discovery.zen.fd.ping_timeout: 1m
    #discovery.zen.fd.ping_retries: 5
    #集群内的可以被选为主节点的节点列表
    #cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
    
    #跨域配置
    #action.destructive_requires_name: true
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    
  • node2

     #节点 2 的配置信息:
    #集群名称,节点之间要保持一致
    cluster.name: my-elasticsearch
    #节点名称,集群内要唯一
    node.name: es-1002
    node.master: true
    node.data: true
    
    #ip 地址
    network.host: localhost
    #http 端口
    http.port: 1002
    #tcp 监听端口
    transport.tcp.port: 9302
    
    #ES查找节点模块(第一台机器不需要加)
    discovery.seed_hosts: ["localhost:9301"]
    discovery.zen.fd.ping_timeout: 1m
    discovery.zen.fd.ping_retries: 5
    
    #集群内的可以被选为主节点的节点列表
    #cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
    
    #跨域配置
    #action.destructive_requires_name: true
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    
  • node3

    #节点 3 的配置信息:
    #集群名称,节点之间要保持一致
    cluster.name: my-elasticsearch
    #节点名称,集群内要唯一
    node.name: es-1003
    node.master: true
    node.data: true
    
    #ip 地址
    network.host: localhost
    #http 端口
    http.port: 1003
    #tcp 监听端口
    transport.tcp.port: 9303
    
    #ES查找节点模块(第一台机器不需要加)
    discovery.seed_hosts: ["localhost:9301","localhost:9302"]
    discovery.zen.fd.ping_timeout: 1m
    discovery.zen.fd.ping_retries: 5
    
    #集群内的可以被选为主节点的节点列表
    #cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
    
    #跨域配置
    #action.destructive_requires_name: true
    http.cors.enabled: true
    http.cors.allow-origin: "*"