自定義副本分片和索引
1、注意事項
索引一旦建立完成,分片數就不可以修改了
但是副本數可以隨時修改
2、創建索引的時候就自定義副本和分片
PUT /yayayaay/
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 0
}
}
3、修改單個索引的副本數
PUT /oldzhang/_settings/
{
"settings": {
"number_of_replicas": 0
}
}
4、修改所有的索引的副本數
PUT /_all/_settings/
{
"settings": {
"number_of_replicas": 0
}
}
5、工作生成如何設置
2個節點: 默認就可以
3個節點: 重要的數據,2副本 不重要的默認
日誌收集: 1副本3分片
ES監控
1、監控注意
0.不能只監控集羣狀態
1.監控節點數
2.監控集羣狀態
3.兩者任意一個發生改變了都報警
2、監控命令
GET _cat/nodes
GET _cat/health
命令行監控:
查看集羣健康狀態
curl -s 127.0.0.1:9200/_cat/health |grep "green"|wc -l
查看節點個數
curl -s 127.0.0.1:9200/_cat/nodes|wc -l
集羣健康狀態不爲green 或者 節點個數不爲3
滿足兩個其中的一個條件 就報警
使用zabbix監控和kibana結合使用
使用kibana的monitoring進行監控
測試:
elastic search 的優化
官方參考
總結:
1、禁用交換分區
關閉swap分區
配置問文件打開內存鎖定參數
2、虛擬內存的設置
1.內存
不要超過32G 超過32G的話 性能不升反降(官方建議)
1、系統建議預留一半
2、每個ES節點不要超過32G內存
官方的意思:如果性能不夠了 就加節點 加機器
48內存
系統留一半: 24G
自己留一半: 24G
8G 12G 16G 24G 30G
2.SSD硬盤
0 10 或者不做raid都可以 因爲有副本在保證
3.代碼優化
4.升級大版本
中文分詞器
1、安裝條件
所有的ES節點都需要安裝
所有的ES都需要重啓才能生效
2、安裝中文分詞器
在線安裝
cd /usr/share/elasticsearch
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip
離線本地安裝
鏈接:https://pan.baidu.com/s/1D_bA7Qhl4LY-yEljOL2W7w
提取碼:dfjf
/usr/share/elasticsearch/bin/elasticsearch-plugin install file:///XXX/elasticsearch-analysis-ik-6.6.0.zip
2、創建索引
PUT /news2
3、創建模板
POST /news2/text/_mapping
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
}
}
4、插入測試數據
POST /news2/text/1
{"content":"美國留給伊拉克的是個爛攤子嗎"}
POST /news2/text/2
{"content":"公安部:各地校車將享最高路權"}
POST /news2/text/3
{"content":"中韓漁警衝突調查:韓警平均每天扣1艘中國漁船"}
POST /news2/text/4
{"content":"中國駐洛杉磯領事館遭亞裔男子槍擊 嫌犯已自首"}
5、再次查詢數據發現已經能識別中文了
POST /news2/_search
{
"query" : { "match" : { "content" : "中國" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
6、再插入測試語句 查詢
POST /news/txt/1
{"content":"美國留給伊拉克的是個爛攤子嗎"}
POST /news/txt/2
{"content":"公安部:各地校車將享最高路權"}
POST /news/txt/3
{"content":"中韓漁警衝突調查:韓警平均每天扣1艘中國漁船"}
POST /news/txt/4
{"content":"中國駐洛杉磯領事館遭亞裔男子槍擊 嫌犯已自首"}
POST /news/_search
{
"query" : { "match" : { "content" : "中國" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
熱更新中文分詞庫
1、安裝nginx
cat >> /etc/yum.repos.d/nginx.repo<<EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/\$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
yum makecache fast
yum install nginx -y
2、編寫字典文件
cat >>/usr/share/nginx/html/my_dic.txt<<EOF
上海
班長
學委
張亞
胖虎
EOF
3、重啓nginx
nginx -t
systemctl restart nginx
4、配置es的中文分詞器插件
vim /etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 擴展配置</comment>
<!--用戶可以在這裏配置自己的擴展字典 -->
<entry key="ext_dict"></entry>
<!--用戶可以在這裏配置自己的擴展停止詞字典-->
<entry key="ext_stopwords"></entry>
<!--用戶可以在這裏配置遠程擴展字典 -->
<entry key="remote_ext_dict">http://10.0.0.51/my_dic.txt</entry>
<!--用戶可以在這裏配置遠程擴展停止詞字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
5、將修改好的LK配置文件複製到其他所有ES節點
cd /etc/elasticsearch/analysis-ik/
scp IKAnalyzer.cfg.xml 10.0.0.52:/etc/elasticsearch/analysis-ik/
6、重啓所有ES節點
systemctl restart elasticsearch.service
7、查看日誌裏字典的詞有沒有加載出來
[2020-02-12T14:56:38,610][INFO ][o.w.a.d.Monitor ] [node-1] 重新加載詞典...
[2020-02-12T14:56:38,611][INFO ][o.w.a.d.Monitor ] [node-1] try load config from /etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml
[2020-02-12T14:56:38,614][INFO ][o.w.a.d.Monitor ] [node-1] [Dict Loading] http://10.0.0.51/my_dic.txt
[2020-02-12T14:56:38,628][INFO ][o.w.a.d.Monitor ] [node-1] 上海
[2020-02-12T14:56:38,629][INFO ][o.w.a.d.Monitor ] [node-1] 班長
[2020-02-12T14:56:38,629][INFO ][o.w.a.d.Monitor ] [node-1] 學委
[2020-02-12T14:56:38,629][INFO ][o.w.a.d.Monitor ] [node-1] 張亞
[2020-02-12T14:56:38,629][INFO ][o.w.a.d.Monitor ] [node-1] 胖虎
[2020-02-12T14:56:38,629][INFO ][o.w.a.d.Monitor ] [node-1] 重新加載詞典完畢...
8、打開ES日誌,然後更新字典內容,查看日誌中會不會自動加載
echo "武漢" >> /usr/share/nginx/html/my_dic.txt
9、搜索測試驗證結果
POST /news2/text/7
{"content":"武漢加油!"}
POST /news2/_search
{
"query" : { "match" : { "content" : "武漢" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
10、電商上架新產品流程
先把新上架的商品的關鍵詞更新到詞典裏
查看ES日誌,確認新詞被動態更新了
自己編寫一個測試索引,插入測試數據,然後查看搜索結果
確認沒有問題之後,在讓開發插入新商品的數據
測試
備份與恢復
1、官方解決方案:做快照
2、第三方解決方案
鏈接:https://pan.baidu.com/s/1j9XDmZKMyr7xWMYCPV0Z2Q
提取碼:vjzb
複製這段內容後打開百度網盤手機App,操作更方便哦
1、前提條件
需要node環境
npm -v
node -v
2、nodejs安裝
https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-x64.tar.xz
tar xf node-v10.16.3-linux-x64.tar.xz -C /opt/node
echo "export PATH=/opt/node/bin:\$PATH" >> /etc/profile
source /etc/profile
npm -v
node -v
3、指定使用國內淘寶npm源
npm install -g cnpm --registry=https://registry.npm.taobao.org
4、安裝es-dump
cnpm install elasticdump -g
5、備份
備份成可讀點的json格式
elasticdump \
--input=http://10.0.0.51:9200/news2 \
--output=/data/news2.json \
--type=data
備份成壓縮格式
elasticdump \
--input=http://10.0.0.51:9200/news2 \
--output=$|gzip > /data/news2.json.gz
備份分詞器/mapping/數據一條龍服務
elasticdump \
--input=http://10.0.0.51:9200/news2 \
--output=/data/news2_analyzer.json \
--type=analyzer
elasticdump \
--input=http://10.0.0.51:9200/news2 \
--output=/data/news2_mapping.json \
--type=mapping
elasticdump \
--input=http://10.0.0.51:9200/news2 \
--output=/data/news2.json \
--type=data
恢復
只恢復數據
elasticdump \
--input=/data/news2.json \
--output=http://10.0.0.51:9200/news2
恢復所有數據包含分詞器/mapping一條龍
elasticdump \
--input=/data/news2_analyzer.json \
--output=http://10.0.0.51:9200/news2 \
--type=analyzer
elasticdump \
--input=/data/news2_mapping.json \
--output=http://10.0.0.51:9200/news2 \
--type=mapping
elasticdump \
--input=/data/news2.json \
--output=http://10.0.0.51:9200/news2
--type=data
批量處理備份
[root@localhost data]# curl -s 10.0.0.52:9200/_cat/indices|awk '{print $3}' |grep -v "^\."
oldzhang
news3
news4
website
news
news2
注意事項:
1、如果恢復的時候 數據衝突了,會被覆蓋掉
2、如果已經存在備份文件裏面沒有的數據,會保留下來