CockroachDBクラスタの構築と構成

5799 ワード

CockroachDBクラスタの構築と構成


ダウンロード

  • crdb公式サイトhttps://www.cockroachlabs.com/docs/releases/v2.0.5.htmlバイナリパッケージProduction releasesはすでにGAのバージョンで、Testingは最新のテストバージョンです.
  • バイナリパッケージまたはソースパッケージをダウンロードするバージョンを選択します.
    wget -q https://binaries.cockroachdb.com/cockroach-v2.1.0-beta.20180827.linux-amd64.tgz
    これは現在最新8.27にリリースされているテストバージョン
  • です.
  • バイナリパッケージを解凍して直接使用できます.

  • クラスタ構築

  • クラスタを初期化します.クラスタを初期化するには2つの方法があります.1つは、まず1つのノードを起動して--joinパラメータを持たないことです.これにより、1つの単一ノードの新しいクラスタを自動的に初期化します.コマンドの例:
    ./cockroach start --insecure --host= --port=26257 --http-port=10166  --store=/ssd/fee/crdb/data  --log-dir=/ssd/fee/crdb/log --max-offset=100ms --max-sql-memory=.25 --cache=.25
    --portは他のノードおよびclientと通信するポートを指定し、--http-portは監視ツールAdmin UI用に、--storeはRocksDBインスタンスのパスを指定します.1つのstoreは1つのハードディスクが望ましいです.1つのマシンは複数のstoreを起動することができます.1台のマシン上の複数のstoreには同じコピーが2つ存在しない.--max-offsetはクラスタ最大の物理時間オフセットを指定し、テストを経て最適値を決定する必要がある.後の2つのflagの前者はすべてのセッションに割り当てられたメモリの合計を指定し、サポートされている同時度が高いほど、後者はRocksDBのcacheサイズを指定する.1つは、クラスタを初期化するノードipとポートを--joinに書きます.コマンドの例:
    ./cockroach start  --join=:26257,:26257,:26257 
    その後、これらのノードを同時に起動し、コマンド:
    ./cockroach init  --host=

    两种初始化方式没有区别。

  • 后续的节点用--join指定集群中已有的任何节点(即最开始初始的节点宕掉也没关系)的地址即可加入集群。

  • 其他启动节点时的参数:--advertise-host作用跟tidb的那个差不多;--attrs指定节点特性,主要是跟Replication zones配合用的,可以根据这些特性来区分数据存放位置,示例:--attrs=ram:64gb说明该机器内存64;--certs-dir指定SSL证书地址,相关的内容业务迁移那个文档里面说了;--insecure非安全模式启动集群,即不用指定前面的TSL证书,一般测试时用;--locality指定节点地理位置,也是和Replication zone配合使用的;--max-disk-temp-storage超出内存的存入硬盘的最大临时空间大小。更详细的信息可以这里看:https://www.cockroachlabs.com/docs/stable/start-a-node.html

  • 负载均衡。一般来讲推荐使用HAProxy,安装好后,使用cockroach gen haproxy生成配置文件:

  • ./cockroach gen haproxy  --host=
    --port=26257
    deamonとnbprocは主にバックグラウンドで起動するプロセス数を設定し、同時に高い場合は一般的に8プロセス、httpchkとcheck portはノードの健康検査に使用され、このcheck portはノードのhttp-portである.
    次に、ロード・バランシングを開始します.
    ./haproxy -f crdb.cfg &
  • 前述のsessionメモリとrocksdb cache割り当ては、いずれも25%であることを推奨し、実際のテストに基づいて使用量を決定することができます.
  • ファイル記述子.制限を設けないほうがいいです.最低2 wです.1.5 wはstoreに使用し、5 kはネットワークに使用する.

  • クラスタパラメータ構成

  • これらのパラメータ構成の変更は慎重に行い、crdb最適化ドキュメントとhttps://www.cockroachlabs.com/docs/stable/cluster-settings.html.これらのパラメータを変更するにはクラスタを再起動する必要はありません.クライアントでSQL文を直接使用すればいいのですが、gossip伝播には一定の時間がかかるため、すぐには有効になりません(実際には数秒で有効になります).SQL例:
  • SHOW ALL CLUSTER SETTINGS; # 
    SET CLUSTER SETTING =?;  # 
    sql.trace.log_statement_execute、logに実行されたqueryが記録されているかどうか、デフォルトでは閉じ、開くとパフォーマンスに少し影響します.server.remote_debugging.mode、リモートdebugモードをオンにするかどうか、これは主にAdmin UI用で、中にはdebugページがあり、スレッド、メモリなど多くの下位の詳細情報があります.デフォルトlocalはローカルAdmin UIのみで、anyがリモートアクセスできるように設定されています.sql.distsql.temp_storage.workmem、分布式は1つのprocessorが使うことができる最大のメモリを問合せて、デフォルトの64 M、大きい表joinなどに対して足りないで、多く出たデータをハードディスクに書き込むことができて、しかし大きすぎてメモリを爆発する可能性があって、joinが必要な時に大きくして、それから終わった後に設定して帰ることができます.sql.distsql.merge_joins.enabled、デフォルトはオンで、必要に応じてmerge joinが使用されます.kv.snapshot_rebalance.max_ratekv.snapshot_recovery.max_rate、この2つはそれぞれバランスレプリカとリカバリレプリカの速度であり、デフォルトはそれぞれ2 M/sと8 M/sであり、大きくするとリカバリ速度を速めることができる.kv.bulk_io_write.max_rate、ブロック書き込みの制限速度、デフォルト8 EB/s.これは合理的な上限を設定したほうがいいです.そうしないと、ハードディスク(HDD)の書き込みに問題がある可能性があります.
  • には、GC(garbage collection)の履歴データ回収の時間限界ttlsecondsとコピー数の2つの重要なパラメータ構成があり、いずれもReplication zoneのデフォルトプロファイルdefaultである.ymlで設定します.

  • クライアント接続


    コマンドの例:
    ./cockroach sql --insecure --host= --port=26257 
    --insecure以外のモードでは、TSL証明書アドレスを指定する必要があります.詳細は、サーバ接続後に文--executeを実行するように指定するなどのオプションの詳細です.https://www.cockroachlabs.com/docs/v2.1/use-the-built-in-sql-client.html.

    停止ノード


    注意あるノードを停止することと下線のあるノードを停止することは概念ではなく、ノードを停止し、そのノードは依然としてクラスタの構成部分であり、停止ノードserver.time_until_store_dead時間後にクラスタはそのノードがダウンタイムで元のノードのコピーデータを転送すると考えているが、そのノードアドレスなどの情報は依然としてクラスタに記録されており、そのノードのデータが失われていない場合、ノードに再加入した後も元のダウンタイムのノードのアイデンティティとして、しかし、データが失われると、ノードが同じipとポートでクラスタに追加されても、新しいノードとみなされ、ダウンタイムしたノードとしてクラスタに存在します.
    コマンドの例:
    ./cockroach quit --insecure --host= --port=26257

    停止したノードの数が一般的なレプリカの数より大きい場合、クラスタ全体が正常に動作せず、すべてのノードが停止するまで動作します.

    ラインノード


    下線(decommission)ノードコマンドが実行されると、ノードデータが直ちに転送されますが、コピーが3つのノードで3つのコピーがあるなど、十分なノード数で分散されている場合にのみ、転送のコピーを引き受ける下線ノードはできません.クラスタが比較的大きい場合、オフラインは比較的長い操作です.ノードがオフラインになった後も、彼の情報はクラスタに格納されますが、recommissionを使用してノードを再登録しない限り、ノードはクラスタに再加入できません.
  • ラインオフ生きているノード:
  • ./cockroach quit --decommission --insecure --host= --port=26257
  • ダウンラインダウン1つのダウンタイムノード:
  • ./cockroach node decommission 4 --wait=live --insecure --host= --port=26257
    --wait=liveは、クラスタが生きているノード間でオフライン情報を確認するだけでよいことを指定し、設定しないとtimeoutまでダウンタイムノードで確認し続ける.4はノードのシーケンス番号を指し、Admin UIで見つけたり、cockroach nodeで見たりすることができます.
  • 再オンラインノード:
  • ./cockroach node recommission 4 --insecure --host= --port=26257

    オンラインになったらノードを再起動すればいいです.