cluster.routing.allocation.same_shard.host:true
這會防止同一個shard的主副本存在同一個物理機上(由於若是存在一個機器上,副本的高可用性就沒有了)。
swapping是性能的墳墓
這是顯而易見的,可是仍是有必要說的更清楚一點,內存交換到磁盤對服務器性能來講是致命的。想一想看一個內存的操做必須是快速的。
若是內存交換到磁盤上,一個100微秒的操做可能變成10毫秒,再想一想那麼多10微秒的操做時延累加起來。不難看出swapping對於性能是多麼可怕。
最好的辦法就是在你的操做系統中徹底禁用swapping。這樣能夠暫時禁用:bootstrap
swapoff -a
爲了永久禁用它,你可能須要修改/etc/fstab文件,這要參考你的操做系統相關文檔。
若是徹底禁用swap,對你來講是不可行的。你能夠下降swappiness 的值,這個值決定操做系統交換內存的頻率。這能夠預防正常狀況下發生交換。但仍容許os在緊急狀況下發生交換。
對於大部分Linux操做系統,能夠在sysctl 中這樣配置:服務器
vm.swappiness = 1
備註:swappiness設置爲1比設置爲0要好,由於在一些內核版本,swappness=0會引起OOM(內存溢出)app
簡單地說這個參數定義了系統對swap的使用傾向,默認值爲60,值越大表示越傾向於使用swap。能夠設爲0,這樣作並不會禁止對swap的使用,只是最大限度地下降了使用swap的可能性。elasticsearch
經過sysctl -q vm.swappiness能夠查看參數的當前設置。性能
修改參數的方法是修改/etc/sysctl.conf文件,加入vm.swappiness=xxx,並重起系統。這個操做至關因而修改虛擬系統中的/proc/sys/vm/swappiness文件,將值改成XXX數值。spa
若是不想重起,能夠經過sysctl -p動態加載/etc/sysctl.conf文件,但建議這樣作以前先清空swap。操作系統
最後,若是上面的方法都不能作到,你須要打開配置文件中的mlockall開關,它的做用就是運行JVM鎖住內存,禁止OS交換出去。在elasticsearch.yml配置以下:內存
bootstrap.mlockall: true