• elasticsearch 6.3.2 集群配置


    一、约定俗成

    elasticsearch 所有关于数据的路径都位于 /data/elasticsearch 下面,因此,除了主程序以外,所有的es相关的数据都应该位于该路径下面,包括但不限于:

    es 数据                      # /data/elasticsearch/es_data
    es 程序日志                   # /data/elasticsearch/es_logs/elasticsearch.log
    es gc 日志                   # /data/elasticsearch/es_logs/gc.log
    es heap dump 路径            # /data/elasticsearch/es_heap_dump
    es java io 临时路径           # /data/elasticsearch/es_java_io
    
    • 1
    • 2
    • 3
    • 4
    • 5

    一、jvm.options 参数配置

    1、内存配置 (官方建议为物理内存的一半)

    -Xms4g
    -Xmx4g
    
    • 1
    • 2

    2、java.io.tmpdir

    -Djava.io.tmpdir=/data/elasticsearch/es_java_io
    
    • 1

    引用说明:

    最近客户现场的技术支持接连反馈了一个问题:导入数据的时候,上传的excel会在服务器上生成一个临时文件,而这个临时文件都在 tomcat 的安装目录下,如果上传次数比较多的话,就会导致tomcat安装目录下有多个临时的excel文件,很不合理也不美观。
    接到这个问题,第一反应是 java.io.tmpdir 这个系统配置没指定好,因为做上传的时候,是通过: System.getProperty(“java.io.tmpdir”);
    这种方式来获取临时目录,然后把文件放到临时目录里去的,按说这些临时文件都应该在 tomcat 安装目录下的 temp 文件夹里,因为这个是tomcat的临时目录,但现在却没有,所以怀疑是 java.io.tmpdir 这个系统变量没指定好。

    3、jvm heap dump path

    -XX:HeapDumpPath=/data/elasticsearch/es_heap_dump
    
    • 1

    3、gc log path

    8:-Xloggc:/data/elasticsearch/es_logs/gc.log
    9-:-Xlog:gc*,gc+age=trace,safepoint:file=/data/elasticsearch/es_logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m
    
    • 1
    • 2

    二、log4j2.properties 参数配置

    https://www.elastic.co/guide/en/elasticsearch/reference/6.3/logging.html


    三、elasticsearch.yml 参数配置

    path.data: /data/elasticsearch/es_data           # elasticsearch 存放数据的路径
    path.logs: /data/elasticsearch/es_logs           # elasticsearch 存放日志的路径
    
    cluster.name: es_online_cluster                  # elasticsearch 集群名称
    
    node.name: ${HOSTNAME}                           # elasticsearch 节点名称,也可以是变量 ${HOSTNAME}
    node.attr.rack: r1                               # 节点服务器所在的机柜信息,此配置可不设
    node.master: true                                # 定义该节点是否有资格被选举成主节点,默认是true,es是默认集群中的第一台机器为master,如果这台机器挂了就会重新选举master
    node.data: true                                  # 允许该节点存储数据(默认开启)
    
    network.host: ip_addr                            # elasticsearch 监听地址(默认为0.0.0.0)
    
    discovery.zen.ping.unicast.hosts:["host1:port", "host2:port", "host3:port"]    # elasticsearch 默认实现单播,在单播配置下,节点向指定的主机发送单播请求
    discovery.zen.minimum_master_nodes: 2            # 此设置应该始终被配置为 master 候选节点的法定个数(大多数个)。法定个数就是 ( master 候选节点个数 / 2) + 1 。
    
    bootstrap.memory_lock: true                      # 设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
    
    script.groovy.sandbox.enabled: false             # 该配置只有在安装 groovy 的插件之后才可以生效。否则es会报错
    
    action.auto_create_index: false                  # 如果你想禁止自动创建索引,你可以通过在 elasticsearch.yml 的每个节点下添加下面的配置(注:logstash 会使用事件中的时间戳来生成索引名,自动生成)
    action.destructive_requires_name: true           # 这个设置使删除只限于特定名称指向的数据,而不允许通过指定 _all 或通配符来删除指定索引库。你同样可以通过 Cluster State API 动态的更新这个设置
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    关于Discovery settings

    discovery.zen.ping.unicast.hosts:[“host1:port”, “host2:port”, “host3:port”] # elasticsearch 默认实现单播,在单播配置下,节点向指定的主机发送单播请求

    Elasticsearch将绑定到可用的环回地址,并将扫描端口9300到9305以尝试连接到运行在同一台服务器上的其他节点。 #这提供了自动集群体验,而无需进行任何配置。数组设置或逗号分隔的设置。每个值的形式应该是host:port或host #(如果没有设置,port默认设置会transport.profiles.default.port 回落到transport.tcp.port)

    补充:多播配置下,节点向集群发送多播请求,其他节点收到请求后会做出响应,但是组播会将所有当前网络中启动的节点都加入到集群中,强烈不推荐
    discovery.zen.ping.multicast.group:224.2.2.4 组地址
    discovery.zen.ping.multicast.port:54328 端口
    discovery.zen.ping.multicast.ttl:3 广播消息ttl
    discovery.zen.ping.multicast.address:null绑定的地址,null表示绑定所有可用的网络接口
    discovery.zen.ping.multicast.enabled:true 多播自动发现禁用开关

    关于内存错误

    memory locking requested for elasticsearch process but memory is not locked 这个报错说 elasticsearch 内存锁定失败

    如果要开启该参数,则配置:
    vim /etc/security/limit.conf

    tracker soft memlock unlimited
    tracker hard memlock unlimited
    
    • 1
    • 2

    关于 groovy 脚本

    通过设置集群中的所有节点的 elasticsearch.yml 文件来禁用动态 Groovy 脚本,防止动态 Groovy 脚本作为请求的一部分接受,或者从特殊的 .scripts 索引中被检索。当然,你仍然可以使用存储在每个节点的 config/scripts/ 目录下的 Groovy 脚本。


    四、三台es集群配置

    elasticsearch-1

    cluster.name: es_online_cluster
    node.name: ${HOSTNAME}
    node.data: true
    node.master: true
    path.data: /data/elasticsearch/es_data
    path.logs: /data/elasticsearch/es_logs
    bootstrap.memory_lock: true
    network.host: 10.81.90.235
    discovery.zen.ping.unicast.hosts: ["10.81.90.235:9300", "10.81.160.31:9300", "10.81.71.23:9300"]
    discovery.zen.minimum_master_nodes: 2
    action.destructive_requires_name: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    elasticsearch-2

    cluster.name: es_online_cluster
    node.name: ${HOSTNAME}
    node.data: true
    node.master: true
    path.data: /data/elasticsearch/es_data
    path.logs: /data/elasticsearch/es_logs
    bootstrap.memory_lock: true
    network.host: 10.81.160.31
    discovery.zen.ping.unicast.hosts: ["10.81.90.235:9300", "10.81.160.31:9300", "10.81.71.23:9300"]
    discovery.zen.minimum_master_nodes: 2
    action.destructive_requires_name: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    elasticsearch-3

    cluster.name: es_online_cluster
    node.name: ${HOSTNAME}
    node.data: true
    node.master: true
    path.data: /data/elasticsearch/es_data
    path.logs: /data/elasticsearch/es_logs
    bootstrap.memory_lock: true
    network.host: 10.81.71.23
    discovery.zen.ping.unicast.hosts: ["10.81.90.235:9300", "10.81.160.31:9300", "10.81.71.23:9300"]
    discovery.zen.minimum_master_nodes: 2
    action.destructive_requires_name: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    五、启动 elasticsearch 节点

    node1: /usr/local/elasticsearch-6.3.2/bin/elasticsearch -d
    node2: /usr/local/elasticsearch-6.3.2/bin/elasticsearch -d
    node3: /usr/local/elasticsearch-6.3.2/bin/elasticsearch -d
    
    • 1
    • 2
    • 3

    六、查看集群状态

    1、查看集群启动日志
    观察三台服务器的 /data/elasticsearch/es_logs/es_online_cluster.log 日志,看是否有报错

    2、查看集群状态
    下面是es默认自带的命令

    =^.^=
    /_cat/allocation
    /_cat/shards
    /_cat/shards/{index}
    /_cat/master
    /_cat/nodes
    /_cat/tasks
    /_cat/indices
    /_cat/indices/{index}
    /_cat/segments
    /_cat/segments/{index}
    /_cat/count
    /_cat/count/{index}
    /_cat/recovery
    /_cat/recovery/{index}
    /_cat/health
    /_cat/pending_tasks
    /_cat/aliases
    /_cat/aliases/{alias}
    /_cat/thread_pool
    /_cat/thread_pool/{thread_pools}
    /_cat/plugins
    /_cat/fielddata
    /_cat/fielddata/{fields}
    /_cat/nodeattrs
    /_cat/repositories
    /_cat/snapshots/{repository}
    /_cat/templates
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    例如:查看节点状态
    curl http://xxx.xxx.com/_cat/nodesv

    ip           heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
    10.81.90.235            6          68   0    0.00    0.01     0.05 mdi       -      es-online-1
    10.81.160.31            6          65   0    0.00    0.01     0.05 mdi       -      es-online-2
    10.81.71.23             8          65   0    0.00    0.01     0.03 mdi       *      es-online-3
    
    • 1
    • 2
    • 3
    • 4

    例如:查看集群状态
    curl http://xxx.xxx.com/_cluster/healthpretty

    {
      "cluster_name" : "es_online_cluster",
      "status" : "green",
      "timed_out" : false,
      "number_of_nodes" : 3,
      "number_of_data_nodes" : 3,
      "active_primary_shards" : 0,
      "active_shards" : 0,
      "relocating_shards" : 0,
      "initializing_shards" : 0,
      "unassigned_shards" : 0,
      "delayed_unassigned_shards" : 0,
      "number_of_pending_tasks" : 0,
      "number_of_in_flight_fetch" : 0,
      "task_max_waiting_in_queue_millis" : 0,
      "active_shards_percent_as_number" : 100.0
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    TypeScript基础之模版字面量类型
    R²决定系数
    Mybatis-Plus 快速入门
    计算机病毒
    Python攻防-AndroidMainfest数据自动化解析
    数字音频工作站FL Studio 21中文版下载及电音编曲要用乐理吗 电音编曲步骤
    springboot+redis水果超市商城系统(源码+sql+论文报告)
    【Qt控件之QToolBox】介绍及使用
    李沐53_语言模型——自学笔记
    React的useLayoutEffect和useEffect执行时机有什么不同
  • 原文地址:https://blog.csdn.net/m0_67390969/article/details/126659116