基本概念
集群:一個或者多個elasticsearch節點組成的集合
索引:含有相同屬性的文檔集合,例如一個索引代表消費者數據,一個索引代表產品數據(相當于MySQL的database)
類型:索引可以定義一個或多個類型,通常定義有相同字段的文檔作為一個類型,文檔必須屬于一個類型(相當于MySQL的table)
文檔:文檔是可以被索引的基本數據單位,例如一個用戶的基本信息,一片文章的數據,他是整個es里最小的存儲單位(相當于MySQL的每一行具體的記錄)
單節點安裝
elasticsearch是基于java開發的,所以安裝之前需要先安裝版本大于等于1.8的jdk
jdk安裝:?下載---解壓---配置環境變量
下載地址:?https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,自己去這個地址下載,因為他會帶一個認證參數AuthParam
wget https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-i586.tar.gz?AuthParam=1551253769_ff54ba4acb29cacf09d358ec0798e55d
tar -zxvf jdk-8u201-linux-x64.tar.gz\?AuthParam\=1551253769_ff54ba4acb29cacf09d358ec0798e55d?
配置環境變量
sudo vi ~/.bash_profile
source ~/.bash_profile
elasticsearch安裝:?下載---解壓---配置---啟動
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz
tar -zxvf elasticsearch-6.6.2.tar.gz
sudo vi config/elasticsearch.yml
elasticsearch默認安裝后設置的內存是1GB,我這里只是自己的一個乞丐版本的服務器,內存比較小,我就只給他分配256M(根據自己情況使用配置,如果內存不夠的話,啟動過程中會提示已殺死這類提示)
vi config/jvm.options
ps: 更多具體配置可以在elasticsearch官網查看
啟動: elasticsearch可以接收用戶輸入的腳本并且執行,處于安全考慮,他不能root賬戶來啟動,不然會報下圖錯誤
所以我需要為elasticsearch新建一個系統運行賬號
groupadd?elasticsearch? ? ?//新建一個elasticsearch的用戶組
useradd -g?elasticsearch?elasticsearch? //在elasticsearch用戶組下面建立一個elasticsearch的用戶
將elasticsearch目錄的所有者給剛剛建立的賬號
chown -R elasticsearch:elasticsearch elasticsearch-6.6.2/
然后切換到剛剛的賬號啟動elasticsearch
su elasticsearch
./elasticsearch-6.6.2/bin/elasticsearch
啟動過程中可能會出現下面這類的錯誤提示
錯誤1:?elasticsearch這個用戶的最大打開線程數(3894)太低,至少增加到4096
解決:
1. 查看用戶最大打開線程數
ulimit -a
2. 切換到root用戶,編輯文件
vi /etc/security/limits.conf
在文件末尾加上下面配置
* 表示匹配所有用戶, nproc 表示配置最大打開線程數
3. 退出從新登錄后,再次查看,修改成功
錯誤2:?最大虛擬內存區域vm.max_map_count(65530)太低,至少增加到262144
解決:
在root賬號下修改配置文件
vi /etc/sysctl.conf
在末尾添加配置,值大于等于實體的262144就可以
添加完成后執行下面命令
sysctl -p
然后可以查看到成功修改成你設置的數字
上面問題解決后,切換成elasticsearch賬號,繼續啟動es,看到下圖的樣子證明就啟動成功了
驗證
瀏覽器輸入ip地址,加上自己在配置文件中配置的端口,比如我這里的9201訪問
我前面配置的host是0.0.0.0,所以可以用外網訪問,不需要外網訪問的話,就配置127.0.0.1或者對應的內網ip就行
安裝head插件
安裝好ES后,你就可以通過官網提供的相關命令開進行索引的創建,但是更多人還是習慣用界面直接操作.這個時候就可以用elasticsearch-head這個插件了.elasticsearch-head 是用于監控 ES 狀態的客戶端插件,包括數據可視化、執行增刪改查操作等(我就簡單暴露的把它理解成了像Navicat這類的工具).
git地址:?https://github.com/mobz/elasticsearch-head
安裝前準備
在上面地址說明中可以看到,安裝他需要npm包管理工具,所以先在系統下安裝一下node.js吧
nodejs下載地址:?https://nodejs.org/en/download/
長期維護的版本可能不包含最新版本最新特性,但是比較穩定,所以這里就用穩定的版本吧.可以選擇源碼安裝,就是可能坑有點多(被坑過一次的經歷),我這里就直接下載'編譯好的二進制文件',因為簡單嘛
wget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.xz? ? ?//下載
xz -d node-v10.15.3-linux-x64.tar.xz? ? ? ? ? ? //解壓xz格式
tar -xf node-v10.15.3-linux-x64.tar? ? ? ? //最終解壓
進入里面的bin目錄就可以看到已經編譯好的node和npm了,直接使用就好.
分別給他們設置個軟連方便全局使用node和npm命令
ln -s /opt/soft/node-v10.15.3-linux-x64/bin/node /usr/local/bin/
ln -s /opt/soft/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/
開始安裝head
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install? ? //知道node的應該明白這一步其實就是在下載安裝相關的依賴擴展
如果在安裝圖中的擴展的時候報錯了,就直接忽略他,執行下面命令
npm install phantomjs-prebuilt@2.1.16 --ignore-scripts? ? ? ? ?//執行這個命令前,先把node_modules/目錄下已經有的擴展全部刪除了
到這里先不要忙去執行 'npm run start' 運行,先修改一下配置文件吧
sudo vi Gruntfile.js
上面配置文件中可以修改head插件監聽的端口.默認是9100,我改成9101
sudo vi _site/app.js
上面配置文件中可以修改head訪問es的端口,這里改的端口需要和你es的一致
最開始我在配置es的時候,配置了兩個允許跨域的選項就是為了這里head能夠訪問es
npm run start? //啟動
啟動之前保證es是啟動的狀態, 如果不想占用終端,就在es啟動命令中添加一個 '-d'參數, 然后瀏覽器輸入http://localhost:9101訪問就可以,如果是云服務器,就用對應的ip地址替換localhost
ps: 在這個插件中我們就能界面化es的操作,還是比較方便的,但是也正因為方便,而且這個擁有各種刪除什么的權限,只能在開發階段的時候用,生產環境一定要關閉他
elasticsearch集群搭建
集群中包含三臺服務器,內網ip分別是
172.27.0.17(master)----主服務器,這也是上面步驟安裝的服務器
172.27.0.11(slave1)-----從服務器1
172.27.0.6 (slave2)-----從服務器2
按照前面的步驟分配在兩臺從服務器中安裝ES,注意下圖中是和主節點配置不一樣的地方
cluster.name: 集群名字必須一致
node.name: 從服務器節點名字(兩個從節點分別為slave1個slave2)
node.master: 是否為主節點
discovery.zen.ping.unicast.hosts: 節點向指定的主機發送單播請求,可以理解成尋找他的主節點,數組的形式證明可以多個,這里只有一個
三臺es服務器以及head插件都分別配置好并且啟動后,直接訪問head所在服務器以及監聽的端口,就能看到es集群了
IK分詞插件的安裝
詳細地址: https://github.com/medcl/elasticsearch-analysis-ik,上面有具體的安裝步驟
版本選擇
上圖是版本的選擇,我這里安裝的es版本是6.6.2,多以直接選擇ik的master版本
安裝
他提供了兩種安裝方式,第一種是去?https://github.com/medcl/elasticsearch-analysis-ik/releases這個地址下載對應的版本,然后在你自己的es目錄下的擴展插件目錄下,解壓出來就可以,第二種方式是直接用es安裝插件的運行命令,下面分別試一試
ps: 兩種安裝方式都記得切換到為es服務創建的賬號下進行操作,比如我這里切換到?elasticsearch 這個賬號
1. 下載的方式安裝
進入es的plugins目錄,創建ik目錄,下載ik分詞插件,解壓
wge?https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.2/elasticsearch-analysis-ik-6.6.2.zip
停止掉es服務重新啟動,在啟動的日志中,就可以看到是否加載了ik插件
2.? 命令的方式安裝
這種安裝方式需要需要es版本大于等于5.5.1,剛剛的安裝方式我是在集群的master節點安裝的,接下來我切換到slave1節點安裝
查看es運行狀態,如果運行中,直接停止
切換到es服務賬號,在es的bin目錄下執行安裝命令
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.2/elasticsearch-analysis-ik-6.6.2.zip
測試分詞器的分詞計劃
1. 默認的standard
2. 剛剛安裝的ik分詞器
可以看到,默認的standard是把每個字都單獨分開了,而ik_smart是只能的分解成了一些詞語,顯然后者比較適用