乾物丨DolphinDB高可用性の設計と展開のチュートリアル

DolphinDBは、データ、メタデータ、およびクライアントに高可用性ソリューションを提供するため、データベースノードに障害が発生しても、データベースは正常に動作し、ビジネスが中断されることはありません。

他の時系列データベースとは異なり、DolphinDBの高可用性は強力な一貫性を保証します。

1。概要

DolphinDBはマルチコピーメカニズムを使用しており、同じデータブロックのコピーが異なるデータノードに保存されます。クラスター内の1つ以上のデータノードがダウンしている場合でも、クラスター内で使用可能なコピーが少なくとも1つある限り、データベースはサービスを提供できます。

メタデータは制御ノードに保存されます。メタデータの高可用性を確保するために、DolphinDBはRaftプロトコルを使用して、複数の制御ノードを構築することでRaftグループを形成します。制御ノードの半分未満がダウンしている限り、クラスターはサービスを提供できます。

DolphinDB APIは、自動再接続および切り替えメカニズムを提供します。現在接続されているデータノードがダウンしている場合、APIは再接続を試みます。再接続が失敗すると、他のデータノードに自動的に切り替えてタスクを実行します。データノードの切り替えはユーザーに対して透過的であり、ユーザーは現在接続されているノードが切り替えられたことを認識しません。

高可用性機能を使用する場合は、最初にDolphinDBクラスターをデプロイしてください。高可用性機能は、単一のインスタンスではなく、クラスターでのみサポートされます。クラスターの展開については、マルチサーバークラスターの展開のチュートリアルを参照してください

2.高いデータ可用性

DolphinDBは、データのセキュリティと高可用性を確保するために、異なるサーバーへの複数のデータコピーの保存をサポートし、データコピー間の強力な一貫性を維持します。1台のマシンのデータが破損している場合でも、他のマシンのコピーデータにアクセスして、データサービスが中断されないようにすることができます。

コピー数は、controller.cfgのdfsReplicationFactorパラメーターで設定できます。たとえば、コピー数を2に設定します。

dfsReplicationFactor=2

デフォルトでは、DolphinDBは、同じデータブロックのコピーを同じマシンに配布することを許可します。高いデータ可用性を確保するには、同じデータブロックのコピーを異なるマシンに配布する必要があります。次の構成アイテムをcontroller.cfgに追加できます。

dfsReplicaReliabilityLevel=1

以下は、DolphinDBデータの高可用性を直感的に説明する例です。まず、クラスターのデータノードで次のスクリプトを実行してデータベースを作成します。

n=1000000
date=rand(2018.08.01..2018.08.03,n)
sym=rand(`AAPL`MS`C`YHOO,n)
qty=rand(1..1000,n)
price=rand(100.0,n)
t=table(date,sym,qty,price)
if(existsDatabase("dfs://db1")){
	dropDatabase("dfs://db1")
}
db=database("dfs://db1",VALUE,2018.08.01..2018.08.03)
trades=db.createPartitionedTable(t,`trades,`date).append!(t)

分散テーブル取引は3つのパーティションに分割され、各日付はパーティションを表します。DolphinDBのWebクラスター管理インターフェースはDFSエクスプローラーを提供し、データ分散を簡単に表示できます。取引テーブルの各パーティションの分布を次の図に示します。

20180801パーティションを例にとると、[サイト]列は、date = 2018.08.01のデータが18104データノードと18103データノードに分散されていることを示しています。18104データノードがダウンしている場合でも、18103データノードが正常である限り、ユーザーはdate = 2018.08.01のデータに対して読み取りおよび書き込み操作を実行します。

3.メタデータの高可用性

メタデータは、各データブロックがどのデータノードのどこに保存されているかなどの情報など、データが保存されるときに生成されます。メタデータが使用できない場合、データブロックが完了していても、システムはデータに正常にアクセスできません。

