ESクラスタ読み書き分離

4866 ワード

Elasticsearch中国語コミュニティ「ES冷熱分離(読み書き分離)hot,staleシーン」による1編の整理とテスト修正により実現
本項目はこの原理に従って読み書き分離を実現する
書き込みデータをリアルタイムで読み取る必要がある場合、実際には完全な読み書き分離を実現することは不可能である.
パーティションの読み書きの分離方法:
クラスタに8つのノードがある、node 1,node 2,node 3,node 4がホットゾーン、hot,node 5,node 6,node 7,node 8がコールドゾーン、stableとする.
1.クラスタノードパーティション:
elasticsearchの各ノードパーティションを設定し、hot、stableの2つの領域に分けて、パラメータを設定します.
node.zone: hot

cluster.routing.allocation.awareness.force.zone.values: hot,stable
cluster.routing.allocation.awareness.attributes: zone

index.number_of_shards: 24

index.number_of_replicas: 0

スライス区分分布の実現方法:
1.1)、起動ノード方法:hotがすべてメインprimaryスライスであることはなく、stableがすべてコピースライスであることは、前後して順次起動ノードまたは設定方法を使用して前後してインデックスライブラリを構築して実現する必要があり、hotノードを先に起動し、stable接点を起動し、この方法はインデックスライブラリのデータ量が大きい場合に使用するのに適している.1.2)、インタフェース呼び出しの実現方法:一.0コピー方式で、インデックスライブラリを構築し、hot熱領域に限られ、スライスをhot領域にすべて分布する.
curl -XPUT 'http://localhost:9200/twitter/' -d '{
    "settings" : {
           "index.routing.allocation.include.zone": "hot",
            "number_of_shards" : 12,
            "number_of_replicas" : 0
    }
}'

二.インデックス設定を変更し、1コピーを作成します.この場合、インデックスライブラリはホットゾーンに限られているため、コピーはアセンブリできません.クラスタは黄色です.
curl -XPUT 'http://localhost:9200/twitter/_settings' -d '{
    "index" : {
            "number_of_replicas" : 1
    }
}'

三.hot、stable、クラスタアセンブリスライス、冷熱パーティションスライスを含むインデックスパーティション設定を変更します.
   curl -XPUT 'http://localhost:9200/twitter/_settings' -d '{
    "index" : {
            "routing.allocation.include.zone": "hot,stable"
    }
}'

2.インタフェースの説明:
2.1)、パーティションの読み書き分離インデックスを確立する:/es-wrapper/hssplitIndex/create?clusterName=vdata-test&indexName=testsplit 2パラメータ:clusterName:クラスタ名、必須indexName:インデックスライブラリ名、必須shardNum:スライス数、デフォルト12 replicas:コピー数、デフォルト1 delayUnAssign:インデックス遅延組立時間、デフォルト10 s hotZoneName:ホットゾーン名、デフォルトhot、esインデックス実装構成番号冷熱パーティション;stableZoneName:コールドゾーン名、デフォルトstable
2.2)、インデックスライブラリを初期化するインデックスライブラリを作成し、コピーがなく、全量のインポート時に初期化時に呼び出すのに適している:/es-wrapper/hssplitIndex/init?clusterName=vdata-test&indexName=testsplit 2パラメータ:clusterName:クラスタ名、必須indexName:インデックスライブラリ名、必須shardNum:スライス数、デフォルト12 replicas:コピー数、デフォルト1 delayUnAssign:インデックス遅延組立時間、デフォルト10 s hotZoneName:ホットゾーン名、デフォルトhot、esインデックス実装構成番号冷熱パーティション;
2.3)、全量インポート完了後にコピーstable領域インタフェースを確立し、全量インポート完了後の呼び出しに適合する:/es-wrapper/hssplitIndex/finish?clusterName=vdata-test&indexName=testsplit 2 clusterName:クラスタ名、必須indexName:インデックスライブラリ名、必須hotZoneName:ホットゾーン名、デフォルトhot、esインデックス実装構成番号冷熱パーティションが必要;stableZoneName:コールドゾーン名、デフォルトstable
3、読み書き分離:3.1)、全量データ書込:読み書き分離の操作、全量データが大量に高い同時書込の場合、まず0コピーのホットエリアインデックスライブラリを創立することができ、2.2ステップ、インデックスライブラリの創立を初期化し、書き込み操作をhotエリアの接点に限られ、0コピーは書き込み性能を高め、データの全部書き込みが完成するまで、コピー数を1、2.3ステップで書き込みを完成するように設定する.3.2)、search操作を読み込み、パラメータを付ける
        preference= _replica_first  

JAvaコード:
 SearchRequestBuilder sqb = (SearchRequestBuilder) requestBuilder;
    sqb.setPreference(Constants.ES_HOTSTABLE_SPLIT_READVALUE);

3.3).書き込みはes書き込みにコピーが必要なため、メインマスタースライスはすべて書き込み、完了し、全量のデータ書き込みでなければ、依然として全区接点書き込みである.
二、es-wrapperの読み書き分離:
es-wrapperの読み書きは異なるスレッドプールで操作され,読み書きとsqlクエリではそれぞれ以上の原理の読み書き分離パラメータが行われ,直接使用すると読み書き分離が実現される.