簡體   English   中英

Apache Cassandra 2.1.11群集故障轉移不適用於Datastax PHP驅動程序

[英]Apache Cassandra 2.1.11 cluster failover does not work with datastax php driver

我是cassandra的新手,但具有Nosql的背景和其他技術的高可用性。 幾天前,我安裝了Cassandra 3.0,但聽起來Datastax php驅動程序根本不支持它! 因此,我降級到2.1.11版本,並編寫了一個簡單的php腳本以使用Datastax php-driver對其進行查詢,並且它應該可以正常工作。

<?php

try {
    $cluster   = Cassandra::cluster()
                    ->withContactPoints('127.0.0.1')
                     ->build();
    $keyspace  = 'mykeysssspace';
    $session   = $cluster->connect($keyspace);
    $statement = new Cassandra\SimpleStatement('SELECT userid, created_date, email FROM users');
    $future    = $session->executeAsync($statement);
    $result    = $future->get();
    foreach ($result as $row) {

        printf("userId: %s, email: %s\n", $row['userid'], $row['email']);
    }
}catch(Exception $e) {

    print $e->getMessage();
}
?>

然后,我使用不同的IP地址在同一台計算機(Ubuntu 11.10!)中啟動了Cassandra的兩個實例。 然后將php代碼更改為:

$cluster   = Cassandra::cluster()
                    ->withContactPoints('127.0.0.1', '127.0.0.2')
                     ->build();

問題是,只要兩個實例都在運行,一切都會按預期運行並且php輸出預期結果。 但是當我停止一個實例(無論哪個)時,

當前策略中的所有主機都已嘗試並且不可用或失敗

即使我改回

$cluster   = Cassandra::cluster()
                    ->withContactPoints('running_instance_ip')
                     ->build();

它給了我同樣的錯誤。 但是cqlsh在每種情況下都適用。

它與Datastax php驅動程序有關嗎?

您在鍵空間上使用什么復制因子? 如果您使用的是RF = 1,則錯誤可能表明沒有足夠的主機處於活動狀態,無法滿足所有范圍。 提高復制因子將有助於解決這一問題。

以我為例,我在一個具有一個節點的隔離環境中運行測試,但是我設置的復制因子為2。因此某些功能會因超時而失敗,因為它永遠無法完成對另一個非待機狀態的等待。 -現有節點要及時更新。

因此,一種解決方案是確保復制因子不大於群集中節點的數量(是的,我無法理解為什么Cassandra不能僅僅告訴我們:RF太大而導致錯誤。)

您可以嘗試重試策略

$retry_policy = new Cassandra\RetryPolicy\DowngradingConsistency();
$cluster     = Cassandra::cluster()
                 ->withContactPoints('127.0.0.1','127.0.0.2')
                 ->withRetryPolicy(new Cassandra\RetryPolicy\Logging($retry_policy))
                 ->build();
$session     = $cluster->connect("simplex");
$statement   = $session->prepare("INSERT INTO playlists (id, song_id, artist, title, album)
                                 VALUES (62c36092-82a1-3a00-93d1-46196ee77204, ?, ?, ?, ?)");
$options     = array(
                    'consistency' => Cassandra::CONSISTENCY_ONE,
                    );
$session->execute($statement, $options);

為我工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM