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,要么全大寫要不全小寫
                    */

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM