Microsoft Azure で Cassandra クラスターをセットアップすることができました。現在、クラスターには Azure の 2 つの VM に 2 つのノードが含まれています。OpsCenter を使用してクラスタのステータスをチェックしてきましたが、すべて有望に思えます。ただし、DataStax C# ドライバーを使用してクラスター用の単純な C# テスト クライアントを作成し、実際には動作していますが、非常に遅いクラスターに接続しました。
static class SimpleClient
{
private static Session _session;
public static Session Session
{
get
{
return _session;
}
}
private static Cluster _cluster;
public static Cluster Cluster
{
get
{
return _cluster;
}
}
public static void Connect(String node)
{
Console.WriteLine("Connecting to " + node);
_cluster = Cluster.Builder().AddContactPoint(node).Build();
_session = _cluster.Connect();
Metadata metadata = _cluster.Metadata;
Console.WriteLine("Connected to cluster: " + metadata.ClusterName.ToString());
}
public static void Close()
{
_cluster.Shutdown();
}
public static void CreateTable()
{
Console.WriteLine("Creating table with name test1");
_session.Execute(" CREATE TABLE kstt.test1 ( identifier text PRIMARY KEY, name text ); ");
Console.WriteLine("Table created with name test1");
}
public static void InsertToTable()
{
Console.WriteLine("Inserting data into test1");
_session.Execute(" INSERT INTO kstt.test1 ( identifier, name ) VALUES ( '" + "hello" + "', '" + "man" + "' );");
Console.WriteLine("Data inserted into test1");
}
public static void ReadFromTable(int times)
{
Console.WriteLine("Reading data from test1");
for (int i = 0; i < times; i++)
{
RowSet results = _session.Execute(" SELECT * FROM kstt.test1; ");
foreach (CqlColumn cqlColumn in results.Columns)
{
Console.WriteLine("Keyspace: " + cqlColumn.Keyspace + " # Table: " + cqlColumn.Table + " # Name: " + cqlColumn.Name);
}
}
Console.WriteLine("Data was read from test1");
}
public static void DropTable()
{
Console.WriteLine("Dropping table test1");
try
{
_session.Execute(" DROP TABLE kstt.test1; ");
}
catch { }
Console.WriteLine("Dropped table test1");
}
}
このコードは実際に機能します。しかし、非常に遅く、接続に約 10 秒、クエリの実行にさらに約 10 秒かかります。cassandra.yamlの設定のうち、Azureに組み込まれているロードバランサーと関係があると思います。
また、クラスターが 2 つの IP を返していることにも気付きました。1 つはクラスターの外部 IP であり、もう 1 つは特定のノードの内部 IP であり、もちろん外部からは到達できません。
これが私たちのセットアップです:
ポート 9042 のロード バランサ
ポート 9160 のロード バランサ
外部 IP 66.55.44.33、内部 IP 33.44.33.44 の cassandra-node1
外部 IP 66.55.44.33、内部 IP 11.22.11.22 の cassandra-node2
カサンドラ・ヤムル
cassandra-node1 のリッスン アドレス: 33.44.33.44 cassandra-node1 の RPC アドレス: 33.44.33.44
cassandra-node2 のリッスン アドレス: 11.22.11.22 cassandra-node2 の RPC アドレス: 11.22.11.22
クエリの実行時に、プログラムが WriteTimeoutException になることさえあります。