メタデータは制御ノードに保存されます。クラスター内に複数の制御ノードをデプロイして、メタデータの冗長性を通じて中断のないメタデータサービスを確保できます。クラスター内のすべてのコントロールノードはRaftグループを形成します。Raftグループにはリーダーが1つだけあり、他はフォロワーです。リーダーとフォロワーのメタデータは強力な一貫性を維持します。データノードはリーダーとのみ対話できます。現在のリーダーが利用できない場合、システムはすぐに新しいリーダーを選出し、メタデータサービスを提供します。Raftグループは、制御ノードのダウンタイムの半分未満を許容できます。たとえば、3つの制御ノードを含むクラスターは1つの制御ノードの障害を許容でき、5つの制御ノードを含むクラスターは2つの制御ノードの障害を許容できます。メタデータの高可用性を設定するには、制御ノードの数が少なくとも3であり、データの高可用性を設定する必要があります。つまり、コピーの数が1より大きくなければなりません。

次の例は、既存のクラスターのメタデータの高可用性を有効にする方法を紹介するために使用されます。既存のクラスターの制御ノードがP1マシン上にあると仮定すると、2つの制御ノードを追加してP2マシンとP3マシンにそれぞれ展開する必要があります。それらのイントラネットアドレスは次のとおりです。

P1: 10.1.1.1
P2: 10.1.1.3
P3: 10.1.1.5

(1)既存の制御ノードの構成ファイルを変更する

次のパラメーターをP1のcontroller.cfgファイルに追加します。dfsReplicationFactor= 2、dfsReplicaReliabilityLevel = 1、dfsHAMode = Raft。変更されたcontroller.cfgは次のとおりです。

localSite=10.1.1.1:8900:controller1
dfsReplicationFactor=2
dfsReplicaReliabilityLevel=1
dfsHAMode=Raft

(2)2つの新しい制御ノードをデプロイします

DolphinDBサーバーパッケージをP2およびP3にダウンロードし、解凍します。たとえば、/ DolphinDBディレクトリに解凍します。

/ DolphinDB / serverディレクトリの下にconfigディレクトリを作成します。configディレクトリにcontroller.cfgファイルを作成し、次のように入力します。

P2

localSite=10.1.1.3:8900:controller2
dfsReplicationFactor=2
dfsReplicaReliabilityLevel=1
dfsHAMode=Raft

P3

localSite=10.1.1.5:8900:controller3
dfsReplicationFactor=2
dfsReplicaReliabilityLevel=1
dfsHAMode=Raft

(3)既存のエージェントノードの設定ファイルを変更する

マシンのエージェントノードとすべての制御ノードのローカルエリアネットワーク情報を表す既存のagent.cfgファイルにsitesパラメータを追加します。エージェントノード情報は、すべての制御ノード情報の前にある必要があります。たとえば、P1のagent.cfgの変更されたコンテンツは次のとおりです。

localSite=10.1.1.1:8901:agent1
controllerSite=10.1.1.1:8900:controller1
sites=10.1.1.1:8901:agent1:agent,10.1.1.1:8900:controller1:controller,10.1.1.3:8900:controller2:controller,10.1.1.5:8900:controller3:controller

複数のエージェントノードがある場合は、各エージェントノードの構成ファイルを変更する必要があります。

(4)既存の制御ノードのクラスターメンバー構成ファイルを変更します

P1のcluster.nodes上の制御ノードのローカルエリアネットワーク情報を増やします。たとえば、P1のcluster.nodesの変更されたコンテンツは次のとおりです。

localSite,mode
10.1.1.1:8900:controller1,controller
10.1.1.2:8900:controller2,controller
10.1.1.3:8900:controller3,controller
10.1.1.1:8901:agent1,agent
10.1.1.1:8911:datanode1,datanode
10.1.1.1:8912:datanode2,datanode

(5)新しい制御ノードのクラスターメンバー構成ファイルとノード構成ファイルを追加します

Cluster.nodesとcluster.cfgは、ノードの起動を制御するために必要です。P1のcluster.nodesとcluster.cfgをP2とP3のconfigディレクトリにコピーします。

(6)高可用性クラスターを開始します

  • 制御ノードを起動します

各制御ノードが配置されているマシンで次のコマンドを実行します。

nohup ./dolphindb -console 0 -mode controller -home data -config config/controller.cfg -clusterConfig config/cluster.cfg -logFile log/controller.log -nodesFile config/cluster.nodes &
  • エージェントノードを起動します

エージェントノードが展開されているマシンで次のコマンドを実行します。

