我已經設法在Microsoft Azure中設置Cassandra集羣。目前,Azure中的2個虛擬機上包含2個節點。我一直在使用OpsCenter來檢查羣集的狀態,並且一切都看起來很有前景。不過,我已經爲集羣創建了一個簡單的C#測試客戶端,使用DataStax C#Driver連接到實際正在工作但真的非常慢的集羣。使用DataStax C#驅動程序執行Cassandra的速度緩慢
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中構建的Load Balancer有關。
我也注意到集羣正在返回2個IP。一個是集羣的外部IP,另一個是一個特定節點的內部IP,當然這是從外部無法訪問的。
這是我們的設置:在端口9042上的端口
負載平衡器9160
卡桑德拉節點1與外部IP 66.55.44.33有內部IP 33.44.33.44
負載平衡器
cassandra-node2與外部IP 66.55.44.33與內部IP 11.22.11.22
卡桑德拉YAML
監聽地址卡桑德拉節點1:33.44.33.44 RPC地址卡桑德拉節點1:33.44.33.44
監聽地址卡桑德拉節點2:11.22.11.22 RPC地址cassandra- node2:11.22.11.22
有時候,程序在執行查詢時甚至會以WriteTimeoutException結束。
什麼是你的ping時間,無論你正在運行的代碼卡桑德拉節點有所改善? 10秒顯然是不合理的,我沒有看到你的代碼有什麼問題。 –