一 前言
在elasticsearch\config
目錄下,有三個核心的配置文件:
- elasticsearch.yml,es相關的配置。
- jvm.options,Java jvm相關參數的配置。
- log4j2.properties,日志相關的配置,因為es采用了log4j的日志框架。
這里以elasticsearch6.5.4版本為例,並且由於版本不同,配置也不太也一樣,僅作參考!
二 elasticsearch.yml
2.1 Cluster
- 配置集群名稱,由多個es實例組成的集群,有一個共同的名稱。
cluster.name: my-application
- 集群端口設置。
transport.tcp.port: 9300
- 防止同一個shard的主副本存在同一個物理機上。
cluster.routing.allocation.same_shard.host:true
- 初始化數據恢復時,並發恢復線程的個數,默認是4個。
cluster.routing.allocation.node_initial_primaries_recoveries: 4
- 添加刪除節點或者負載均衡時並發恢復線程的個數。默認是4個。
cluster.routing.allocation.node_concurrent_recoveries: 4
2.2 Node
- 節點名稱配置,一個es實例其實是一個es進程,在集群中被稱為節點。如果一個服務器上配置集群,各節點的名稱不能重復。
node.name: node-1
- 為節點添加自定義屬性,
node.attr.rack: r1
- 該節點是否有資格成為主節點,默認為true。
node.master: true
- 設置節點是否存儲數據。
node.data: true
- 設置默認主分片的個數,默認為5片,需要說明的是,主分片一經分配則無法更改。
index.number_of_shards: 5
- 設置默認復制分片的個數,默認一個主分片對應一個復制分片,需要說明的是,復制分片可以手動調整。
index.number_of_replicas: 1
- 設置數據恢復時限制的帶寬,默認0及不限制。
indices.recovery.max_size_per_ser: 0
- 設置這個參數來限制從其它分片恢復數據時最大同時打開並發流的個數,默認為5。
indices.recovery.concurrent_streams: 5
- 設置數據恢復時限制的帶寬,默認0及不限制。
indices.recovery.max_size_per_ser: 0
- 設置這個參數來限制從其它分片恢復數據時最大同時打開並發流的個數,默認為5。
indices.recovery.concurrent_streams: 5
2.3 Paths
- 存儲數據路徑設置,多個路徑以英文狀態的逗號分隔,默認根目錄下的
conf
目錄。
path.data: /path/to/data
# path.data: /path/to/data1,/path/to/data1
- 設置臨時文件存儲路徑,默認是es目錄下的work目錄。
path.work: /path/to/work
- 日志文件路徑,默認為根目錄下的
logs
目錄。
path.logs: /path/to/logs
- 設置日志文件的存儲路徑,默認是es目錄下的
logs
目錄。
path.logs: /path/to/logs
- 設置插件的存放路徑,默認是es目錄下的
plugins
目錄。
path.plugins: /path/to/plugins
2.4 Network
- 為es實例綁定特定的IP地址。
network.host: 192.168.0.1
上面的設置可以拆分為兩個參數。
network.bind_host: 192.168.0.1 # 設置綁定的ip地址,ipv4或ipv6都可以
network.publish_host: 192.168.0.1 # 設置其它節點和該節點交互的ip地址,如果不設置它會自動判斷,值必須是個真實的ip地址
- 為es實例設置特定的端口,默認為9200端口。
http.port: 9200
2.5 Discovery
- 設置是否打開多播發現節點,默認是true。
discovery.zen.ping.multicast.enabled: true
- 配置es單播發現列表,在es啟動時,通過這個列表發現別的es實例,從而加入集群。
discovery.zen.ping.unicast.hosts: ["host1", "host2"]
discovery.zen.ping.unicast.hosts: ["10.0.0.1", "10.0.0.3:9300", "10.0.0.6[9300-9400]"]
discovery.zen.minimum_master_nodes
設置是告訴集群有多少個節點有資格成為主節點,一般的規則是集群節點數除以2(向下取整)再加一。比如3個節點集群要設置為2,這個試着是為了防止腦裂問題。- 設置集群中自動發現其它節點時ping連接超時時間,默認為3秒,對於比較差的網絡環境可以高點的值來防止自動發現時出錯。
discovery.zen.ping.timeout: 3s
2.6 Memory
- 啟動時鎖定內存,默認為true,因為當jvm開始swapping時es的效率 會降低,所以要保證它不swap,可以把ES_MIN_MEM和ES_MAX_MEM兩個環境變量設置成同一個值,並且保證機器有足夠的內存分配給es。 同時也要允許elasticsearch的進程可以鎖住內存,linux下可以通過ulimit -l unlimited命令
bootstrap.memory_lock: true
- 禁止swapping交換。
bootstrap.mlockall: true
2.7 Gateway
- 設置是否壓縮tcp傳輸時的數據。默認是false不壓縮。
transport.tcp.compress: true
- 設置內容的最大容量,默認是100mb。
http.max_content_length: 100mb
- 是否使用http協議對外提供服務。默認為true。
http.enabled: false
- 設置gateway的類型,默認為本地文件系統,也可以設置分布式文件系統、Hadoop的HDFS或者AWS的都可以。
gateway.type: local
- 在完全重新啟動集群之后阻塞初始恢復,直到啟動N個節點為止,詳情參見Recovery
gateway.recover_after_nodes: 3
- 設置初始化數據恢復進程的超時時間。默認是5分鍾。
gateway.recover_after_time: 5m
- 設置該集群中節點的數量,默認為2個,一旦這N個節點啟動,就會立即進行數據恢復。
gateway.expected_nodes: 2
2.8 Various
- 刪除索引時需要顯式名稱。
action.destructive_requires_name: true
三 jvm.options
- 設置jvm堆的大小,最大值和最小值,應該是一致的,並且應該根據你的物理內存決定。
-Xms1g # 設置最小堆為1g
-Xmx1g # 設置最大堆為1g
四 log4j2.properties
這個配置文件,我們一般不修改其配置。