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