搭建Elasticsearch集群常見問題


一、ES安裝方法:

Linux用戶登錄(bae),我們用的是5.3版本的包。從官網下載:

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz

解壓后,進入到bin目錄下,使用 ./elasticsearch 命令啟動,看到如下的提示,即為啟動成功。端口號9200.

二、ES單節點部署遇到的問題

1.記住不要在root下啟動,否則會報錯:can not run elasticsearch as root

2.如果是在root下下載的elasticsearch,可能會報下面的錯誤:

main ERROR Could not register mbeans Java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")

【解決】:改變elasticsearch文件夾所有者到當前用戶

sudo chown -R bae:bae elasticsearch

3. jdk的版本要在1.8以上

4.錯誤:

ERROR: bootstrap checks failed
max file descriptors [10240] for elasticsearch process is too low, increase to at least [65536]
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
[2017-05-09T21:34:03,914][INFO ][o.e.n.Node               ] [m1-hic-ssd-bae03] stopping ...
[2017-05-09T21:34:03,946][INFO ][o.e.n.Node               ] [m1-hic-ssd-bae03] stopped
[2017-05-09T21:34:03,946][INFO ][o.e.n.Node               ] [m1-hic-ssd-bae03] closing ...
[2017-05-09T21:34:03,960][INFO ][o.e.n.Node               ] [m1-hic-ssd-bae03] closed

【解決方法】:

切換到root用戶, vi /etc/security/limits.conf

添加如下內容:

* soft nofile 65536
 
* hard nofile 131072
 
* soft nproc 2048
 
* hard nproc 4096
#下面的work是用戶名,用哪個用戶啟動es,就配置成對應的用戶名
work soft memlock unlimited
 
work hard memlock unlimited
vi /etc/security/limits.d/90-nproc.conf 
修改如下內容: * soft nproc 1024 
#修改為 * soft nproc 2048

   vi /etc/sysctl.conf  

添加下面配置:vm.max_map_count=655360
並執行命令: sysctl -p

執行上述sysctl -p命令可能會遇到如下錯誤:

net.ipv4.ip_forward = 0  
net.ipv4.conf.default.rp_filter = 1  
net.ipv4.conf.default.accept_source_route = 0  
kernel.sysrq = 0  
kernel.core_uses_pid = 1  
net.ipv4.tcp_syncookies = 1  
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key  
error: "net.bridge.bridge-nf-call-iptables" is an unknown key  
error: "net.bridge.bridge-nf-call-arptables" is an unknown key  
kernel.msgmnb = 65536  
kernel.msgmax = 65536  
kernel.shmmax = 68719476736  
kernel.shmall = 4294967296  

錯誤的原因是3個bridge模塊未加載。可以先執行命令,

modprobe bridge

然后再執行sysctl -p命令

重啟elasticsearch。此處備注一下es的啟動,可以在bin目錄下直接執行./elasticsearch,但是有一個問題,終端關閉之后,elasticsearch這個進程就被殺掉了。此時,可以使用如下命令啟動 

nohup ./elasticsearch &

 

5. 報錯:

ERROR: bootstrap checks failed
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

【解決】:

在elasticsearch.yml中配置bootstrap.system_call_filter為false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

【錯誤原因】:

這是在因為Centos6不支持SecComp,而ES5.2.0默認bootstrap.system_call_filter為true進行檢測,所以導致檢測失敗,失敗后直接導致ES不能啟動。

 

三、ES集群配置

多機集群中的節點可以分為master nodes和data nodes,在配置文件中使用Zen發現(Zen discovery)機制來管理不同節點。Zen發現是ES自帶的默認發現機制,使用多播發現其它節點。只要啟動一個新的ES節點並設置和集群相同的名稱這個節點就會被加入到集群中。

Elasticsearch集群中有的節點一般有三種角色:master node、data node和client node。

  1. master node:master幾點主要用於元數據(metadata)的處理,比如索引的新增、刪除、分片分配等。
  2. data node:data 節點上保存了數據分片。它負責數據相關操作,比如分片的 CRUD,以及搜索和整合操作。這些操作都比較消耗 CPU、內存和 I/O 資源;
  3. client node:client 節點起到路由請求的作用,實際上可以看做負載均衡器。

我們選m1這台機器作為client node,elasticsearch.yml中的配置如下:

cluster.name: mkt-es-cluster
node.name: ${HOSTNAME}
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["10.**.**.**"]

在m2上配置elasticsearch.yml:

cluster.name: mkt-es-cluster
node.name: ${HOSTNAME}
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["10.**.**.**"]

我們在任意一台機器上請求:curl 'localhost:9200/_cat/health?v'

我們可以看到,標志着集群狀態的status顯示為green,節點個數為2個。

四、安裝中文分詞器ik

1.下載安裝包https://github.com/medcl/elasticsearch-analysis-ik/releases

有針對不同es版本的安裝包,需要下載與所安裝的es版本匹配的安裝包。我們還是用5.3.0版本.zip格式的好了。

2.在elasticsearch/plugins目錄下新建ik目錄,將zip包拷貝到ik目錄下,解壓。

3.重啟elasticsearch

4.注意事項:如果是搭建的集群,需要在每個節點下都安裝ik

5.調用下面的url 

GET _analyze
{
  "analyzer":"ik_max_word",
  "text":"中華人民共和國國歌"
}

會得到下面結果:

{
  "tokens": [
    {
      "token": "中華人民共和國",
      "start_offset": 0,
      "end_offset": 7,
      "type": "CN_WORD",
      "position": 0
    },
    {
      "token": "中華人民",
      "start_offset": 0,
      "end_offset": 4,
      "type": "CN_WORD",
      "position": 1
    },
    {
      "token": "中華",
      "start_offset": 0,
      "end_offset": 2,
      "type": "CN_WORD",
      "position": 2
    },
    {
      "token": "華人",
      "start_offset": 1,
      "end_offset": 3,
      "type": "CN_WORD",
      "position": 3
    },
    {
      "token": "人民共和國",
      "start_offset": 2,
      "end_offset": 7,
      "type": "CN_WORD",
      "position": 4
    },
    {
      "token": "人民",
      "start_offset": 2,
      "end_offset": 4,
      "type": "CN_WORD",
      "position": 5
    },
    {
      "token": "共和國",
      "start_offset": 4,
      "end_offset": 7,
      "type": "CN_WORD",
      "position": 6
    },
    {
      "token": "共和",
      "start_offset": 4,
      "end_offset": 6,
      "type": "CN_WORD",
      "position": 7
    },
    {
      "token": "國",
      "start_offset": 6,
      "end_offset": 7,
      "type": "CN_CHAR",
      "position": 8
    },
    {
      "token": "國歌",
      "start_offset": 7,
      "end_offset": 9,
      "type": "CN_WORD",
      "position": 9
    }
  ]
}

或者通過postman采用這種方式:hz01-bae3-rdtest00.hz01.baidu.com:8920/_analyze?analyzer=ik_max_word&text= 我是好人

 

五、kibana掛掉了

問題表現:請求es機器集群信息:http://*******.com:8920/_cluster/health?pretty 

但是kibana上面status確實red,重啟都不行。顯示如下:

先恢復一下數據吧,參照下面鏈接:

https://stackoverflow.com/questions/42376101/getting-plugin-is-red-error-when-launching-kibana

刪掉es的每個節點下data/es/  里面的所有數據,重啟每個節點。就ok了。

具體原因參考下面鏈接:(其實就是我不知道怎么的吧.kibana這個索引刪掉了)

https://stackoverflow.com/questions/31201051/elasticsearch-is-still-initializing-the-kibana-index

 


免責聲明!

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



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