<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 167,  comments - 30,  trackbacks - 0
    公司內部使用elasticsearch已經有一年以上了,主要為后臺檢索提供服務,我們的視頻有千萬級別的數據量。
    一些復雜的檢索需求通過es很容易的就能很好的支持。相對其他組件來說還算穩定,中間也出現過一些小故障,通過網上提供的解決方案都順利的解決掉。

    首先簡要說明下es插件,我們用了head和bigdesk兩個插件。
    head是一個與es集群交互的web管理控制臺,github地址:https://github.com/mobz/elasticsearch-head
    bigdesk為es集群提供動態的圖表與統計數據的監控插件,github地址:https://github.com/lukas-vlcek/bigdesk
    另外還有一個es集群的管理工具,它提供了對es集群操作的API,github地址:https://github.com/lmenezes/elasticsearch-kopf

    本次故障原起是因發現了es插件bigdesk中有一臺主機采集不到監控數據,另外兩臺監控采集數據是正常的。
    查詢了日志,從5-30號之后因為一個索引分片未成功,導致這臺機器未正常采集到監控數據,通過head插件將該索引關閉,這里無法徹底刪除索引,所以登錄服務器將索引文件刪除。
    然后,想通過服務器重啟之后看能否正常監控到數據,這里有個疑問是為什么其他節點能采集到呢?
    es節點重啟過程參考:https://www.elastic.co/guide/en/elasticsearch/reference/2.0/restart-upgrade.html
    嘗試將問題機器10.130.91.74進行重啟,但是重啟過程總是提示9380端口被占用。
    本機上通過命令 lsof -i:9380進行查看,發現確實存在占用9380端口的進程,然后暫時將其kill掉。之后,繼續重啟,但是仍然提示端口被占用,繼續lsof查看并未發現有進程占用該端口了。
    org.elasticsearch.transport.BindTransportException: Failed to bind to [9380]
            at org.elasticsearch.transport.netty.NettyTransport.bindServerBootstrap(NettyTransport.java:422)
            at org.elasticsearch.transport.netty.NettyTransport.doStart(NettyTransport.java:283)
            at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:85)
            at org.elasticsearch.transport.TransportService.doStart(TransportService.java:153)
            at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:85)
            at org.elasticsearch.node.internal.InternalNode.start(InternalNode.java:257)
            at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:160)
            at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:248)
            at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32)
    Caused by: org.elasticsearch.common.netty.channel.ChannelException: Failed to bind to: /10.130.91.92:9380
            at org.elasticsearch.common.netty.bootstrap.ServerBootstrap.bind(ServerBootstrap.java:272)
            at org.elasticsearch.transport.netty.NettyTransport$1.onPortNumber(NettyTransport.java:413)
            at org.elasticsearch.common.transport.PortsRange.iterate(PortsRange.java:58)
            at org.elasticsearch.transport.netty.NettyTransport.bindServerBootstrap(NettyTransport.java:409)
             8 more
    Caused by: java.net.BindException: Cannot assign requested address
            at sun.nio.ch.Net.bind0(Native Method)
            at sun.nio.ch.Net.bind(Net.java:444)
            at sun.nio.ch.Net.bind(Net.java:436)
            at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)
            at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
            at org.elasticsearch.common.netty.channel.socket.nio.NioServerBoss$RegisterTask.run(NioServerBoss.java:193)
            at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.processTaskQueue(AbstractNioSelector.java:391)
            at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:315)
            at org.elasticsearch.common.netty.channel.socket.nio.NioServerBoss.run(NioServerBoss.java:42)
            at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
            at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
            at java.lang.Thread.run(Thread.java:745)
    [2017-07-21 16:03:55,598][INFO ][node                     ] [10.130.91.74] stopping 
    [2017-07-21 16:03:55,602][INFO ][node                     ] [10.130.91.74] stopped
    [2017-07-21 16:03:55,603][INFO ][node                     ] [10.130.91.74] closing 
    [2017-07-21 16:03:55,614][INFO ][node                     ] [10.130.91.74] closed

    實際根本原因是因es配置文件中一個很關鍵的屬性配置有誤導致,network.host配置成了其他node的IP,因為其他node正常運行中,9280、9380端口都是被占用的,所以會提示這個錯誤。但是配置過程中并沒有注意到network.host不是本機IP,直接修改了如下兩個參數:
    network.bind_host: 0.0.0.0
    network.publish_host: 10.130.91.92
    修改之后,es服務確實能夠啟動了,但是此時就出現整個集群掛了,無法提供服務,汗呀!
    主要原因還是因為沒有明白這些參數的含義貿然修改導致的故障。
    后來將配置回滾回去,對照其他es節點的配置,將network.host修改為本機IP,如果不配置則默認是localhost,啟動之后發現集群仍然無法使用。
    我們根據10.130.91.92上的es如下日志:
    [2017-07-21 16:00:25,882][INFO ][cluster.service          ] [10.130.91.92] removed {[10.130.91.74][EqwqlgtMSXORr1XVovSABw][cdn.oss.letv.com][inet[/10.130.91.74:9380]]{master=true},}, reason:
    zen-disco-node_failed([10.130.91.74][EqwqlgtMSXORr1XVovSABw][cdn.oss.letv.com][inet[/10.130.91.74:9380]]{master=true}), reason transport disconnected
    [2017-07-21 16:00:26,024][INFO ][cluster.routing          ] [10.130.91.92] delaying allocation for [44] unassigned shards, next check in [59.8s]
    [2017-07-21 16:11:35,764][WARN ][discovery.zen            ] [10.130.91.92] received join request from node [[10.130.91.74][f5SwMbYxTKyxBmiOHpqFGw][cdn.oss.letv.com][inet[/10.130.91.92:9380]]
    {master=true}], but found existing node [10.130.91.92][DYSZfClbQVaJj8CpofIb_g][cdn.oss.letv.com][inet[/10.130.91.92:9380]]{master=true} with same address, removing existing node
    [2017-07-21 16:11:35,764][INFO ][cluster.service          ] [10.130.91.92] removed {[10.130.91.92][DYSZfClbQVaJj8CpofIb_g][cdn.oss.letv.com][inet[/10.130.91.92:9380]]{master=true},}, added {
    [10.130.91.74][f5SwMbYxTKyxBmiOHpqFGw][cdn.oss.letv.com][inet[/10.130.91.92:9380]]{master=true},}, reason: zen-disco-receive(join from node[[10.130.91.74][f5SwMbYxTKyxBmiOHpqFGw][cdn.oss.let
    v.com][inet[/10.130.91.92:9380]]{master=true}])
    [2017-07-21 16:12:05,766][WARN ][discovery.zen.publish    ] [10.130.91.92] timed out waiting for all nodes to process published state [327] (timeout [30s], pending nodes: [[10.130.91.74][f5S
    wMbYxTKyxBmiOHpqFGw][cdn.oss.letv.com][inet[/10.130.91.92:9380]]{master=true}])
    [2017-07-21 16:12:05,767][INFO ][cluster.routing          ] [10.130.91.92] delaying allocation for [0] unassigned shards, next check in [0s]
    [2017-07-21 16:12:05,768][DEBUG][action.admin.cluster.node.stats] [10.130.91.92] failed to execute on node [D-n-v9E7TgKe8QEkD_en6w]
    java.lang.NullPointerException
    根據日志能看到:
    從10.130.91.74機器收到了請求,啟用了10.130.91.92:9380端口,但是,發現是10.130.91.92機器上存在了相同的地址,然后集群將10.130.91.92機器removing existing node從集群中刪除掉了。
    目前情況是三臺機器,2臺不可用,1臺可用,但是沒辦法選舉master了,因為配置中discovery.zen.minimum_master_nodes: 2 選舉master至少有2臺節點存活才可以。所以,現在是群龍無首了。
    最后,將網絡配置恢復正常,依次重啟每一臺服務器,es集群重新選舉master,集群由red狀態變為了green,服務可用。

    es網絡參數配置說明:
    設置綁定的ip地址,可以是ipv4或ipv6的,默認為0.0.0.0。 
    network.bind_host: 192.168.0.1  
    設置其它節點和該節點交互的ip地址,如果不設置它會自動判斷,值必須是個真實的ip地址。 
    network.publish_host: 192.168.0.1  
    這個參數是用來同時設置bind_host和publish_host上面兩個參數。 
    network.host: 192.168.0.1  

    總結:
    主要原因還是不夠細心+對配置不熟,實際端口被占用,日志中已經很明顯的體現出來了。
    通讀和理解所有的配置參數,做到心中有數,后續再遇到問題時,切記要冷靜處理,詳細讀取每一行日志,頭腦要清晰。
    同時,也因為這次故障汲取到一些經驗,知道了當網絡配置錯誤引起的問題以及es在這個過程中做了哪些事情。


    參考資料:
    http://www.cnblogs.com/xiaoheike/p/5750222.html
    http://rockelixir.iteye.com/blog/1883373
    https://www.elastic.co/guide/en/elasticsearch/reference/2.0/restart-upgrade.html
    https://github.com/mobz/elasticsearch-head
    https://github.com/lukas-vlcek/bigdesk
    posted on 2017-07-24 19:10 David1228 閱讀(11391) 評論(0)  編輯  收藏 所屬分類: JAVA 、J2EE 、ES

    <2017年7月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章檔案

    新聞分類

    新聞檔案

    相冊

    收藏夾

    Java

    Linux知識相關

    Spring相關

    云計算/Linux/虛擬化技術/

    友情博客

    多線程并發編程

    開源技術

    持久層技術相關

    搜索

    •  

    積分與排名

    • 積分 - 358541
    • 排名 - 154

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久国产免费福利永久| 亚洲中文字幕久久无码| 亚洲av无码不卡| 亚洲国产精品va在线播放| 亚洲精品无码成人片久久| 亚洲无线观看国产精品| 亚洲人成色7777在线观看| 久久91亚洲人成电影网站| 久久久久亚洲AV成人无码网站| 亚洲avav天堂av在线不卡| 亚洲高清不卡视频| 亚洲国产精品白丝在线观看| 亚洲娇小性xxxx| 99亚洲乱人伦aⅴ精品| 美女露隐私全部免费直播| 成年网站免费入口在线观看| 成人av片无码免费天天看| 美女视频黄a视频全免费网站色窝| 美女在线视频观看影院免费天天看| 91大神在线免费观看| 成年女人毛片免费视频| 国产免费av片在线无码免费看| 亚洲日本中文字幕一区二区三区| 亚洲乱亚洲乱妇无码麻豆| 亚洲一区二区成人| 2017亚洲男人天堂一| 免费VA在线观看无码| 成人爽a毛片免费| 1000部拍拍拍18免费网站| 青青草国产免费久久久下载| 亚洲精品线路一在线观看| 亚洲av永久无码精品漫画| 亚洲人成免费电影| 精品国产亚洲第一区二区三区| gogo免费在线观看| 免费无码中文字幕A级毛片| 国产成人免费爽爽爽视频| 亚洲精品无码你懂的网站| 97久久精品亚洲中文字幕无码| 亚洲精品精华液一区二区| 国产高清视频免费在线观看|