zoukankan      html  css  js  c++  java
  • Linux配置 ElasticSearch

    一、什么是ElasticSearch?

    一、什么是ES?
            ES是一个分布式使用RestFul风格的数据搜索引擎,并且ES是构建在Lucene框架之上,也就是说ES也是基于Lucene进行开发的搜索引擎框架
        /*    ES三大核心:
                Index
                    相当于关系型数据库中的库
                Type
                    相当于关系型数据库中的表
                Document
                    相当于关系型数据库中的表数据
        */
        
        !!!6.ES是基于Lucene开发的,但是Lucene和ES都是搜索引擎框架
            什么时候使用ES
            什么时候使用Lucene
            
        //    Lucene和ES的区别是什么?
                Lucene只是一个搜索架构,不能直接使用,如果需要使用Lucene则需要自己添加代码来实现搜索模块,也就是说必须要根据公司的业务逻辑来进行编码搜索代码
                ES已经把这些代码全部实现了(在Lucene基础上实现的),可以直接使用不再需要添加任何和架构有关的代码
                
            Lucene是当公司的需求比较繁琐,而且ES无法满足的时候才需要自己去编写Lucene的架构代码实现搜索功能,但是学习成本比较高
            ES几乎支持了市面上中小型企业的搜索需求,只要公司的业务搜索需求可以用ES来实现,就直接可以使用,不需要再自己对Lucene进行编码,实现起来非常简单,不需要学习成本,直接调用API就可以

    二、如何在Linux上配置ElasticSearch?

    二、ES的配置?
        ElasticSearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。
        ES是apache公司的,所以必须要配置jdk
        ES不要用最新版,因为ES的最新版必须要求jdk在11版本以上
        但是目前市面上所有的公司全部都在jdk8或者以下
    
        
            1.在linux上配置ES
            
            2配置jdk
                也可以从之前配置过的虚拟机中copy过来。。。
            
            3从官网中下载ES
            
            4.解压es的压缩包
                tar -zxvf es....
                    !!!!!从3.4--->3.6不要求手动输入,推荐使用复制粘贴!!!!
            
            
        
            5.使用系统用户 修改一些配置。。。
            
            6.增大linux上部署软件的内存和硬盘
                以下的配置一定要使用root用户(root的权限是最大的),否则没有权限或者配置不生效
                (不要求手写,直接复制即可)
                
                //使用root用户 配置 
                
            7    vim /etc/security/limits.conf
                /*
                    vim /etc/security/limits.conf
                
                */
                
                
                配置了某个用户/某些用户对软件的内存和硬盘使用权限
        /*        * soft nproc 655350
                * soft nofile 655350
                * hard nproc 655350
                * hard nofile 655350
            */

    8最大线程数
            (ES一般情况是以集群启动,所以目前的用户无法满足ES所要创建的线程,所以需要加大线程数)
            这里只是配置系统可容纳最大的线程数,默认系统都有自动保护,不会开启很大的线程数,需要手动修改
                
                vim /etc/sysctl.conf
            /*
                vim /etc/sysctl.conf
                
                vm.max_map_count=262144
            */    
            

        
            9配置用户最大的线程数
                vim /etc/security/limits.d/90-nproc.conf
            /*
                vim /etc/security/limits.d/90-nproc.conf
                vim /etc/security/limits.d/90-nproc.conf
                vim /etc/security/limits.d/90-nproc.conf
                vim /etc/security/limits.d/90-nproc.conf
            
            */    
                
                需要把* 1024--->4096

    10.使修改永久生效。
        sysctl -p

            
        启动     ./elasticsearch  需要切换用户  
        
        11创建用户的命令:
        /*
            adduser 名字
            passwd   
            
            
            useradd 名字
            passwd 
        
        */
    
    
        12.给用户授权的命令:
        //        chown -R esuser  /home/apps/elasticsearch-6.4.0/
        /*
            chown -R esuser 需要授权的路径
            
            chown -R esuser /home/apps/elasticsearch-6.4.0/
            chown -R esuser /home/apps/elasticsearch-xxxx
            chown -R esuser /home/apps/elasticsearch-xxxx
            
        */
        
        
        !!!注意一定要给用户授权 ,否则会报错
    
        
        你如果想要用esuser  用户登录   就需要给他赋予权限。。。。
        需要对 esuesr 用户进行授权的操作。。。
    
    
        
        13.切换用户 ? 为什么?  
        1.ES为了自我保护,不让使用root用户启动,因为root用户权限过大,容易修改ES自己配置
            /*
                su 需要切换的用户名。
                su esuser 
                su haha
                su xixi
                
        
            */
        14直接启动es
                在bin目录
                ./elasticsearch
                报错!!!!  
            
        15修改elasticSeach.yml配置文件即可
            
        //在conf
                # 修改集群名字(名字随便起,没有什么意义)
                cluster.name: my-cluster
                
                # 如果是单节点(名字随便起,如果是集群则不能重复)
                node.name: node-1
                
                # ES所存放数据的位置(默认data目录不存在,需要自己手动创建  mkdir data   cd data  pwd 获得路径!)
                path.data: /home/apps/elasticsearch-6.4.0/data
                
                # ES的日志存放目录(默认已经存在,直接使用即可,不需要创建)
                path.logs: /home/apps/elasticsearch-6.4.0/logs
                
                # 放开ES的内存锁,让ES直接拥有最大内存使用权
                bootstrap.memory_lock: false
                
                # centos6中没有CONFIG_SECCOMP_FILTER,但是centos7中有,如果linux系统为centos6则需要关闭过滤
                bootstrap.system_call_filter: false
                
                # ES的主机地址(一旦配置的是0,就是代表所有的电脑都可以连接(对连接不再造成任何限制))
                network.host: 192.168.23.136(0.0.0.0)
                
                # ES的默认端口号(./elasticsearch -d(启动的是ES的控制台))
                http.port: 9200
                
                # 识别其他的集群host(如果为单节点只需要写一个)
                discovery.zen.ping.unicast.hosts: ["192.168.132.141"]
                
                多个的写法。。。
                discovery.zen.ping.unicast.hosts: ["192.168.23.136","",""]

        16.启动ES
                进入bin目录
                ./elasticsearch
            /*
                ./elasticsearch
                ./elasticsearch 
                ./elasticaearch
                
            */    
            
        3.11.浏览器中检测是否启动成功
                使用浏览器访问ip:端口号
                http://192.168.132.141:9200/
                {
                  "name" : "node-1",
                  "cluster_name" : "my-cluster",
                  "cluster_uuid" : "UmoHkEZzReGQMrrLShhDIQ",
                  "version" : {
                    "number" : "6.4.0",
                    "build_flavor" : "default",
                    "build_type" : "tar",
                    "build_hash" : "595516e",
                    "build_date" : "2018-08-17T23:18:47.308994Z",
                    "build_snapshot" : false,
                    "lucene_version" : "7.4.0",
                    "minimum_wire_compatibility_version" : "5.6.0",
                    "minimum_index_compatibility_version" : "5.0.0"
                  },
                  "tagline" : "You Know, for Search"
                }
    
        4.    关闭 elasticsearch 进程?
            4.1 查找es 的进程号
            //    ps -ef |grep elastic
            
            ps -ef |grep elastic
            kill -9 7167
                
            // kill -9 5866(端口号)
            
            4.2 重启?
                在 bin目录下 执行命令
                sh elasticsearch -d
                

    五、配置ES所遇到的问题:

    1.ES为了自我保护,不让使用root用户启动,因为root用户权限过大,容易修改ES自己配置
            创建新的用户并且授权
            useradd esuser
            passwd esuser ---> 123456
            
            授权:
                chown -R esuser /home/apps/elasticsearch
                
        2.因为ES需要消耗非常大的线程数量和内存以及硬盘存储空间
            [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
            [1]:当前启动用户无法对linux系统调动很多的硬盘以及内存存储空间,所以需要自行修改!
            vi /etc/security/limits.conf
            
            [2]: max number of threads [1024] for user [esuser] is too low, increase to at least [4096]
            [2]:当前启动的用户太low了,无法调动很多的线程(默认只能调动1024)
                vi /etc/secrity/limits.d/90-nproc.conf
                
            [3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
            [3]:需要配置vim /etc/sysctl.conf文件,加大系统默认的总线程数
            
        3.使用创建出新用户启动没有问题,但是当使用root用户启动一次后,再使用新创建的用户启动就有问题
            新创建的用户无法使用root用户所创建出的文件
            无论是使用哪一个用户启动都会在config文件夹中创建elasticsearch.keystore文件,root用户权限太大,创建的文件其他用户无法使用,所以会报错!
            
        4.java.lang.UnsupportedOperationException: seccomp unavailable: CONFIG_SECCOMP not compiled     into kernel, CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER are needed
            因为最终CONFIG_SECCOMP系统在centos7中默认会被加载,但是在centos6中没有
            需要更换centos的版本
            6---->7
            修改es的配置文件
            在yml配置文件中添加一行数据
            
            bootstrap.system_call_filter: false

    六、附带.SQl语句的调优问题

    1.附带.SQl语句的调优问题。
                        /*            
                        1.尽量避免非操作符的使用
    
                            在索引使用NOT ,<>,会导致索引失效,比如a不等于0 a<>0可以修改为 a>0 or a<0 ,NOT修改为a>0或者a>"",避免全表扫描
    
                        2.尽量避免使用前导模糊查询,因为前导模糊查询由%,不能利用索引,影响查询效率.
    
                        3.避免对查询列的操作
    
                            操作包含:数据库函数,计算机表达式,这样会导致全表扫描
    
                        4.避免不必要的类型转换
    
                            这里的类型转换是潜在的类型转换,比如将字符串与数字类型比较,这样会将字符串进行转换,导致全表扫描.
    
                        5.增加查询范围的限制
        
                            少使用*,
    
                        6.合理使用in与exists
    
                            exists是循环的方式,外表记录数代表循环的次数,外表的记录少,适合用它.
    
                            in先执行子查询,子查询去重之后,然后在执行主查询,子查询返回结果越少,越适合这种方式.
    
                            如果两张表数据一样大,那么用in和exists差别不大,但是如果不一样大,子查询小的用in,主查询小的用exists.
    
                        7.规范所有关键字的书写,select ,update,delete,要么全大写要不全小写
                        */
  • 相关阅读:
    git apply、git am打补丁.diff 和 .patch【转】
    RK3288 GPIO 输出问题【转】
    [RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】
    [RK3288][Android6.0] 调试笔记 --- 系统识别不同硬件版本方法【转】
    Android驱动开发之earlysuspend睡眠模式--实现代码【转】
    触摸屏唤醒实现【转】
    强加密RNGCryptoServiceProvider
    java中有类似C#里ref或out的功能吗?
    mysql中char与varchar的区别分析
    JVM再了解了解
  • 原文地址:https://www.cnblogs.com/ZXF6/p/11503929.html
Copyright © 2011-2022 走看看