美文网首页
Elasticsearch学习篇第一章:Elasticsearc

Elasticsearch学习篇第一章:Elasticsearc

作者: thinking2019 | 来源:发表于2020-08-29 08:33 被阅读0次

    其实准备了解Elasticsearch已经好几天了,本以为它跟我之前的软件一样,安装、集群配置、api demo就完事了,我这是看了好几天了,都没有头绪,主要是安装简单、操作复杂,知识点也很多,我计划可能有很多章去学习;白天都要上班,天生不喜欢偷懒,还好工作地方相隔比较近,有几个小时的时间好好放松哈,晚上再学习二个小时。
    如果慢了,不要介意,不要退关哈!!我也是想坚持做一件事,活了人生三分之一,还不知道坚持的滋味,想好好尝尝。。。
    千里之行始于足下,咋们就开始了。。。

    安装步骤

    1.由于elasticsearch 5.0 以及以后版本 使用了Java lambda表达式等新特性,因此jdk 版本必须是1.8 以上版本(含1.8)

    # jdk下载连接
    链接:https://pan.baidu.com/s/1gyHQPUT2zPtXnwLb6sLTbg 
    提取码:8hv8
    # 安装流程
    tar -zxvf jdk-8u11-linux-x64.tar.gz
    mv jdk1.8.0_11/ /usr/local/
    cd /usr/local/
    mv jdk1.8.0_11 jdk8
    vim /etc/profile
    
    # 在profile最后添加
    export JAVA_HOME=/usr/local/jdk8
    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin
    
    # 执行生效 
    source /etc/profile
    # 验证
    java -version
    

    2.elasticsearch的安装包下载
    (1)下载连接

    # 可以查看最新版本下载
    https://www.elastic.co/cn/downloads/elasticsearch
    
    # 提供百度网盘下载- elasticsearch-7.9.0-linux-x86_64.tar
    链接:https://pan.baidu.com/s/1daGOb_Rp7yrcidFIZqM2YQ 
    提取码:nuk7
    

    3.elasticsearch的安装过程

    tar -zxvf elasticsearch-7.9.0-linux-x86_64.tar.gz
    # 个人习惯
    mv elasticsearch-7.9.0 /usr/local/
    cd /usr/local/elasticsearch-7.9.0
    
    # 必须修改 config中的文件
    vim config/elasticsearch.yml
    #  network.host: 192.168.225.136  --- 本机的ip,为了通过ip访问
    

    4.启动

    ./bin/elasticsearch
    
    # 启动报错看后面的错误处理方法
    

    配置介绍

    1.config/elasticsearch.yml

    #集群名称
    cluster.name: my-application
    #节点名称
    node.name: node-1
    #是不是主节点
    node.master: true
    # 节点服务器所在的机柜信息,此配置可不设
    node.attr.rack: r1
    # 存放数据的路径
    path.data: /data/elasticsearch/es_data
    # 存放日志的路径
    path.logs: /data/elasticsearch/es_logs
    # 设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,
    # 当jvm开始swapping时es的效率会降低,频繁的交换,会导致IOPS变高
    bootstrap.memory_lock: true
    #网关地址
    network.host: 192.168.225.136
    #端口
    http.port: 9200
    # 配置该节点会与哪些候选地址进行通信,hostname,ip ,ip+port
    discovery.seed_hosts: ["host1", "host2"]
    # 集群初始化的提供的master候选地址,第一次启动时将从该列表中获取master
    cluster.initial_master_nodes: ["node1"]
    #内部节点之间沟通端口
    transport.tcp.port: 9301
    #时间放长,防止脑裂
    # 控制节点加入某个集群或者开始选举的响应时间(默认3s)
    discovery.zen.ping_timeout: 120s
    #配置有机会参与选举为master的节点
    discovery.zen.ping.unicast.hosts: ["192.168.1.124:9200","192.168.1.124:9201", "192.168.1.124:9202"]
    #最大集群节点数
    node.max_local_storage_nodes: 3
    

    TransportClient类的可用配置

    # 默认值为false,当设置为true时,ES会读取集群中的节点信息
    client.transport.sniff: false
    # 默认值为false,当设置为true时,ES会忽视配置中的集群名称并尝试连接
    # 到某个可连接集群上,而不管集群名称是否匹配。
    client.transport.ignore_cluster_name: false
    # 默认为5s,此参数指定了ping命令响应的超时时间
    client.transport.ping_timeout: 60s
    # 默认为5s,此参数指定了检查节点可用性的时间间隔。
    client.reansport.nodes_sampler_interval: 5s
    

    http.cors.x

    http.cors.enabled  #是否支持跨域,默认为false
    http.cors.allow-origin  当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。比如只允许本地地址。/https?:\/\/localhost(:[0-9]+)?/
    http.cors.max-age  浏览器发送一个“预检”OPTIONS请求,以确定CORS设置。最大年龄定义多久的结果应该缓存。默认为1728000(20天)
    http.cors.allow-methods  允许跨域的请求方式,默认OPTIONS,HEAD,GET,POST,PUT,DELETE
    http.cors.allow-headers  跨域允许设置的头信息,默认为X-Requested-With,Content-Type,Content-Length
    http.cors.allow-credentials  是否返回设置的跨域Access-Control-Allow-Credentials头,如果设置为true,那么会返回给客户端。
    

    Network

    # 该节点的网络访问ip -- 这个参数是用来同时设置bind_host和publish_host上面两个参数
    network.host: 192.168.0.1
    # 设置节点之间通信的端口
    transport.tcp.port: 9300
    # 设置是否压缩tcp传输时的数据,默认为false,不压缩。
    transport.tcp.compress: true
    # 定义http传输监听的端口
    http.port: 9200
    # 设置http交互中传输内容的最大长度
    http.max_content_length: 100mb
    # 是否使用http协议对外提供服务,默认为true,开启。
    http.enabled: false
    

    Gateway

    # gateway的类型,默认为local即为本地文件系统,
    # 可以设置为本地文件系统,分布式文件系统,Hadoop的HDFS,
    # 和amazon的s3服务器
    gateway.type: local
    # 控制集群在达到多少个节点之后才会开始数据恢复,
    # 通过这个设置可以避免集群自动相互发现的初期,shard分片不全的问题,
    # 假如es集群内一共有5个节点,就可以设置为5,那么这个集群必须有5个节点启动后才会开始数据分片,
    # 如果设置为3,就有可能另外两个节点没存储数据分片
    gateway.recover_after_nodes: 1
    # 初始化数据恢复的超时时间,假如gateway.recover_after_nodes参数设置为5,
    # 就是5个节点全部启动后,再过5分钟开始数据恢复 
    gateway.recover_after_time: 5m
    #启动几个节点后开始数据恢复,假如gateway.recover_after_nodes这个参数设置为5,
    # 那么等到这5个节点全部启动后直接可以数据恢复,
    # 不用等待gateway.recover_after_time设置的时间
    gateway.expected_nodes: 2
    

    其他配置

    https://blog.csdn.net/Dengrz/article/details/107210322
    https://www.cnblogs.com/chadiandianwenrou/p/6427989.html
    

    2.jvm.options

    # 设置内存
    -Xms256m
    -Xmx256m
    

    错误处理

    1.错误1

    java.lang.RuntimeException: can not run elasticsearch as root
    
    这个错误很明显,就是不能在root角色下启动,也是为了安全起见
    
    # 添加linux用户
    # 添加一个用户为els01
    useradd els01
    # 密码设置成123,两次输入
    passwd els01
    # 用户切换
    su els01
    
    # root用户给els01授权文件夹
    chown chown -R els01:els01 /usr/local/elasticsearch-7.9.0
    

    2.启动中报错,需要修改配置,下面是4个错误

    ERROR: [4] bootstrap checks failed
    [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
    [2]: max number of threads [3791] for user [els01] is too low, increase to at least [4096]
    [3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    [4]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.
    seed_providers, cluster.initial_master_nodes] must be configured
    

    (1)max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

    # 在root用户中修改
    vim /etc/security/limits.conf
    # 在最后添加
    # * 表示匹配所有用户, nofile表示用户可以打开文件的最大数目
    *     soft    nofile          65536
    *     hard    nofile          65536
    
    # 保存重启才能生效
    # 验证
    ulimit -Hu
    ulimit -Su
    

    (2)max number of threads [3791] for user [els01] is too low, increase to at least [4096]

    # 在root用户中修改
    vim /etc/security/limits.conf
    # 在最后添加
    # * 表示匹配所有用户, nofile表示配置最大打开线程数
    *     soft    nproc       4096
    *     hard    nproc       4096
    
    # 保存重启才能生效
    # 验证
    ulimit -Hn
    ulimit -Sn
    # 看max user processes 字段
    ulimit -a
    
    # 特殊情况:
    修改上述的之后,普通用户和root执行ulimit -a 显示的max user processes不一样
    这里需要修改 /etc/security/limits.d/20-nproc.conf
    *     soft    nproc       4096
    

    (3)max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

    # 在root用户中修改
    vi /etc/sysctl.conf
    # 增加
    vm.max_map_count = 262144
    
    # 保存后立即生效
    sysctl -p
    # 验证
    sysctl -a|grep vm.max_map_count
    

    (4)the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

    # 错误解释
    # 在config/elasticsearch.yml中配置以下三者,最少其一
    #[discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes]
    
    # 我这里修改的是:node1是节点的node-name的值
    cluster.initial_master_nodes: ["node1"]
    

    3.启动报错

    ERROR: [1] bootstrap checks failed
    [1]: memory locking requested for elasticsearch process but memory is not locked
    

    解决方法

    # 在/etc/security/limits.conf中增加
    * hard memlock unlimited
    * soft memlock unlimited
    # 修改/etc/systemd/system.conf
    DefaultLimitNOFILE=65536
    DefaultLimitNPROC=32000
    DefaultLimitMEMLOCK=infinity
    # 立即生效
    1.在/etc/security/limits.conf中增加
    /bin/systemctl daemon-reload
    

    相关文章

      网友评论

          本文标题:Elasticsearch学习篇第一章:Elasticsearc

          本文链接:https://www.haomeiwen.com/subject/qisdsktx.html