nohup ./dolphindb -console 0 -mode agent -home data -config config/agent.cfg -logFile log/agent.log &

データノードの起動とシャットダウン、およびノー​​ド構成の変更は、リーダーのクラスター管理インターフェイスでのみ操作できます。

  • どの制御ノードがリーダーであるかを判別する方法

ブラウザのアドレスバーに任意のコントロールノードのIPアドレスとポート番号を入力して10.1.1.1:8900などのクラスター管理インターフェイスを開き、[ノード]列のコントロールノードエイリアスcontroller1をクリックしてDolphinDBNotebookに入ります。

getActiveMaster()Leaderのエイリアスを返す関数を実行します。

ブラウザのアドレスバーにリーダーのIPアドレスとポート番号を入力して、リーダーのクラスター管理インターフェイスを開きます。

4.クライアントの高可用性

APIを使用してDolphinDBサーバーのデータノードと対話する場合、接続されたデータノードがダウンしていると、APIは再接続を試みます。再接続が失敗すると、他の使用可能なデータノードに自動的に切り替わります。これはユーザーに対して透過的です。現在、高可用性をサポートしているのはJavaAPIとPythonAPIのみです。

APIのconnectメソッドは次のとおりです。

connect(host,port,username,password,startup,highAvailability)

connectメソッドを使用してデータノードに接続する場合は、highAvailabilityパラメーターをtrueとして指定するだけで済みます。

次の例では、JavaAPIを高可用性に設定します。

import com.xxdb;
DBConnection conn = new DBConnection();
boolean success = conn.connect("10.1.1.1", 8911,"admin","123456","",true);

データノード10.1.1.1:8911がダウンした場合、APIは他の使用可能なデータノードに自動的に接続します。

5.データノードを動的に追加します

ユーザーはaddNodeコマンドを使用して、クラスターを再起動せずにデータノードをオンラインで追加できます。

次の例は、新しいサーバーP4(イントラネットIPは10.1.1.7)に新しいデータノードdatanode3を追加する方法を示しています。ポート番号は8911です。

データノードを新しい物理サーバーに追加するには、サーバー上でデータノードを起動するエージェントノードを展開する必要があります。P4のエージェントノードのポートは8901で、エイリアスはagent2です。

P4でDolphinDBパッケージをダウンロードし、/ DolphinDBなどの指定されたディレクトリに解凍します。

/ DolphinDB / serverディレクトリに移動し、設定ディレクトリを作成します。

configディレクトリにagent.cfgファイルを作成し、次の内容を入力します。

localSite=10.1.1.7:8901:agent2
controllerSite=10.1.1.1:8900:controller1
sites=10.1.1.7:8901:agent2:agent,10.1.1.1:8900:controller1:controller,10.1.1.3:8900:controller2:controller,10.1.1.5:8900:controller3:controller

configディレクトリにcluster.nodesファイルを作成し、次の内容を入力します。

localSite,mode
10.1.1.1:8900:controller1,controller
10.1.1.2:8900:controller2,controller
10.1.1.3:8900:controller3,controller
10.1.1.1:8901:agent1,agent
10.1.1.7:8901:agent2,agent
10.1.1.1:8911:datanode1,datanode
10.1.1.1:8912:datanode2,datanode

P1、P2、およびP3のcluster.nodesを、P4のcluster.nodesと同じになるように変更します。

次のLinuxコマンドを実行して、P4でエージェントノードを起動します。

nohup ./dolphindb -console 0 -mode agent -home data -config config/agent.cfg -logFile log/agent.log &

任意のデータノードで次のコマンドを実行します。

addNode("10.1.1.7",8911,"datanode3")

上記のスクリプトを実行した後、Webクラスター管理インターフェイスを更新すると、新しく追加されたデータノードが既に存在していることがわかりますが、閉じた状態であるため、新しいデータノードを手動で起動する必要があります。

6.まとめ

DolphinDBは、データ、メタデータサービス、およびAPI接続が中断されないようにすることで、モノのインターネット、金融、その他の分野で24時間中断のないサービスのニーズを満たすことができます。

おすすめ

転載: blog.csdn.net/qq_41996852/article/details/111246155