elasticsearch生產集羣部署-基礎配置

1、es的默認參數

es的默認參數是非常好的,適合絕大多數的情況,尤其是一些性能相關的配置。因此剛開始部署一個生產環境下的es集羣時,幾乎所有的配置參數都可以用默認的設置。有很多的生產環境場景下,都是因爲es集羣管理人員自己去調整es的某些配置,結果導致集羣出現了嚴重的故障,那些es集羣管理員甚至還以爲做出那些調節可以將es性能提升一百倍以上。

比如mysql或者oracle這種關係型數據庫,也許是需要非常重的調優,但是es是真的不用。如果我們現在面臨着一些es的性能問題,通常建議的解決方案是更好的進行數據結構的佈局,或者增加更多的節點和機器資源。在es的性能調優中,真的很少有那種magic knobs,就是某個參數一調節,直接性能提升上百倍。即使有這種參數,es官方也早就將其設置爲默認的最佳值了。

但是在生產環境中,還是有極少數跟公司和業務相關的配置是需要我們修改的。這些設置都是具體的公司和業務相關聯的,是沒法預先給予最好的默認配置的。

2、集羣名稱和節點名稱

默認情況下,es會啓動一個名稱爲elasticsearch的集羣。通常建議一定要將自己的集羣名稱重新進行命名,主要是避免公司網絡環境中,也許某個開發人員的開發機會無意中加入你的集羣。比如說將你的集羣名稱命名爲elasticsearch_production。在

elasticsearch.yml

中,可以設置集羣名稱:

cluster.name: elasticsearch_production。

此外,每個node啓動的時候,es也會分配一個隨機的名稱。這個也不適合在生產環境中,因爲這會導致我們沒法記住每臺機器。而且每次重啓節點都會隨機分配,就導致node名稱每次重啓都會變化。因此通常我們在生產環境中是需要給每個node都分配一個名稱的。在elasticsearch.yml中配置即可:

node.name: elasticsearch_005_data。

3、文件路徑

(1)數據目錄、日誌目錄以及插件目錄

默認情況下,es會將plugin,log,還有data ,config,file都放在es的安裝目錄中。這有一個問題,就是在進行es升級的時候,可能會導致這些目錄被覆蓋掉。導致我們丟失之前安裝好的plugin,已有的log,還有已有的數據,以及配置好的配置文件。

所以一般建議在生產環境中,必須將這些重要的文件路徑,都重新設置一下,放在es安裝目錄之外。path.data用於設置數據文件的目錄,path.logs用於設置日誌文件的目錄,path.plugins用於設置插件存放的目錄。path.data可以指定多個目錄,用逗號分隔即可。如果多個目錄在不同的磁盤上,那麼這就是一個最簡單的RAID 0的方式,將數據在本地進行條帶化存儲了,可以提升整體的磁盤讀寫性能。es會自動將數據在多個磁盤的多個目錄中條帶化存儲數據。

一般建議的目錄地址是:

mkdir -p /var/log/elasticsearch
mkdir -p /var/data/elasticsearch
mkdir -p /var/plugin/elasticsearch
mkdir -p /etc/elasticsearch

path.logs: /var/log/elasticsearch
path.data: /var/data/elasticsearch
path.plugins: /var/plugin/elasticsearch

config:/etc/elasticsearch

在RAID 0的存儲級別下,每個磁盤上回存儲一部分數據,但是如果一個磁盤故障了,那麼可能導致這臺機器上的部分數據就丟失了。如果我們的es是有replica的,那麼在其他機器上還是會有一份副本的。如果data file指定了多個目錄,爲了儘量減少數據丟失的風險,es會將某個shard的數據都分配到一個磁盤上去。這就意味着每個shard都僅僅會放在一個磁盤上。es不會將一個shard的數據條帶化存儲到多個磁盤上去,因爲如果一個磁盤丟失了,就會導致整個shard數據丟失。

但是這又引入了性能的問題,如果我們給一個機器添加更多的磁盤來提升單個索引的讀寫性能,是沒有效果的。因爲這個索引在這個機器上的shard僅僅存在於一個磁盤上。因此data file指定多個目錄,僅僅對於你的一臺機器上存儲了多個index的多個shard時,纔會有效果的。因爲不同index的shard可能就被存儲到不同的磁盤上去了,對多個index的shard讀寫可以走不同磁盤,提升了性能。

雖然multiple data path是一個很有用的功能,但是es畢竟不是一個專門的RAID軟件。如果我們要對RAID存儲策略進行更多的配置,提高存儲的健壯性以及靈活性,還是要用專門的RAID軟件來進行機器的磁盤數據存儲,而不是用multiple data path策略。

綜上所述,multiple data path功能在實際的生產環境中,其實是較少使用的。

(2)配置文件目錄

es有兩個配置文件,elasticsearch.yml,用於配置es,還有一個log4j.properties用來配置es日誌打印。這些文件都被放在config目錄下,默認就是ES_HOME/config。可以通過下面的命令來重新設置:

./bin/elasticsearch -Epath.conf=/path/to/my/config/。

配置文件的格式是yaml格式的,比如下面這種格式:

path:
    data: /var/lib/elasticsearch
    logs: /var/log/elasticsearch
    
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch

4、日誌配置

es使用log4j2來記錄日誌,log4j2可以通過log4j2.properties文件來進行配置。比如下面的這份配置文件:

appender.rolling.type = RollingFile 
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log 
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %.10000m%n
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}.log 
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy 
appender.rolling.policies.time.interval = 1 
appender.rolling.policies.time.modulate = true 

appender.rolling.type = RollingFile #配置了appender類型是RollingFile

appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log #配置了日誌路徑是/var/log/elasticsearch/production.log

appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}.log,#配置了將日誌每天寫一份到/var/log/elasticsearch/production-2017-01-01.log文件中

appender.rolling.policies.time.type = TimeBasedTriggeringPolic #配置了用基於時間的roll策略

appender.rolling.policies.time.interval = 1 #設置每天一份日誌文件

appender.rolling.policies.time.modulate = true #設置根據自然天來劃分文件,而不是24小時

還可以配置將日誌文件保留一段時間內,同時刪除之前的日誌文件

appender.rolling.strategy.type = DefaultRolloverStrategy 
appender.rolling.strategy.action.type = Delete 
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path} 
appender.rolling.strategy.action.condition.type = IfLastModified 
appender.rolling.strategy.action.condition.age = 7D 
appender.rolling.strategy.action.PathConditions.type = IfFileName 
appender.rolling.strategy.action.PathConditions.glob = ${sys:es.logs.cluster_name}-*

 

第一行是配置了默認的DefaultRolloverStrategy
第二行是配置了Delete action,在rollover之後,就會刪除文件
第三行是配置了es log的基礎路徑
第四行是配置了rollover發生的條件,是基於IfLastModified
第五行是配置了保留的天數,這裏是7天
第六行是配置了刪除匹配7天前的文件
第七行是配置了一個刪除文件的格式,這樣就只是刪除過期日誌文件,但是不要刪除慢查詢日誌

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章